{
"tiddlers": {
"$:/Acknowledgements": {
"title": "$:/Acknowledgements",
"text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
},
"$:/core/copyright.txt": {
"title": "$:/core/copyright.txt",
"type": "text/plain",
"text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2020, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
},
"$:/core/icon": {
"title": "$:/core/icon",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
},
"$:/core/images/add-comment": {
"title": "$:/core/images/add-comment",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-add-comment tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 56H36a8 8 0 100 16h20v20a8 8 0 1016 0V72h20a8 8 0 100-16H72V36a8 8 0 10-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\"/></svg>"
},
"$:/core/images/advanced-search-button": {
"title": "$:/core/images/advanced-search-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-advanced-search-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M74.565 87.985A47.776 47.776 0 0148 96C21.49 96 0 74.51 0 48S21.49 0 48 0s48 21.49 48 48c0 9.854-2.97 19.015-8.062 26.636l34.347 34.347a9.443 9.443 0 010 13.36 9.446 9.446 0 01-13.36 0l-34.36-34.358zM48 80c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/><circle cx=\"48\" cy=\"48\" r=\"8\"/><circle cx=\"28\" cy=\"48\" r=\"8\"/><circle cx=\"68\" cy=\"48\" r=\"8\"/></g></svg>"
},
"$:/core/images/auto-height": {
"title": "$:/core/images/auto-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-auto-height tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M67.987 114.356l-.029-14.477a4 4 0 00-2.067-3.494l-15.966-8.813-1.933 7.502H79.9c4.222 0 5.564-5.693 1.786-7.58L49.797 71.572 48.01 79.15h31.982c4.217 0 5.564-5.682 1.795-7.575L49.805 55.517l-1.795 7.575h31.982c4.212 0 5.563-5.67 1.805-7.57l-16.034-8.105 2.195 3.57V35.614l9.214 9.213a4 4 0 105.656-5.656l-16-16a4 4 0 00-5.656 0l-16 16a4 4 0 105.656 5.656l9.13-9.13v15.288a4 4 0 002.195 3.57l16.035 8.106 1.804-7.57H48.01c-4.217 0-5.564 5.682-1.795 7.574l31.982 16.059 1.795-7.575H48.01c-4.222 0-5.564 5.693-1.787 7.579l31.89 15.923 1.787-7.578H47.992c-4.133 0-5.552 5.504-1.933 7.501l15.966 8.813-2.067-3.494.029 14.436-9.159-9.158a4 4 0 00-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656l-9.185 9.184zM16 20h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/blank": {
"title": "$:/core/images/blank",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\"/>"
},
"$:/core/images/bold": {
"title": "$:/core/images/bold",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-bold tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.146 51.81V21.87h26.353c2.51 0 4.93.21 7.26.628 2.33.418 4.392 1.165 6.185 2.24 1.793 1.076 3.227 2.57 4.302 4.482 1.076 1.913 1.614 4.363 1.614 7.35 0 5.379-1.613 9.263-4.84 11.653-3.227 2.39-7.35 3.586-12.37 3.586H41.146zM13 0v128h62.028a65.45 65.45 0 0016.762-2.151c5.438-1.434 10.278-3.645 14.52-6.633 4.244-2.988 7.62-6.842 10.13-11.563 2.51-4.721 3.764-10.308 3.764-16.762 0-8.008-1.942-14.85-5.826-20.527-3.884-5.677-9.77-9.65-17.658-11.921 5.737-2.75 10.069-6.275 12.997-10.577 2.928-4.303 4.392-9.681 4.392-16.135 0-5.976-.986-10.995-2.958-15.059-1.972-4.063-4.75-7.32-8.336-9.77-3.585-2.45-7.888-4.213-12.907-5.289C84.888.538 79.33 0 73.235 0H13zm28.146 106.129V70.992H71.8c6.095 0 10.995 1.404 14.7 4.212 3.705 2.81 5.558 7.5 5.558 14.073 0 3.347-.568 6.096-1.703 8.247-1.136 2.151-2.66 3.854-4.572 5.11-1.912 1.254-4.123 2.15-6.633 2.688-2.51.538-5.139.807-7.888.807H41.146z\"/></svg>"
},
"$:/core/images/cancel-button": {
"title": "$:/core/images/cancel-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 76.314l-16.97 16.97a7.999 7.999 0 01-11.314 0c-3.118-3.118-3.124-8.19 0-11.313L52.686 65l-16.97-16.97a7.999 7.999 0 010-11.314c3.118-3.118 8.19-3.124 11.313 0L64 53.686l16.97-16.97a7.999 7.999 0 0111.314 0c3.118 3.118 3.124 8.19 0 11.313L75.314 65l16.97 16.97a7.999 7.999 0 010 11.314c-3.118 3.118-8.19 3.124-11.313 0L64 76.314zM64 129c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 1 0 29.654 0 65c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 17 64 17 16 38.49 16 65s21.49 48 48 48z\"/></svg>"
},
"$:/core/images/chevron-down": {
"title": "$:/core/images/chevron-down",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-down tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.053 85.456a7.889 7.889 0 01-5.6-2.316L2.473 27.16a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0L64.05 66.344l50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.105 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.317z\"/><path d=\"M64.053 124.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></g></svg>"
},
"$:/core/images/chevron-left": {
"title": "$:/core/images/chevron-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M47.544 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L66.656 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.105 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.317-5.595z\"/><path d=\"M8.931 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L28.041 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.104 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.316-5.595z\"/></g></svg>"
},
"$:/core/images/chevron-right": {
"title": "$:/core/images/chevron-right",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-right tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M83.456 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196L64.344 63.95 13.963 13.567a7.92 7.92 0 010-11.195c3.086-3.085 8.105-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.317 5.595z\"/><path d=\"M122.069 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></g></svg>"
},
"$:/core/images/chevron-up": {
"title": "$:/core/images/chevron-up",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-up tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M63.947 44.544c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 63.656l-50.382 50.382a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.317z\"/><path d=\"M63.947 5.931c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 25.041 13.567 75.423a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.104 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.316z\"/></g></svg>"
},
"$:/core/images/clone-button": {
"title": "$:/core/images/clone-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-clone-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M32.265 96v24.002A7.996 7.996 0 0040.263 128h79.74a7.996 7.996 0 007.997-7.998v-79.74a7.996 7.996 0 00-7.998-7.997H96V48h12.859a2.99 2.99 0 012.994 2.994v57.865a2.99 2.99 0 01-2.994 2.994H50.994A2.99 2.99 0 0148 108.859V96H32.265z\"/><path d=\"M40 56h-7.993C27.588 56 24 52.418 24 48c0-4.41 3.585-8 8.007-8H40v-7.993C40 27.588 43.582 24 48 24c4.41 0 8 3.585 8 8.007V40h7.993C68.412 40 72 43.582 72 48c0 4.41-3.585 8-8.007 8H56v7.993C56 68.412 52.418 72 48 72c-4.41 0-8-3.585-8-8.007V56zM8 0C3.58 0 0 3.588 0 8v80c0 4.419 3.588 8 8 8h80c4.419 0 8-3.588 8-8V8c0-4.419-3.588-8-8-8H8zM19 16A2.997 2.997 0 0016 19.001v57.998A2.997 2.997 0 0019.001 80h57.998A2.997 2.997 0 0080 76.999V19.001A2.997 2.997 0 0076.999 16H19.001z\"/></g></svg>"
},
"$:/core/images/close-all-button": {
"title": "$:/core/images/close-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-close-all-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M28 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L16.686 100 2.543 85.856a8 8 0 0111.313-11.313L28 88.686l14.144-14.143a8 8 0 0111.313 11.313L39.314 100l14.143 14.144a8 8 0 01-11.313 11.313L28 111.314zM28 39.314L13.856 53.457A8 8 0 012.543 42.144L16.686 28 2.543 13.856A8 8 0 0113.856 2.543L28 16.686 42.144 2.543a8 8 0 0111.313 11.313L39.314 28l14.143 14.144a8 8 0 01-11.313 11.313L28 39.314zM100 39.314L85.856 53.457a8 8 0 01-11.313-11.313L88.686 28 74.543 13.856A8 8 0 0185.856 2.543L100 16.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 28l14.143 14.144a8 8 0 01-11.313 11.313L100 39.314zM100 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L88.686 100 74.543 85.856a8 8 0 0111.313-11.313L100 88.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 100l14.143 14.144a8 8 0 01-11.313 11.313L100 111.314z\"/></g></svg>"
},
"$:/core/images/close-button": {
"title": "$:/core/images/close-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M65.086 75.41l-50.113 50.113c-3.121 3.121-8.192 3.126-11.316.002-3.118-3.118-3.123-8.19.002-11.316l50.114-50.114L3.659 13.982C.538 10.86.533 5.79 3.657 2.666c3.118-3.118 8.19-3.123 11.316.002l50.113 50.114L115.2 2.668c3.121-3.121 8.192-3.126 11.316-.002 3.118 3.118 3.123 8.19-.002 11.316L76.4 64.095l50.114 50.114c3.121 3.121 3.126 8.192.002 11.316-3.118 3.118-8.19 3.123-11.316-.002L65.086 75.409z\"/></svg>"
},
"$:/core/images/close-others-button": {
"title": "$:/core/images/close-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-others-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48zm0-16c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32zm0-16c8.837 0 16-7.163 16-16s-7.163-16-16-16-16 7.163-16 16 7.163 16 16 16z\"/></svg>"
},
"$:/core/images/copy-clipboard": {
"title": "$:/core/images/copy-clipboard",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-copy-clipboard tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"33\" height=\"8\" x=\"40\" y=\"40\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"82\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"54\" rx=\"4\"/><rect width=\"33\" height=\"8\" x=\"40\" y=\"96\" rx=\"4\"/><rect width=\"12\" height=\"8\" x=\"40\" y=\"68\" rx=\"4\"/><path d=\"M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z\"/><rect width=\"66\" height=\"16\" x=\"62\" y=\"64\" rx=\"8\"/><path d=\"M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z\"/></g></svg>"
},
"$:/core/images/delete-button": {
"title": "$:/core/images/delete-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(12)\"><rect width=\"105\" height=\"16\" y=\"11\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"28\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"8\" y=\"16\" rx=\"8\"/><rect width=\"88\" height=\"16\" x=\"8\" y=\"112\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"80\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"56\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"32\" y=\"16\" rx=\"8\"/></g></svg>"
},
"$:/core/images/done-button": {
"title": "$:/core/images/done-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M42.26 111.032c-2.051.001-4.103-.78-5.668-2.345L2.662 74.758a8 8 0 01-.005-11.32c3.118-3.117 8.192-3.12 11.32.007l28.278 28.278 72.124-72.124a8.002 8.002 0 0111.314-.001c3.118 3.118 3.124 8.19 0 11.315l-77.78 77.78a7.978 7.978 0 01-5.658 2.343z\"/></svg>"
},
"$:/core/images/down-arrow": {
"title": "$:/core/images/down-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.177 100.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.086 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></svg>"
},
"$:/core/images/download-button": {
"title": "$:/core/images/download-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-download-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\" class=\"tc-image-download-button-ring\"/><path d=\"M34.35 66.43l26.892 27.205a4.57 4.57 0 006.516 0L94.65 66.43a4.7 4.7 0 000-6.593 4.581 4.581 0 00-3.258-1.365h-8.46c-2.545 0-4.608-2.087-4.608-4.661v-15.15c0-2.575-2.063-4.662-4.608-4.662H55.284c-2.545 0-4.608 2.087-4.608 4.662v15.15c0 2.574-2.063 4.661-4.608 4.661h-8.46c-2.545 0-4.608 2.087-4.608 4.662a4.69 4.69 0 001.35 3.296z\"/></g></svg>"
},
"$:/core/images/edit-button": {
"title": "$:/core/images/edit-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M95.627 10.059l-5.656 5.657 11.313 11.313 5.657-5.656-11.314-11.314zm5.657-5.657l1.966-1.966c3.123-3.122 8.194-3.129 11.319-.005 3.117 3.118 3.122 8.192-.005 11.32l-1.966 1.965-11.314-11.314zm-16.97 16.97l-60.25 60.25a8.12 8.12 0 00-.322.342c-.1.087-.198.179-.295.275-5.735 5.735-10.702 22.016-10.702 22.016s16.405-5.09 22.016-10.702c.095-.096.186-.193.272-.292a8.12 8.12 0 00.345-.325l60.25-60.25-11.314-11.313zM35.171 124.19c6.788-.577 13.898-2.272 23.689-5.348 1.825-.573 3.57-1.136 6.336-2.04 16-5.226 21.877-6.807 28.745-7.146 8.358-.413 13.854 2.13 17.58 8.699a4 4 0 006.959-3.946c-5.334-9.406-13.745-13.296-24.933-12.744-7.875.39-14.057 2.052-30.835 7.533-2.739.894-4.46 1.45-6.25 2.012-19.46 6.112-30.77 7.072-39.597 1.747a4 4 0 10-4.132 6.85c6.333 3.82 13.754 5.12 22.438 4.383z\"/></g></svg>"
},
"$:/core/images/erase": {
"title": "$:/core/images/erase",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-erase tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.087 127.996l63.015-63.015c6.535-6.535 6.528-17.115-.003-23.646L99.466 17.702c-6.539-6.538-17.117-6.532-23.646-.003L4.898 88.62c-6.535 6.534-6.528 17.115.003 23.646l15.73 15.73h39.456zm-34.95-7.313l-14.324-14.325c-3.267-3.268-3.268-8.564-.008-11.824L46.269 59.07l35.462 35.462-26.15 26.15H25.137z\"/></svg>"
},
"$:/core/images/excise": {
"title": "$:/core/images/excise",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-excise tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 107.314l-2.343 2.343a8 8 0 11-11.314-11.314l16-16a8 8 0 0111.314 0l16 16a8 8 0 11-11.314 11.314L72 107.314v14.284c0 3.536-3.582 6.402-8 6.402s-8-2.866-8-6.402v-14.284zM0 40.007C0 35.585 3.59 32 8 32c4.418 0 8 3.588 8 8.007v31.986C16 76.415 12.41 80 8 80c-4.418 0-8-3.588-8-8.007V40.007zm32 0C32 35.585 35.59 32 40 32c4.418 0 8 3.588 8 8.007v31.986C48 76.415 44.41 80 40 80c-4.418 0-8-3.588-8-8.007V40.007zm48 0C80 35.585 83.59 32 88 32c4.418 0 8 3.588 8 8.007v31.986C96 76.415 92.41 80 88 80c-4.418 0-8-3.588-8-8.007V40.007zm-24-32C56 3.585 59.59 0 64 0c4.418 0 8 3.588 8 8.007v31.986C72 44.415 68.41 48 64 48c-4.418 0-8-3.588-8-8.007V8.007zm56 32c0-4.422 3.59-8.007 8-8.007 4.418 0 8 3.588 8 8.007v31.986c0 4.422-3.59 8.007-8 8.007-4.418 0-8-3.588-8-8.007V40.007z\"/></svg>"
},
"$:/core/images/export-button": {
"title": "$:/core/images/export-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-export-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.003 128H119.993a7.984 7.984 0 005.664-2.349v.007A7.975 7.975 0 00128 120V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v56H16V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v64c0 4.418 3.59 8 8 8h.003zm48.62-100.689l-8.965 8.966c-3.125 3.125-8.195 3.13-11.319.005-3.118-3.118-3.122-8.192.005-11.319L58.962 2.346A7.986 7.986 0 0164.625 0l-.006.002c2.05-.001 4.102.78 5.666 2.344l22.618 22.617c3.124 3.125 3.129 8.195.005 11.319-3.118 3.118-8.192 3.122-11.319-.005l-8.965-8.966v61.256c0 4.411-3.582 8-8 8-4.41 0-8-3.582-8-8V27.311z\"/></svg>"
},
"$:/core/images/file": {
"title": "$:/core/images/file",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-file tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M111.968 30.5H112V120a8 8 0 01-8 8H24a8 8 0 01-8-8V8a8 8 0 018-8h57v.02a7.978 7.978 0 015.998 2.337l22.627 22.627a7.975 7.975 0 012.343 5.516zM81 8H24v112h80V30.5H89c-4.418 0-8-3.578-8-8V8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"68\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"84\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"100\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/></svg>"
},
"$:/core/images/fixed-height": {
"title": "$:/core/images/fixed-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fixed-height tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60 35.657l-9.172 9.171a4 4 0 11-5.656-5.656l16-16a4 4 0 015.656 0l16 16a4 4 0 01-5.656 5.656L68 35.657v57.686l9.172-9.171a4 4 0 115.656 5.656l-16 16a4 4 0 01-5.656 0l-16-16a4 4 0 115.656-5.656L60 93.343V35.657zM16 116h96a4 4 0 100-8H16a4 4 0 100 8zm0-96h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/fold-all-button": {
"title": "$:/core/images/fold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M64.03 20.004c-2.05 0-4.102.78-5.667 2.344L35.746 44.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 22.348a7.986 7.986 0 00-5.663-2.346zM64.03 85.002c-2.05-.001-4.102.78-5.667 2.344l-22.617 22.617c-3.125 3.125-3.13 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.966 16.966 16.966c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.192-.005-11.319L69.687 87.346A7.986 7.986 0 0064.024 85z\"/></g></svg>"
},
"$:/core/images/fold-button": {
"title": "$:/core/images/fold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M64.03 25.004c-2.05 0-4.102.78-5.667 2.344L35.746 49.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 27.348a7.986 7.986 0 00-5.663-2.346zM64.005 67.379c-2.05 0-4.102.78-5.666 2.344L35.722 92.34c-3.125 3.125-3.13 8.195-.006 11.32 3.118 3.117 8.192 3.121 11.32-.006L64 86.69l16.965 16.965c3.125 3.125 8.195 3.13 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L69.663 69.723A7.986 7.986 0 0064 67.377z\"/></g></svg>"
},
"$:/core/images/fold-others-button": {
"title": "$:/core/images/fold-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-others tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" y=\"56.031\" rx=\"8\"/><path d=\"M86.632 79.976c-2.05 0-4.102.78-5.666 2.345L64 99.286 47.034 82.321a7.986 7.986 0 00-5.662-2.346l.005.001c-2.05 0-4.102.78-5.666 2.345l-22.618 22.617c-3.124 3.125-3.129 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.966-16.966 16.965 16.966a7.986 7.986 0 005.663 2.346l-.005-.002c2.05 0 4.102-.78 5.666-2.344l16.965-16.966 16.966 16.966c3.125 3.124 8.194 3.129 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L92.289 82.321a7.986 7.986 0 00-5.663-2.346zM86.7 48.024c-2.05 0-4.102-.78-5.666-2.345L64.07 28.714 47.103 45.679a7.986 7.986 0 01-5.663 2.346l.005-.001c-2.05 0-4.101-.78-5.666-2.345L13.162 23.062c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L41.44 28.714l16.966-16.966a7.986 7.986 0 015.662-2.346l-.005.002c2.05 0 4.102.78 5.666 2.344l16.966 16.966 16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L92.358 45.679a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/folder": {
"title": "$:/core/images/folder",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-folder tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\"/><path d=\"M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\"/></g></svg>"
},
"$:/core/images/full-screen-button": {
"title": "$:/core/images/full-screen-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-full-screen-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 8a8 8 0 018-8h32a8 8 0 110 16H16v24a8 8 0 11-16 0V8zM128 120a8 8 0 01-8 8H88a8 8 0 110-16h24V88a8 8 0 1116 0v32zM8 128a8 8 0 01-8-8V88a8 8 0 1116 0v24h24a8 8 0 110 16H8zM120 0a8 8 0 018 8v32a8 8 0 11-16 0V16H88a8 8 0 110-16h32z\"/></svg>"
},
"$:/core/images/github": {
"title": "$:/core/images/github",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-github tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M63.938 1.607c-35.336 0-63.994 28.69-63.994 64.084 0 28.312 18.336 52.329 43.768 60.802 3.202.59 4.37-1.388 4.37-3.088 0-1.518-.056-5.55-.087-10.897-17.802 3.871-21.558-8.591-21.558-8.591-2.911-7.404-7.108-9.375-7.108-9.375-5.81-3.973.44-3.895.44-3.895 6.424.453 9.803 6.606 9.803 6.606 5.709 9.791 14.981 6.963 18.627 5.322.582-4.138 2.236-6.963 4.063-8.564-14.211-1.617-29.153-7.117-29.153-31.672 0-6.995 2.495-12.718 6.589-17.195-.66-1.621-2.856-8.14.629-16.96 0 0 5.37-1.722 17.597 6.57 5.104-1.424 10.58-2.132 16.022-2.16 5.438.028 10.91.736 16.022 2.16 12.22-8.292 17.582-6.57 17.582-6.57 3.493 8.82 1.297 15.339.64 16.96 4.102 4.477 6.578 10.2 6.578 17.195 0 24.618-14.966 30.035-29.22 31.62 2.295 1.98 4.342 5.89 4.342 11.87 0 8.564-.079 15.476-.079 17.576 0 1.715 1.155 3.71 4.4 3.084 25.413-8.493 43.733-32.494 43.733-60.798 0-35.394-28.657-64.084-64.006-64.084\"/></svg>"
},
"$:/core/images/gitter": {
"title": "$:/core/images/gitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-gitter tc-image-button\" viewBox=\"0 0 18 25\"><path d=\"M15 5h2v10h-2zM10 5h2v20h-2zM5 5h2v20H5zM0 0h2v15H0z\"/></svg>"
},
"$:/core/images/globe": {
"title": "$:/core/images/globe",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-globe tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M72.811 37.128v2.554c0 2.196.978 6.881 0 8.832-1.466 2.928-4.65 3.54-6.394 5.867-1.182 1.577-4.618 10.601-3.69 12.92 3.969 9.922 11.534 3.187 17.962 9.293.864.821 2.887 2.273 3.296 3.296 3.29 8.223-7.576 15.009 3.757 26.3 1.245 1.24 3.813-3.817 4.079-4.614.852-2.563 6.725-5.45 9.088-7.053 2.02-1.37 4.873-2.667 6.328-4.745 2.27-3.244 1.48-7.514 3.098-10.745 2.139-4.274 3.828-9.635 5.998-13.966 3.898-7.781 4.721 2.093 5.067 2.439.358.357 1.011 0 1.517 0 .094 0 1.447.099 1.516 0 .65-.935-1.043-17.92-1.318-19.297-1.404-7.01-6.944-15.781-11.865-20.5-6.274-6.015-7.09-16.197-18.259-14.954-.204.022-5.084 10.148-7.777 13.512-3.728 4.657-2.47-4.153-6.526-4.153-.081 0-1.183-.103-1.253 0-.586.88-1.44 3.896-2.306 4.417-.265.16-1.722-.239-1.846 0-2.243 4.3 8.256 2.212 5.792 7.952-2.352 5.481-6.328-1.997-6.328 8.56M44.467 7.01c9.685 6.13.682 12.198 2.694 16.215 1.655 3.303 4.241 5.395 1.714 9.814-2.063 3.608-6.87 3.966-9.623 6.723-3.04 3.044-5.464 8.94-6.79 12.911-1.617 4.843 14.547 6.866 12.063 11.008-1.386 2.311-6.746 1.466-8.437.198-1.165-.873-3.593-.546-4.417-1.78-2.613-3.915-2.26-8.023-3.625-12.128-.938-2.822-6.313-2.12-7.844-.593-.523.522-.33 1.792-.33 2.505 0 5.285 7.12 3.316 7.12 6.46 0 14.636 3.927 6.534 11.14 11.336 10.036 6.683 7.844 7.303 14.946 14.404 3.673 3.673 7.741 3.686 9.425 9.294 1.602 5.331-9.327 5.339-11.716 7.448-1.123.991-2.813 4.146-4.219 4.615-1.792.598-3.234.496-4.944 1.78-2.427 1.82-3.9 4.932-4.02 4.81-2.148-2.147-3.52-15.479-3.89-18.257-.588-4.42-5.59-5.54-6.986-9.03-1.57-3.927 1.524-9.52-1.129-13.761-6.52-10.424-11.821-14.5-15.35-26.292-.942-3.148 3.342-6.529 4.877-8.833 1.877-2.816 2.662-5.854 4.746-8.635C22.147 24.19 40.855 9.461 43.857 8.635l.61-1.625z\"/><path d=\"M64 126c34.242 0 62-27.758 62-62 0-34.242-27.758-62-62-62C29.758 2 2 29.758 2 64c0 34.242 27.758 62 62 62zm0-6c30.928 0 56-25.072 56-56S94.928 8 64 8 8 33.072 8 64s25.072 56 56 56z\"/></g></svg>"
},
"$:/core/images/heading-1": {
"title": "$:/core/images/heading-1",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-1 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M14 30h13.25v30.104H61.7V30h13.25v75.684H61.7V71.552H27.25v34.132H14V30zm70.335 13.78c2.544 0 5.017-.212 7.42-.636 2.403-.424 4.576-1.13 6.52-2.12 1.942-.99 3.603-2.261 4.981-3.816 1.378-1.555 2.28-3.463 2.703-5.724h9.858v74.2h-13.25V53.32H84.335v-9.54z\"/></svg>"
},
"$:/core/images/heading-2": {
"title": "$:/core/images/heading-2",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-2 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm119.52 75.684H74.85c.07-6.148 1.555-11.519 4.452-16.112 2.897-4.593 6.855-8.586 11.872-11.978a133.725 133.725 0 017.526-5.141 59.6 59.6 0 007.208-5.353c2.19-1.908 3.993-3.975 5.406-6.201 1.413-2.226 2.155-4.788 2.226-7.685 0-1.343-.159-2.774-.477-4.293a11.357 11.357 0 00-1.855-4.24c-.919-1.307-2.19-2.403-3.816-3.286-1.625-.883-3.745-1.325-6.36-1.325-2.403 0-4.399.477-5.989 1.431-1.59.954-2.862 2.261-3.816 3.922-.954 1.66-1.66 3.622-2.12 5.883-.46 2.261-.724 4.7-.795 7.314H76.23c0-4.099.548-7.897 1.643-11.395 1.095-3.498 2.738-6.519 4.93-9.063 2.19-2.544 4.857-4.54 8.002-5.989C93.95 30.724 97.606 30 101.775 30c4.523 0 8.303.742 11.342 2.226 3.039 1.484 5.494 3.357 7.367 5.618 1.873 2.261 3.198 4.717 3.975 7.367.777 2.65 1.166 5.176 1.166 7.579 0 2.968-.46 5.653-1.378 8.056a25.942 25.942 0 01-3.71 6.625 37.5 37.5 0 01-5.3 5.565 79.468 79.468 0 01-6.148 4.77 165.627 165.627 0 01-6.36 4.24 94.28 94.28 0 00-5.883 4.028c-1.802 1.343-3.374 2.738-4.717 4.187-1.343 1.449-2.261 2.986-2.756 4.611h36.146v10.812z\"/></svg>"
},
"$:/core/images/heading-3": {
"title": "$:/core/images/heading-3",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-3 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm88.885 32.224c1.979.07 3.957-.07 5.936-.424 1.979-.353 3.745-.972 5.3-1.855a10.365 10.365 0 003.763-3.657c.954-1.555 1.431-3.463 1.431-5.724 0-3.18-1.078-5.724-3.233-7.632-2.155-1.908-4.929-2.862-8.32-2.862-2.12 0-3.958.424-5.513 1.272a11.318 11.318 0 00-3.869 3.445c-1.025 1.449-1.784 3.074-2.279 4.876a18.335 18.335 0 00-.636 5.565H75.381c.141-3.604.813-6.943 2.014-10.017 1.201-3.074 2.844-5.742 4.93-8.003 2.084-2.261 4.61-4.028 7.578-5.3C92.871 30.636 96.228 30 99.973 30a29.2 29.2 0 018.533 1.272c2.791.848 5.3 2.085 7.526 3.71s4.01 3.692 5.353 6.201c1.343 2.509 2.014 5.388 2.014 8.639 0 3.745-.848 7.014-2.544 9.805-1.696 2.791-4.346 4.823-7.95 6.095v.212c4.24.848 7.544 2.95 9.911 6.307s3.551 7.438 3.551 12.243c0 3.533-.707 6.696-2.12 9.487a21.538 21.538 0 01-5.724 7.102c-2.403 1.943-5.194 3.445-8.374 4.505-3.18 1.06-6.537 1.59-10.07 1.59-4.31 0-8.074-.618-11.289-1.855s-5.9-2.986-8.056-5.247c-2.155-2.261-3.798-4.982-4.929-8.162-1.13-3.18-1.731-6.713-1.802-10.6h12.084c-.141 4.523.972 8.286 3.34 11.289 2.366 3.003 5.917 4.505 10.652 4.505 4.028 0 7.402-1.148 10.123-3.445 2.72-2.297 4.081-5.565 4.081-9.805 0-2.897-.565-5.194-1.696-6.89a10.97 10.97 0 00-4.452-3.869c-1.837-.883-3.904-1.431-6.2-1.643a58.067 58.067 0 00-7.05-.212v-9.01z\"/></svg>"
},
"$:/core/images/heading-4": {
"title": "$:/core/images/heading-4",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-4 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8 30h13.25v30.104H55.7V30h13.25v75.684H55.7V71.552H21.25v34.132H8V30zm76.59 48.548h22.471V45.9h-.212L84.59 78.548zm43.46 9.54h-9.54v17.596H107.06V88.088h-31.8V76.11l31.8-44.626h11.448v47.064h9.54v9.54z\"/></svg>"
},
"$:/core/images/heading-5": {
"title": "$:/core/images/heading-5",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-5 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm77.755 1.484h38.372v10.812H92.765L88.95 61.164l.212.212c1.625-1.837 3.692-3.233 6.201-4.187 2.509-.954 5-1.431 7.473-1.431 3.675 0 6.96.618 9.858 1.855 2.897 1.237 5.335 2.968 7.314 5.194s3.48 4.858 4.505 7.897c1.025 3.039 1.537 6.325 1.537 9.858 0 2.968-.477 6.024-1.43 9.169a25.161 25.161 0 01-4.559 8.586c-2.085 2.58-4.752 4.7-8.003 6.36-3.25 1.66-7.137 2.491-11.66 2.491-3.604 0-6.943-.477-10.017-1.431-3.074-.954-5.777-2.385-8.109-4.293-2.332-1.908-4.187-4.258-5.565-7.049-1.378-2.791-2.138-6.06-2.279-9.805h12.084c.353 4.028 1.731 7.12 4.134 9.275 2.403 2.155 5.583 3.233 9.54 3.233 2.544 0 4.7-.424 6.466-1.272 1.767-.848 3.198-2.014 4.293-3.498 1.095-1.484 1.873-3.215 2.332-5.194.46-1.979.69-4.099.69-6.36 0-2.05-.284-4.01-.849-5.883-.565-1.873-1.413-3.516-2.544-4.929-1.13-1.413-2.597-2.544-4.399-3.392-1.802-.848-3.904-1.272-6.307-1.272-2.544 0-4.929.477-7.155 1.431-2.226.954-3.834 2.738-4.823 5.353H75.805l7.95-40.598z\"/></svg>"
},
"$:/core/images/heading-6": {
"title": "$:/core/images/heading-6",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-6 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm106.587 20.246c-.283-3.039-1.36-5.494-3.233-7.367-1.873-1.873-4.399-2.809-7.579-2.809-2.19 0-4.08.406-5.67 1.219a12.435 12.435 0 00-4.029 3.233c-1.095 1.343-1.979 2.88-2.65 4.611a37.696 37.696 0 00-1.643 5.459 46.08 46.08 0 00-.9 5.671 722.213 722.213 0 00-.478 5.247l.212.212c1.625-2.968 3.87-5.176 6.731-6.625 2.862-1.449 5.954-2.173 9.275-2.173 3.675 0 6.96.636 9.858 1.908 2.897 1.272 5.353 3.021 7.367 5.247 2.014 2.226 3.551 4.858 4.611 7.897 1.06 3.039 1.59 6.325 1.59 9.858 0 3.604-.583 6.943-1.749 10.017-1.166 3.074-2.844 5.76-5.035 8.056-2.19 2.297-4.805 4.081-7.844 5.353-3.039 1.272-6.395 1.908-10.07 1.908-5.441 0-9.91-1.007-13.409-3.021-3.498-2.014-6.254-4.77-8.268-8.268-2.014-3.498-3.41-7.597-4.187-12.296-.777-4.7-1.166-9.77-1.166-15.211 0-4.452.477-8.94 1.431-13.462.954-4.523 2.526-8.639 4.717-12.349 2.19-3.71 5.07-6.731 8.64-9.063C92.676 31.166 97.075 30 102.304 30c2.968 0 5.76.495 8.374 1.484 2.615.99 4.93 2.367 6.943 4.134 2.014 1.767 3.657 3.887 4.93 6.36 1.271 2.473 1.978 5.23 2.12 8.268h-12.085zm-11.66 46.852c2.19 0 4.099-.442 5.724-1.325a12.869 12.869 0 004.081-3.445c1.095-1.413 1.908-3.056 2.438-4.929.53-1.873.795-3.798.795-5.777s-.265-3.887-.795-5.724c-.53-1.837-1.343-3.445-2.438-4.823-1.095-1.378-2.456-2.491-4.08-3.339-1.626-.848-3.534-1.272-5.725-1.272-2.19 0-4.116.406-5.777 1.219-1.66.813-3.056 1.908-4.187 3.286-1.13 1.378-1.979 2.986-2.544 4.823-.565 1.837-.848 3.78-.848 5.83 0 2.05.283 3.993.848 5.83.565 1.837 1.413 3.48 2.544 4.929a12.39 12.39 0 004.187 3.445c1.66.848 3.586 1.272 5.777 1.272z\"/></svg>"
},
"$:/core/images/help": {
"title": "$:/core/images/help",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-help tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M36.055 111.441c-5.24 4.396-15.168 7.362-26.555 7.362-1.635 0-3.24-.06-4.806-.179 7.919-2.64 14.062-8.6 16.367-16.014C8.747 92.845 1.05 78.936 1.05 63.5c0-29.547 28.206-53.5 63-53.5s63 23.953 63 53.5-28.206 53.5-63 53.5c-10.055 0-19.56-2-27.994-5.559zm35.35-33.843a536.471 536.471 0 00.018-4.682 199.02 199.02 0 00-.023-3.042c.008-1.357.595-2.087 3.727-4.235.112-.077 1.085-.74 1.386-.948 3.093-2.133 5.022-3.786 6.762-6.187 2.34-3.228 3.558-7.077 3.558-11.649 0-13.292-9.86-21.952-21.455-21.952-11.103 0-22.499 9.609-24.066 22.295a6.023 6.023 0 1011.956 1.477c.806-6.527 6.972-11.726 12.11-11.726 5.265 0 9.408 3.64 9.408 9.906 0 3.634-1.1 5.153-5.111 7.919l-1.362.93c-2.682 1.84-4.227 3.1-5.7 4.931-2.109 2.62-3.242 5.717-3.258 9.314.013.892.02 1.86.022 2.981a470.766 470.766 0 01-.022 4.943 6.023 6.023 0 1012.046.12l.003-.395zm-6.027 24.499a7.529 7.529 0 100-15.058 7.529 7.529 0 000 15.058z\"/></svg>"
},
"$:/core/images/home-button": {
"title": "$:/core/images/home-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112.985 119.502c.01-.165.015-.331.015-.499V67.568c3.137 2.948 8.076 2.884 11.134-.174a7.999 7.999 0 00-.002-11.316L70.396 2.343A7.978 7.978 0 0064.734 0a7.957 7.957 0 00-5.656 2.343L33 28.42V8.007C33 3.585 29.41 0 25 0c-4.418 0-8 3.59-8 8.007V44.42L5.342 56.078c-3.125 3.125-3.12 8.198-.002 11.316a7.999 7.999 0 0011.316-.003l.344-.343v52.945a8.11 8.11 0 000 .007c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8a8.11 8.11 0 00-.015-.498zM97 112V51.574L64.737 19.31 33 51.048V112h64z\"/></svg>"
},
"$:/core/images/import-button": {
"title": "$:/core/images/import-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-import-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M114.832 60.436s3.235-3.27 6.921.417c3.686 3.686.231 7.14.231 7.14l-42.153 42.92s-30.765 32.367-58.798 4.333C-7 87.213 24.59 55.623 24.59 55.623L67.363 12.85s22.725-24.6 43.587-3.738c20.862 20.862-3.96 43.09-3.96 43.09l-35.04 35.04S49.903 112.546 36.426 99.07c-13.476-13.477 11.83-35.523 11.83-35.523l35.04-35.04s3.902-3.902 7.78-.023c3.879 3.878.118 7.921.118 7.921l-35.04 35.04s-13.212 13.212-8.872 17.551c4.34 4.34 16.77-9.653 16.77-9.653l35.04-35.04s16.668-14.598 3.966-27.3c-13.893-13.892-27.565 3.702-27.565 3.702l-42.91 42.91s-23.698 23.698-3.658 43.738 43.012-4.385 43.012-4.385l42.895-42.533z\"/></svg>"
},
"$:/core/images/info-button": {
"title": "$:/core/images/info-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(.05)\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\"/><circle cx=\"64\" cy=\"32\" r=\"8\"/><rect width=\"16\" height=\"56\" x=\"56\" y=\"48\" rx=\"8\"/></g></svg>"
},
"$:/core/images/italic": {
"title": "$:/core/images/italic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-italic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M66.711 0h22.41L62.408 128H40z\"/></svg>"
},
"$:/core/images/left-arrow": {
"title": "$:/core/images/left-arrow",
"created": "20150315234410875",
"modified": "20150315235324760",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-left-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 64.177c0-2.026.771-4.054 2.317-5.6l55.98-55.98a7.92 7.92 0 0111.195.001c3.086 3.085 3.092 8.104.001 11.195L19.111 64.175l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.086-8.105 3.092-11.196.001l-55.98-55.98A7.892 7.892 0 010 64.177z\"/></svg>"
},
"$:/core/images/line-width": {
"title": "$:/core/images/line-width",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-line-width tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M16 18h96a2 2 0 000-4H16a2 2 0 100 4zm0 17h96a4 4 0 100-8H16a4 4 0 100 8zm0 21h96a6 6 0 000-12H16a6 6 0 100 12zm0 29h96c5.523 0 10-4.477 10-10s-4.477-10-10-10H16c-5.523 0-10 4.477-10 10s4.477 10 10 10zm0 43h96c8.837 0 16-7.163 16-16s-7.163-16-16-16H16c-8.837 0-16 7.163-16 16s7.163 16 16 16z\"/></svg>"
},
"$:/core/images/link": {
"title": "$:/core/images/link",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-link tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M42.263 69.38a31.919 31.919 0 006.841 10.13c12.5 12.5 32.758 12.496 45.255 0l22.627-22.628c12.502-12.501 12.497-32.758 0-45.255-12.5-12.5-32.758-12.496-45.254 0L49.104 34.255a32.333 32.333 0 00-2.666 3.019 36.156 36.156 0 0121.94.334l14.663-14.663c6.25-6.25 16.382-6.254 22.632-.004 6.248 6.249 6.254 16.373-.004 22.631l-22.62 22.62c-6.25 6.25-16.381 6.254-22.631.004a15.93 15.93 0 01-4.428-8.433 11.948 11.948 0 00-7.59 3.48l-6.137 6.137z\"/><path d=\"M86.35 59.234a31.919 31.919 0 00-6.84-10.13c-12.5-12.5-32.758-12.497-45.255 0L11.627 71.732c-12.501 12.5-12.496 32.758 0 45.254 12.5 12.5 32.758 12.497 45.255 0L79.51 94.36a32.333 32.333 0 002.665-3.02 36.156 36.156 0 01-21.94-.333l-14.663 14.663c-6.25 6.25-16.381 6.253-22.63.004-6.25-6.249-6.255-16.374.003-22.632l22.62-22.62c6.25-6.25 16.381-6.253 22.631-.003a15.93 15.93 0 014.428 8.432 11.948 11.948 0 007.59-3.48l6.137-6.136z\"/></g></svg>"
},
"$:/core/images/linkify": {
"title": "$:/core/images/linkify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-linkify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\"/></svg>"
},
"$:/core/images/list-bullet": {
"title": "$:/core/images/list-bullet",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-bullet tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M11.636 40.273c6.427 0 11.637-5.21 11.637-11.637C23.273 22.21 18.063 17 11.636 17 5.21 17 0 22.21 0 28.636c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.637 0-6.426-5.21-11.636-11.637-11.636C5.21 51.91 0 57.12 0 63.545c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.636 0-6.427-5.21-11.637-11.637-11.637C5.21 86.818 0 92.028 0 98.455c0 6.426 5.21 11.636 11.636 11.636zM34.91 22.818H128v11.637H34.91V22.818zm0 34.91H128v11.636H34.91V57.727zm0 34.908H128v11.637H34.91V92.636z\"/></svg>"
},
"$:/core/images/list-number": {
"title": "$:/core/images/list-number",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-number tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M33.84 22.356H128v11.77H33.84v-11.77zm0 35.31H128v11.77H33.84v-11.77zm0 35.311H128v11.77H33.84v-11.77zM.38 42.631v-2.223h.998c.826 0 1.445-.14 1.858-.42.413-.28.619-.948.619-2.002V22.769c0-1.442-.193-2.336-.58-2.683-.385-.347-1.477-.52-3.275-.52v-2.143c3.502-.147 6.252-.955 8.25-2.423h2.117v22.865c0 .921.15 1.575.449 1.963.3.387.949.58 1.948.58h.998v2.223H.38zm-.3 35.356v-1.902c7.19-6.554 10.786-12.58 10.786-18.08 0-1.562-.326-2.81-.979-3.744-.652-.934-1.524-1.402-2.616-1.402-.893 0-1.655.317-2.287.952-.633.634-.95 1.364-.95 2.192 0 .974.247 1.829.74 2.563.106.16.16.28.16.36 0 .147-.16.28-.48.4-.213.08-.752.308-1.618.681-.839.374-1.358.561-1.558.561-.24 0-.512-.37-.819-1.111A6.2 6.2 0 010 57.064c0-1.949.849-3.544 2.547-4.785 1.698-1.242 3.798-1.862 6.302-1.862 2.463 0 4.53.67 6.202 2.012 1.67 1.341 2.506 3.093 2.506 5.256a8.644 8.644 0 01-.849 3.724c-.566 1.201-1.92 3.053-4.064 5.556a165.471 165.471 0 01-6.272 6.938h11.445l-1.019 5.726h-2.117c.08-.28.12-.534.12-.76 0-.388-.1-.631-.3-.731-.2-.1-.599-.15-1.198-.15H.08zm12.124 19.207c1.745.04 3.236.637 4.474 1.792 1.239 1.154 1.858 2.773 1.858 4.855 0 2.99-1.132 5.393-3.396 7.208-2.263 1.815-5 2.723-8.209 2.723-2.01 0-3.669-.384-4.974-1.151C.652 111.853 0 110.849 0 109.607c0-.774.27-1.398.809-1.872.54-.474 1.128-.71 1.768-.71.639 0 1.162.2 1.568.6.406.4.782 1.055 1.128 1.962.466 1.268 1.239 1.902 2.317 1.902 1.265 0 2.287-.477 3.066-1.431.78-.955 1.169-2.686 1.169-5.196 0-1.709-.12-3.023-.36-3.944-.24-.921-.792-1.382-1.658-1.382-.586 0-1.185.307-1.797.921-.493.494-.932.741-1.319.741-.333 0-.602-.147-.809-.44-.206-.294-.31-.574-.31-.841 0-.32.104-.594.31-.821.207-.227.69-.594 1.449-1.102 2.876-1.922 4.314-4.017 4.314-6.287 0-1.188-.306-2.092-.919-2.713a3.001 3.001 0 00-2.217-.93c-.799 0-1.525.263-2.177.79-.653.528-.979 1.158-.979 1.892 0 .641.253 1.235.76 1.782.172.2.259.367.259.5 0 .121-.57.428-1.708.922-1.139.494-1.854.74-2.147.74-.413 0-.75-.333-1.009-1-.26-.668-.39-1.282-.39-1.842 0-1.749.93-3.224 2.787-4.425 1.858-1.202 3.965-1.802 6.322-1.802 2.064 0 3.851.447 5.363 1.341 1.511.895 2.267 2.116 2.267 3.664 0 1.362-.57 2.623-1.708 3.784a13.387 13.387 0 01-3.945 2.784z\"/></svg>"
},
"$:/core/images/list": {
"title": "$:/core/images/list",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M87.748 128H23.999c-4.418 0-7.999-3.59-7.999-8.007V8.007C16 3.585 19.588 0 24 0h80c4.419 0 8 3.59 8 8.007V104H91.25c-.965 0-1.84.392-2.473 1.025a3.476 3.476 0 00-1.029 2.476V128zm8-.12l15.88-15.88h-15.88v15.88zM40 15.508A3.502 3.502 0 0143.5 12h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 20h-55a3.498 3.498 0 01-3.5-3.509v-.982zM32 22a6 6 0 100-12 6 6 0 000 12zm8 9.509A3.502 3.502 0 0143.5 28h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 36h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 44h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 52h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 60h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 68h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 76h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 84h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 92h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 100h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.505 3.505 0 0143.497 108h33.006A3.497 3.497 0 0180 111.509v.982A3.505 3.505 0 0176.503 116H43.497A3.497 3.497 0 0140 112.491v-.982zM32 38a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12z\"/></svg>"
},
"$:/core/images/locked-padlock": {
"title": "$:/core/images/locked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-locked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M96.472 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h8c.003-15.723.303-47.731 32.16-47.731 31.794 0 32.305 32.057 32.312 47.731zm-15.897 0H48.44c.002-16.287.142-32 15.719-32 15.684 0 16.977 16.136 16.415 32zM67.732 92.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/mail": {
"title": "$:/core/images/mail",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mail tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M122.827 104.894a7.986 7.986 0 01-2.834.516H8.007c-.812 0-1.597-.12-2.335-.345l34.163-34.163 20.842 20.842a3.998 3.998 0 003.418 1.134 4.003 4.003 0 003.395-1.134L88.594 70.64c.075.09.155.176.24.26l33.993 33.994zm5.076-6.237c.064-.406.097-.823.097-1.247v-64c0-.669-.082-1.318-.237-1.94L94.23 65.006c.09.075.177.154.261.239l33.413 33.413zm-127.698.56A8.023 8.023 0 010 97.41v-64c0-.716.094-1.41.271-2.071l33.907 33.906L.205 99.218zM5.93 25.684a8.012 8.012 0 012.078-.273h111.986c.766 0 1.507.108 2.209.308L64.083 83.837 5.93 25.683z\"/></svg>"
},
"$:/core/images/menu-button": {
"title": "$:/core/images/menu-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\"><rect width=\"128\" height=\"16\" y=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"56\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"96\" rx=\"8\"/></svg>"
},
"$:/core/images/mono-block": {
"title": "$:/core/images/mono-block",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-block tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M23.965 32.967h.357c.755 0 1.328.192 1.72.577.39.384.586.947.586 1.688 0 .824-.206 1.418-.618 1.782-.413.363-1.094.545-2.045.545h-6.31c-.965 0-1.65-.178-2.056-.535-.405-.356-.608-.954-.608-1.792 0-.811.203-1.391.608-1.74.406-.35 1.09-.525 2.055-.525h.734l-.86-2.453H8.471l-.902 2.453h.734c.95 0 1.632.178 2.044.535.413.356.619.933.619 1.73 0 .824-.206 1.418-.619 1.782-.412.363-1.094.545-2.044.545h-5.41c-.964 0-1.649-.182-2.054-.545-.406-.364-.608-.958-.608-1.782 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.719-.577h.356l5.62-15.641H6.835c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.95-.619-1.76 0-.825.207-1.42.619-1.783.412-.363 1.094-.545 2.044-.545h7.863c1.244 0 2.118.67 2.62 2.013v.063l6.647 18.2zM12.98 17.326l-3.04 8.848h6.08l-3.04-8.848zm22.402 9.372v6.395h3.145c2.223 0 3.788-.245 4.697-.734.908-.49 1.362-1.307 1.362-2.453 0-1.16-.433-1.985-1.3-2.474-.866-.49-2.383-.734-4.55-.734h-3.354zm10.693-2.327c1.524.559 2.642 1.324 3.355 2.295.713.972 1.07 2.212 1.07 3.722 0 1.272-.308 2.432-.923 3.48-.615 1.049-1.496 1.909-2.642 2.58a7.499 7.499 0 01-2.254.849c-.832.174-2.01.262-3.533.262H30.202c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.782 0-.741.189-1.304.566-1.688.378-.385.93-.577 1.657-.577h.356V17.326h-.356c-.727 0-1.28-.196-1.657-.587-.377-.392-.566-.965-.566-1.72 0-.81.203-1.401.608-1.771.406-.37 1.062-.556 1.971-.556h9.645c2.95 0 5.19.573 6.72 1.72 1.53 1.145 2.296 2.823 2.296 5.031 0 1.09-.234 2.052-.703 2.883-.468.832-1.163 1.513-2.086 2.045zM35.381 17.2v5.284h2.83c1.72 0 2.932-.203 3.638-.609.706-.405 1.06-1.09 1.06-2.054 0-.909-.319-1.573-.955-1.992-.636-.42-1.667-.63-3.093-.63h-3.48zm35.863-3.816c.28-.503.566-.86.86-1.07.293-.21.664-.314 1.111-.314.685 0 1.17.182 1.457.545.287.364.43.986.43 1.866l.042 5.452c0 .964-.157 1.614-.472 1.95-.314.335-.884.503-1.709.503-.587 0-1.037-.14-1.352-.42-.314-.28-.584-.796-.807-1.551-.364-1.328-.944-2.282-1.74-2.862-.797-.58-1.901-.87-3.313-.87-2.153 0-3.802.727-4.948 2.18-1.147 1.454-1.72 3.558-1.72 6.311 0 2.74.58 4.844 1.74 6.311 1.16 1.468 2.817 2.202 4.97 2.202 1.467 0 3.085-.49 4.854-1.468 1.768-.978 2.883-1.467 3.344-1.467.545 0 1.003.23 1.373.692.37.46.556 1.034.556 1.719 0 1.23-1.084 2.39-3.25 3.48-2.167 1.09-4.606 1.636-7.318 1.636-3.662 0-6.625-1.21-8.89-3.627-2.264-2.419-3.396-5.578-3.396-9.478 0-3.76 1.146-6.884 3.438-9.372 2.293-2.488 5.2-3.732 8.723-3.732.992 0 1.97.112 2.935.335.964.224 1.992.574 3.082 1.049zm10.22 19.583V17.326h-.356c-.755 0-1.328-.196-1.72-.587-.39-.392-.586-.965-.586-1.72 0-.81.21-1.401.629-1.771.42-.37 1.097-.556 2.034-.556h5.178c2.922 0 5.06.126 6.416.377 1.356.252 2.51.671 3.46 1.258 1.691 1.007 2.988 2.443 3.89 4.31.9 1.865 1.352 4.021 1.352 6.467 0 2.586-.514 4.847-1.541 6.783-1.028 1.936-2.485 3.4-4.372 4.393-.853.447-1.852.772-2.998.975-1.147.203-2.852.304-5.116.304h-6.269c-.965 0-1.65-.178-2.055-.535-.406-.356-.608-.954-.608-1.792 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.72-.577h.356zm5.41-15.725v15.725h1.195c2.642 0 4.592-.646 5.85-1.94 1.258-1.292 1.887-3.28 1.887-5.965 0-2.641-.64-4.612-1.918-5.912-1.28-1.3-3.205-1.95-5.777-1.95-.335 0-.59.003-.765.01a7.992 7.992 0 00-.472.032zm35.067-.126h-9.75v5.368h3.69v-.252c0-.797.175-1.39.524-1.782.35-.392.88-.587 1.594-.587.629 0 1.142.178 1.54.534.4.357.598.808.598 1.353 0 .028.007.118.021.272.014.154.021.308.021.462v4.34c0 .936-.167 1.607-.503 2.013-.335.405-.88.608-1.635.608-.713 0-1.251-.19-1.615-.567-.363-.377-.545-.936-.545-1.677v-.377h-3.69v6.269h9.75v-2.495c0-.937.178-1.608.534-2.013.357-.405.94-.608 1.75-.608.798 0 1.367.2 1.71.597.342.399.513 1.073.513 2.024v5.074c0 .755-.146 1.258-.44 1.51-.293.251-.873.377-1.74.377h-17.172c-.923 0-1.583-.182-1.982-.545-.398-.364-.597-.958-.597-1.782 0-.741.189-1.304.566-1.688.377-.385.93-.577 1.656-.577h.357V17.326h-.357c-.712 0-1.261-.2-1.646-.598-.384-.398-.576-.968-.576-1.709 0-.81.203-1.401.608-1.771.405-.37 1.062-.556 1.97-.556h17.173c.853 0 1.43.13 1.73.388.3.258.45.772.45 1.54v4.698c0 .95-.174 1.631-.524 2.044-.35.412-.915.618-1.698.618-.81 0-1.394-.21-1.75-.629-.357-.419-.535-1.097-.535-2.033v-2.202zM19.77 47.641c.267-.504.55-.86.85-1.07.3-.21.675-.314 1.122-.314.685 0 1.17.181 1.457.545.287.363.43.985.43 1.866l.042 5.451c0 .965-.157 1.615-.472 1.95-.314.336-.891.504-1.73.504-.587 0-1.045-.144-1.373-.43-.329-.287-.598-.8-.807-1.541-.378-1.342-.958-2.3-1.74-2.873-.783-.573-1.88-.86-3.292-.86-2.153 0-3.799.727-4.938 2.181-1.14 1.454-1.709 3.557-1.709 6.311s.598 4.882 1.793 6.385C10.599 67.248 12.294 68 14.488 68c.503 0 1.077-.06 1.72-.179a23.809 23.809 0 002.264-.555v-3.313h-2.37c-.95 0-1.624-.175-2.023-.524-.398-.35-.597-.93-.597-1.74 0-.84.199-1.437.597-1.793.399-.357 1.073-.535 2.024-.535h7.569c.978 0 1.667.175 2.065.524.398.35.598.937.598 1.762 0 .74-.2 1.31-.598 1.708-.398.399-.975.598-1.73.598h-.335v5.242c0 .447-.05.758-.147.933-.098.174-.293.353-.587.534-.797.476-2.062.895-3.795 1.258a25.576 25.576 0 01-5.263.546c-3.662 0-6.625-1.21-8.89-3.628-2.264-2.418-3.397-5.577-3.397-9.477 0-3.76 1.147-6.884 3.44-9.372 2.292-2.488 5.199-3.732 8.721-3.732.979 0 1.954.112 2.925.335.972.224 2.003.573 3.093 1.049zm15.84 3.941v4.823h6.857v-4.823h-.336c-.754 0-1.331-.195-1.73-.587-.398-.391-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.364 1.093-.545 2.044-.545h5.41c.95 0 1.624.181 2.023.545.398.363.597.957.597 1.782 0 .755-.192 1.328-.576 1.72-.385.39-.947.586-1.688.586h-.357v15.642h.357c.755 0 1.328.192 1.719.576.391.385.587.947.587 1.688 0 .825-.203 1.419-.608 1.782-.405.364-1.09.546-2.055.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.2-1.303.598-1.688.398-.384.975-.576 1.73-.576h.335v-6.186h-6.856v6.186h.335c.755 0 1.331.192 1.73.576.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.412.364-1.094.546-2.044.546h-5.41c-.964 0-1.65-.179-2.055-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.392-.384.965-.576 1.72-.576h.356V51.582h-.356c-.741 0-1.304-.195-1.688-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.073-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.335zm31.754 0v15.642h3.523c.95 0 1.632.178 2.044.534.412.357.618.933.618 1.73 0 .811-.21 1.402-.629 1.772-.419.37-1.097.556-2.033.556H58.433c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.957-.619-1.782 0-.81.203-1.39.608-1.74.406-.35 1.09-.524 2.055-.524h3.523V51.582h-3.523c-.95 0-1.632-.181-2.044-.545-.412-.363-.619-.95-.619-1.761 0-.825.203-1.412.608-1.761.406-.35 1.09-.524 2.055-.524h12.455c.992 0 1.684.174 2.075.524.392.35.587.936.587 1.761 0 .81-.202 1.398-.608 1.761-.405.364-1.09.545-2.054.545h-3.523zm30.496 0v11.994c0 1.873-.122 3.228-.367 4.067a5.876 5.876 0 01-1.227 2.244c-.74.852-1.768 1.495-3.082 1.929-1.314.433-2.893.65-4.738.65-1.3 0-2.555-.126-3.764-.378a16.843 16.843 0 01-3.491-1.132c-.615-.28-1.017-.643-1.206-1.09-.188-.448-.283-1.175-.283-2.18v-4.32c0-1.202.175-2.04.525-2.516.349-.475.957-.713 1.824-.713 1.244 0 1.929.915 2.054 2.747.014.321.035.566.063.733.168 1.622.545 2.73 1.133 3.324.587.594 1.523.89 2.81.89 1.593 0 2.714-.422 3.364-1.268.65-.845.975-2.386.975-4.623V51.582H88.93c-.95 0-1.632-.181-2.044-.545-.413-.363-.619-.95-.619-1.761 0-.825.2-1.412.598-1.761.398-.35 1.086-.524 2.065-.524h10.693c.979 0 1.667.174 2.065.524.399.35.598.936.598 1.761 0 .81-.206 1.398-.619 1.761-.412.364-1.093.545-2.044.545h-1.761zm14.644 0v6.353l6.48-6.478c-.728-.084-1.238-.29-1.531-.619-.294-.328-.44-.85-.44-1.562 0-.825.198-1.419.597-1.782.398-.364 1.073-.545 2.023-.545h5.137c.95 0 1.625.181 2.023.545.399.363.598.957.598 1.782 0 .769-.2 1.345-.598 1.73-.398.384-.982.576-1.75.576h-.483l-6.101 6.06c1.132.839 2.167 1.94 3.103 3.302.937 1.363 2.034 3.456 3.292 6.28h.692c.825 0 1.44.188 1.845.566.405.377.608.943.608 1.698 0 .825-.206 1.419-.619 1.782-.412.364-1.093.546-2.044.546h-2.579c-1.132 0-2.048-.762-2.746-2.286-.126-.28-.224-.503-.294-.67-.923-1.958-1.768-3.467-2.537-4.53a16.616 16.616 0 00-2.705-2.914l-1.97 1.887v3.92h.335c.755 0 1.331.193 1.73.577.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.413.364-1.094.546-2.045.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.391-.384.965-.576 1.72-.576h.356V51.582h-.357c-.74 0-1.303-.195-1.687-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.072-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.336zM13.44 96.326l4.005-11.889c.251-.782.6-1.352 1.048-1.709.447-.356 1.041-.534 1.782-.534h3.271c.95 0 1.632.182 2.044.545.413.363.619.957.619 1.782 0 .755-.2 1.328-.598 1.72-.398.39-.975.587-1.73.587h-.335l.587 15.641h.357c.754 0 1.32.192 1.698.577.377.384.566.947.566 1.687 0 .825-.2 1.42-.598 1.783-.398.363-1.072.545-2.023.545h-4.718c-.95 0-1.624-.178-2.023-.535-.398-.356-.597-.954-.597-1.793 0-.74.192-1.303.576-1.687.385-.385.954-.577 1.709-.577h.335l-.293-12.79-3.061 9.52c-.224.712-.542 1.226-.954 1.54-.413.315-.982.472-1.709.472-.727 0-1.303-.157-1.73-.472-.426-.314-.751-.828-.975-1.54l-3.04-9.52-.294 12.79h.336c.755 0 1.324.192 1.709.577.384.384.576.947.576 1.687 0 .825-.202 1.42-.608 1.783-.405.363-1.076.545-2.013.545H2.621c-.937 0-1.608-.182-2.013-.545-.405-.364-.608-.958-.608-1.783 0-.74.192-1.303.577-1.687.384-.385.954-.577 1.708-.577h.336l.608-15.641h-.336c-.754 0-1.331-.196-1.73-.588-.398-.39-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.363 1.093-.545 2.044-.545h3.27c.728 0 1.311.175 1.752.524.44.35.8.923 1.08 1.72l4.109 11.888zm30.454 2.054V86.828H42.74c-.922 0-1.583-.182-1.981-.546-.398-.363-.598-.95-.598-1.76 0-.812.2-1.402.598-1.773.398-.37 1.059-.555 1.981-.555h5.955c.909 0 1.566.185 1.97.555.406.37.609.961.609 1.772 0 .741-.192 1.31-.577 1.709-.384.398-.933.598-1.646.598h-.356v19.038c0 .657-.07 1.069-.21 1.237-.14.167-.454.251-.943.251h-2.097c-.67 0-1.143-.07-1.415-.21-.273-.14-.507-.384-.703-.733l-8.722-15.327v11.385h1.216c.909 0 1.559.175 1.95.524.392.35.587.93.587 1.74 0 .825-.199 1.42-.597 1.783-.399.363-1.045.545-1.94.545h-6.017c-.909 0-1.566-.182-1.971-.545-.406-.364-.608-.958-.608-1.783 0-.74.188-1.303.566-1.687.377-.385.936-.577 1.677-.577h.336V86.828h-.336c-.713 0-1.265-.2-1.656-.598-.392-.398-.587-.968-.587-1.709 0-.81.206-1.401.618-1.772.413-.37 1.066-.555 1.96-.555h3.44c.824 0 1.383.108 1.677.325.293.216.622.653.985 1.31l7.989 14.551zM64.66 86.366c-1.803 0-3.218.727-4.245 2.18-1.028 1.455-1.541 3.474-1.541 6.06 0 2.586.517 4.613 1.551 6.08 1.034 1.468 2.446 2.202 4.235 2.202 1.804 0 3.222-.73 4.257-2.19 1.034-1.461 1.551-3.492 1.551-6.092 0-2.586-.513-4.605-1.54-6.06-1.028-1.453-2.45-2.18-4.268-2.18zm0-4.864c3.44 0 6.27 1.23 8.492 3.69 2.223 2.46 3.334 5.598 3.334 9.414 0 3.844-1.104 6.99-3.313 9.436-2.208 2.446-5.046 3.669-8.513 3.669-3.424 0-6.255-1.234-8.491-3.701-2.237-2.467-3.355-5.602-3.355-9.404 0-3.83 1.108-6.971 3.323-9.424 2.216-2.454 5.057-3.68 8.523-3.68zM87.461 98.17v4.298h2.16c.908 0 1.555.175 1.94.524.384.35.576.93.576 1.74 0 .825-.196 1.42-.587 1.783-.392.363-1.035.545-1.93.545h-7.254c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.783 0-.74.189-1.303.566-1.687.378-.385.93-.577 1.657-.577h.356V86.828h-.356c-.713 0-1.262-.2-1.646-.598-.385-.398-.577-.968-.577-1.709 0-.81.203-1.401.608-1.772.406-.37 1.063-.555 1.971-.555h8.66c3.424 0 6.014.657 7.768 1.97 1.754 1.315 2.631 3.25 2.631 5.809 0 2.697-.873 4.738-2.62 6.122-1.748 1.384-4.34 2.076-7.78 2.076h-3.564zm0-11.343v6.625h2.977c1.65 0 2.89-.28 3.722-.839.832-.559 1.248-1.397 1.248-2.516 0-1.048-.43-1.855-1.29-2.421-.86-.566-2.086-.85-3.68-.85h-2.977zm27.267 20.568l-1.636 1.636a12.37 12.37 0 011.772-.44c.58-.098 1.15-.147 1.709-.147 1.104 0 2.268.164 3.491.492 1.223.329 1.967.493 2.233.493.447 0 1.03-.15 1.75-.45.72-.301 1.206-.452 1.458-.452.517 0 .947.2 1.29.598.342.398.513.898.513 1.5 0 .796-.472 1.474-1.415 2.033-.944.56-2.1.839-3.47.839-.937 0-2.139-.22-3.607-.66-1.467-.441-2.53-.661-3.187-.661-.992 0-2.11.272-3.354.817-1.244.546-2.013.818-2.307.818a2.14 2.14 0 01-1.53-.597c-.42-.399-.63-.878-.63-1.437 0-.391.134-.807.4-1.247.265-.44.733-1.01 1.404-1.709l2.118-2.139c-2.335-.852-4.194-2.386-5.578-4.602-1.384-2.215-2.075-4.763-2.075-7.642 0-3.802 1.104-6.909 3.312-9.32 2.209-2.411 5.053-3.617 8.534-3.617 3.467 0 6.304 1.209 8.513 3.627 2.208 2.418 3.312 5.522 3.312 9.31 0 3.774-1.097 6.884-3.291 9.33-2.195 2.446-4.977 3.67-8.345 3.67a22.5 22.5 0 01-1.384-.043zm1.195-21.03c-1.803 0-3.218.727-4.246 2.18-1.027 1.455-1.54 3.474-1.54 6.06 0 2.586.516 4.613 1.55 6.08 1.035 1.468 2.447 2.202 4.236 2.202 1.803 0 3.222-.73 4.256-2.19 1.035-1.461 1.552-3.492 1.552-6.092 0-2.586-.514-4.605-1.541-6.06-1.028-1.453-2.45-2.18-4.267-2.18z\"/></svg>"
},
"$:/core/images/mono-line": {
"title": "$:/core/images/mono-line",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-line tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.437 84.523h.908c1.922 0 3.381.489 4.378 1.468.997.979 1.495 2.411 1.495 4.298 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388h-16.07c-2.456 0-4.2-.454-5.232-1.361-1.032-.908-1.548-2.43-1.548-4.565 0-2.065.516-3.542 1.548-4.432 1.032-.89 2.776-1.334 5.232-1.334h1.869l-2.19-6.247H20.983l-2.296 6.247h1.87c2.42 0 4.155.453 5.205 1.361 1.05.908 1.575 2.376 1.575 4.405 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388H6.781c-2.456 0-4.2-.463-5.233-1.388C.516 93.9 0 92.389 0 90.289c0-1.887.498-3.32 1.495-4.298.997-.979 2.456-1.468 4.378-1.468h.908l14.308-39.83h-4.271c-2.42 0-4.156-.462-5.206-1.387-1.05-.926-1.575-2.42-1.575-4.485 0-2.1.525-3.613 1.575-4.538 1.05-.926 2.785-1.388 5.206-1.388h20.021c3.168 0 5.392 1.708 6.674 5.125v.16l16.924 46.343zm-27.976-39.83L24.72 67.225h15.483l-7.742-22.53zM89.506 68.56v16.284h8.008c5.66 0 9.646-.623 11.96-1.869 2.313-1.245 3.47-3.328 3.47-6.246 0-2.955-1.103-5.055-3.31-6.3-2.207-1.246-6.069-1.869-11.586-1.869h-8.542zm27.229-5.926c3.88 1.423 6.727 3.372 8.542 5.846 1.815 2.474 2.723 5.633 2.723 9.477 0 3.239-.783 6.193-2.35 8.862-1.565 2.67-3.808 4.859-6.726 6.567-1.709.997-3.622 1.718-5.74 2.163-2.118.445-5.116.667-8.996.667h-27.87c-2.349 0-4.03-.463-5.045-1.388-1.014-.926-1.521-2.438-1.521-4.538 0-1.887.48-3.32 1.441-4.298.961-.979 2.367-1.468 4.218-1.468h.907v-39.83h-.907c-1.851 0-3.257-.498-4.218-1.494-.961-.997-1.441-2.456-1.441-4.378 0-2.065.516-3.568 1.548-4.512 1.032-.943 2.705-1.414 5.018-1.414h24.56c7.51 0 13.214 1.459 17.111 4.377 3.898 2.92 5.847 7.19 5.847 12.814 0 2.776-.597 5.223-1.789 7.341-1.192 2.118-2.963 3.853-5.312 5.206zm-27.23-18.26v13.455h7.208c4.378 0 7.466-.516 9.264-1.549 1.797-1.032 2.696-2.776 2.696-5.232 0-2.313-.81-4.004-2.43-5.072-1.619-1.068-4.244-1.602-7.874-1.602h-8.863z\"/></svg>"
},
"$:/core/images/new-button": {
"title": "$:/core/images/new-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 72H8.007C3.591 72 0 68.418 0 64c0-4.41 3.585-8 8.007-8H56V8.007C56 3.591 59.582 0 64 0c4.41 0 8 3.585 8 8.007V56h47.993c4.416 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H72v47.993c0 4.416-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V72z\"/></svg>"
},
"$:/core/images/new-here-button": {
"title": "$:/core/images/new-here-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-here-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.838 20.935l-3.572.938c-3.688.968-8.23 4.43-10.136 7.731L3.37 96.738c-1.905 3.3-.771 7.524 2.534 9.432l33.717 19.466c3.297 1.904 7.53.78 9.435-2.521l38.76-67.134c1.905-3.3 2.632-8.963 1.623-12.646L83.285 20.88c-1.009-3.68-4.821-5.884-8.513-4.915l-7.603 1.995.043.287c.524 3.394 2.053 7.498 4.18 11.55.418.163.829.36 1.23.59a8.864 8.864 0 014.438 8.169c.104.132.21.264.316.395l-.386.318a8.663 8.663 0 01-1.082 3.137c-2.42 4.192-7.816 5.608-12.051 3.163-4.12-2.379-5.624-7.534-3.476-11.671-2.177-4.394-3.788-8.874-4.543-12.964z\"/><path d=\"M69.554 44.76c-5.944-7.476-10.74-17.196-11.955-25.059-1.68-10.875 3.503-18.216 15.082-18.04 10.407.158 19.975 5.851 24.728 13.785 5.208 8.695 2.95 17.868-6.855 20.496l-2.037-7.601c4.232-1.134 4.999-4.248 2.24-8.853-3.37-5.626-10.465-9.848-18.146-9.965-6.392-.097-8.31 2.62-7.323 9.01.999 6.465 5.318 15.138 10.582 21.65l-.072.06c.559 1.553-4.17 6.44-5.938 4.888l-.005.004-.028-.034a1.323 1.323 0 01-.124-.135 2.618 2.618 0 01-.149-.205z\"/><rect width=\"16\" height=\"48\" x=\"96\" y=\"80\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"80\" y=\"96\" rx=\"8\"/></g></svg>"
},
"$:/core/images/new-image-button": {
"title": "$:/core/images/new-image-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.362 73.627l15.826-27.41a2.626 2.626 0 00-.962-3.59l-50.01-28.872a2.626 2.626 0 00-3.588.961L30.058 36.49l10.04-5.261c3.042-1.595 6.771.114 7.55 3.46l3.607 17.702 9.88.85a5.25 5.25 0 014.571 3.77c.034.115.1.344.199.671.165.553.353 1.172.562 1.843.595 1.914 1.23 3.85 1.872 5.678.207.588.412 1.156.614 1.701.625 1.685 1.209 3.114 1.725 4.207.255.54.485.977.726 1.427.214.212.547.425 1.011.622 1.141.482 2.784.74 4.657.758.864.008 1.71-.034 2.492-.11.448-.043.753-.085.871-.104.315-.053.625-.077.927-.076zM37.47 2.649A5.257 5.257 0 0144.649.725l63.645 36.746a5.257 5.257 0 011.923 7.178L73.47 108.294a5.257 5.257 0 01-7.177 1.923L2.649 73.47a5.257 5.257 0 01-1.924-7.177L37.471 2.649zm42.837 50.49a5.25 5.25 0 105.25-9.092 5.25 5.25 0 00-5.25 9.093zM96 112h-7.993c-4.419 0-8.007-3.582-8.007-8 0-4.41 3.585-8 8.007-8H96v-7.993C96 83.588 99.582 80 104 80c4.41 0 8 3.585 8 8.007V96h7.993c4.419 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H112v7.993c0 4.419-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V112zM33.347 51.791c7.428 7.948 9.01 10.69 7.449 13.394-1.56 2.703-13.838-2.328-16.094 1.58-2.256 3.908-.907 3.258-2.437 5.908l19.73 11.39s-5.605-8.255-4.235-10.628c2.515-4.356 8.77-1.256 10.365-4.019 2.414-4.181-5.103-9.639-14.778-17.625z\"/></svg>"
},
"$:/core/images/new-journal-button": {
"title": "$:/core/images/new-journal-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-journal-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.545 112.818v11.818c0 1.306 1.086 2.364 2.425 2.364h6.06c1.34 0 2.425-1.058 2.425-2.364v-11.818h12.12c1.34 0 2.425-1.058 2.425-2.363v-5.91c0-1.305-1.085-2.363-2.424-2.363h-12.121V90.364c0-1.306-1.086-2.364-2.425-2.364h-6.06c-1.34 0-2.425 1.058-2.425 2.364v11.818h-12.12c-1.34 0-2.425 1.058-2.425 2.363v5.91c0 1.305 1.085 2.363 2.424 2.363h12.121zM60.016 4.965c-4.781-2.76-10.897-1.118-13.656 3.66L5.553 79.305A9.993 9.993 0 009.21 92.963l51.04 29.468c4.78 2.76 10.897 1.118 13.655-3.66l40.808-70.681a9.993 9.993 0 00-3.658-13.656L60.016 4.965zm-3.567 27.963a6 6 0 106-10.393 6 6 0 00-6 10.393zm31.697 17.928a6 6 0 106-10.392 6 6 0 00-6 10.392z\"/><text class=\"tc-fill-background\" font-family=\"Helvetica\" font-size=\"47.172\" font-weight=\"bold\" transform=\"rotate(30 25.742 95.82)\"><tspan x=\"42\" y=\"77.485\" text-anchor=\"middle\"><<now \"DD\">></tspan></text></g></svg>"
},
"$:/core/images/opacity": {
"title": "$:/core/images/opacity",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-opacity tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.362 65a51.595 51.595 0 01-1.942 6H82.584a35.867 35.867 0 002.997-6h16.78zm.472-2c.423-1.961.734-3.963.929-6H87.656a35.78 35.78 0 01-1.368 6h16.546zm-3.249 10a51.847 51.847 0 01-3.135 6H75.812a36.205 36.205 0 005.432-6h18.341zm-4.416 8c-1.424 2.116-3 4.12-4.71 6H60.46a35.843 35.843 0 0012.874-6h21.834zm-7.513-34h16.107C101.247 20.627 79.033 0 52 0 23.281 0 0 23.281 0 52c0 25.228 17.965 46.26 41.8 51h20.4a51.66 51.66 0 0015.875-6H39v-2h42.25a52.257 52.257 0 007.288-6H39v-2h4.539C27.739 83.194 16 68.968 16 52c0-19.882 16.118-36 36-36 18.186 0 33.222 13.484 35.656 31zm.22 2h16.039a52.823 52.823 0 010 6H87.877a36.483 36.483 0 000-6z\"/><path d=\"M76 128c28.719 0 52-23.281 52-52s-23.281-52-52-52-52 23.281-52 52 23.281 52 52 52zm0-16c19.882 0 36-16.118 36-36S95.882 40 76 40 40 56.118 40 76s16.118 36 36 36z\"/><path d=\"M37 58h53v4H37v-4zm3-8h53v4H40v-4zm0-8h53v4H40v-4zm-8 24h53v4H32v-4zm-2 8h53v4H30v-4zm-3 8h53v4H27v-4z\"/></g></svg>"
},
"$:/core/images/open-window": {
"title": "$:/core/images/open-window",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-open-window tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M16 112h88.994c3.87 0 7.006 3.59 7.006 8 0 4.418-3.142 8-7.006 8H7.006C3.136 128 0 124.41 0 120a9.321 9.321 0 010-.01V24.01C0 19.586 3.59 16 8 16c4.418 0 8 3.584 8 8.01V112z\"/><path d=\"M96 43.196V56a8 8 0 1016 0V24c0-4.41-3.585-8-8.007-8H72.007C67.588 16 64 19.582 64 24c0 4.41 3.585 8 8.007 8H84.57l-36.3 36.299a8 8 0 00-.001 11.316c3.117 3.117 8.19 3.123 11.316-.003L96 43.196zM32 7.999C32 3.581 35.588 0 40 0h80c4.419 0 8 3.588 8 8v80c0 4.419-3.588 8-8 8H40c-4.419 0-8-3.588-8-8V8z\"/></g></svg>"
},
"$:/core/images/options-button": {
"title": "$:/core/images/options-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-options-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M110.488 76a47.712 47.712 0 01-5.134 12.384l6.724 6.724c3.123 3.123 3.132 8.192.011 11.313l-5.668 5.668c-3.12 3.12-8.186 3.117-11.313-.01l-6.724-6.725c-3.82 2.258-7.98 4-12.384 5.134v9.505c0 4.417-3.578 8.007-7.992 8.007h-8.016C55.58 128 52 124.415 52 119.993v-9.505a47.712 47.712 0 01-12.384-5.134l-6.724 6.725c-3.123 3.122-8.192 3.131-11.313.01l-5.668-5.668c-3.12-3.12-3.116-8.186.01-11.313l6.725-6.724c-2.257-3.82-4-7.98-5.134-12.384H8.007C3.591 76 0 72.422 0 68.01v-8.017C0 55.58 3.585 52 8.007 52h9.505a47.712 47.712 0 015.134-12.383l-6.724-6.725c-3.123-3.122-3.132-8.191-.011-11.312l5.668-5.669c3.12-3.12 8.186-3.116 11.313.01l6.724 6.725c3.82-2.257 7.98-4 12.384-5.134V8.007C52 3.591 55.578 0 59.992 0h8.016C72.42 0 76 3.585 76 8.007v9.505a47.712 47.712 0 0112.384 5.134l6.724-6.724c3.123-3.123 8.192-3.132 11.313-.01l5.668 5.668c3.12 3.12 3.116 8.186-.01 11.312l-6.725 6.725c2.257 3.82 4 7.979 5.134 12.383h9.505c4.416 0 8.007 3.578 8.007 7.992v8.017c0 4.411-3.585 7.991-8.007 7.991h-9.505zM64 96c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/></svg>"
},
"$:/core/images/paint": {
"title": "$:/core/images/paint",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-paint tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M83.527 76.19C90.43 69.287 91.892 59 87.91 50.665l37.903-37.902c2.919-2.92 2.913-7.659 0-10.572a7.474 7.474 0 00-10.572 0L77.338 40.093c-8.335-3.982-18.622-2.521-25.526 4.383l31.715 31.715zm-2.643 2.644L49.169 47.119S8.506 81.243 0 80.282c0 0 3.782 5.592 6.827 8.039 14.024-5.69 37.326-24.6 37.326-24.6l.661.66S19.45 90.222 9.18 92.047c1.222 1.44 4.354 4.053 6.247 5.776 5.417-1.488 34.733-28.57 34.733-28.57l.661.66-32.407 31.022 5.285 5.286L56.106 75.2l.662.66s-27.864 30.536-28.684 32.432c0 0 6.032 6.853 7.569 7.824.702-2.836 27.884-33.485 27.884-33.485l.661.66s-20.597 23.755-24.964 36.732c3.21 3.549 7.5 5.137 10.926 6.298-2.19-11.817 30.724-47.487 30.724-47.487z\"/></svg>"
},
"$:/core/images/palette": {
"title": "$:/core/images/palette",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-palette tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.247 39.182a93.52 93.52 0 00-16.228-1.4C28.662 37.781 0 57.131 0 81.002c0 9.642 4.676 18.546 12.58 25.735C23.504 91.19 26.34 72.395 36.89 63.562c15.183-12.713 26.538-7.828 26.538-7.828l16.82-16.552zm26.535 9.655c13.049 7.913 21.257 19.392 21.257 32.166 0 9.35.519 17.411-11.874 25.08-10.797 6.681-3.824-6.536-11.844-10.898s-19.946 1.308-18.213 7.906c3.2 12.181 19.422 11.455 6.314 16.658-13.107 5.202-18.202 4.476-28.403 4.476-7.821 0-15.315-.947-22.243-2.68 9.844-4.197 27.88-12.539 33.354-19.456C82.788 92.409 87.37 80 83.324 72.484c-.194-.359 11.215-11.668 23.458-23.647zM1.134 123.867l-.66.002c33.479-14.94 22.161-64.226 58.818-64.226.317 1.418.644 2.944 1.062 4.494-25.907-4.166-23.567 48.031-59.22 59.73zm.713-.007c38.872-.506 78.152-22.347 78.152-44.813-9.27 0-14.073-3.48-16.816-7.942-16.597-7.003-30.365 45.715-61.336 52.755zm65.351-64.008c-4.45 4.115 4.886 16.433 11.318 11.318l45.27-45.27c11.317-11.318 0-22.635-11.318-11.318-11.317 11.318-33.518 34.405-45.27 45.27z\"/></svg>"
},
"$:/core/images/permalink-button": {
"title": "$:/core/images/permalink-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permalink-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.483 48l-7.387 32h-25.58l7.388-32h25.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L100.598 32h3.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-7.096l-7.387 32H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H85.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L69.402 96h-25.58L38.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L27.402 96h-3.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h7.096l7.387-32H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h18.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L58.598 32h25.58z\"/></svg>"
},
"$:/core/images/permaview-button": {
"title": "$:/core/images/permaview-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permaview-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.483 48l-1.846 8h-5.58l1.847-8h5.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L101.598 32h2.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-6.096l-1.847 8h7.944c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H92.364l-1.846 8H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H86.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L70.402 96h-5.58L59.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L48.402 96h-5.58L37.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L26.402 96h-2.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h6.096l1.847-8h-7.944C19.59 72 16 68.418 16 64c0-4.41 3.581-8 8-8h11.637l1.846-8H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h17.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L57.598 32h5.58L68.8 7.642c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L79.598 32h5.58zM53.904 48l-1.847 8h5.58l1.846-8h-5.579zm22.039 24l-1.847 8h-5.58l1.847-8h5.58zm-27.58 0l-1.846 8h5.579l1.847-8h-5.58z\"/></svg>"
},
"$:/core/images/picture": {
"title": "$:/core/images/picture",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-picture tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112 68.233v-48.23A4.001 4.001 0 00107.997 16H20.003A4.001 4.001 0 0016 20.003v38.31l9.241-14.593c2.8-4.422 9.023-5.008 12.6-1.186l18.247 20.613 13.687-6.407a8 8 0 018.903 1.492 264.97 264.97 0 002.92 2.739 249.44 249.44 0 006.798 6.066 166.5 166.5 0 002.106 1.778c2.108 1.747 3.967 3.188 5.482 4.237.748.518 1.383.92 2.044 1.33.444.117 1.046.144 1.809.05 1.873-.233 4.238-1.144 6.723-2.547a36.016 36.016 0 003.205-2.044c.558-.4.93-.686 1.07-.802.376-.31.765-.577 1.165-.806zM0 8.007A8.01 8.01 0 018.007 0h111.986A8.01 8.01 0 01128 8.007v111.986a8.01 8.01 0 01-8.007 8.007H8.007A8.01 8.01 0 010 119.993V8.007zM95 42a8 8 0 100-16 8 8 0 000 16zM32 76c15.859 4.83 20.035 7.244 20.035 12S32 95.471 32 102.347c0 6.876 1.285 4.99 1.285 9.653H68s-13.685-6.625-13.685-10.8c0-7.665 10.615-8.34 10.615-13.2 0-7.357-14.078-8.833-32.93-12z\"/></svg>"
},
"$:/core/images/plugin-generic-language": {
"title": "$:/core/images/plugin-generic-language",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M61.207 68.137c-4.324 2.795-6.999 6.656-6.999 10.921 0 7.906 9.19 14.424 21.042 15.336 2.162 3.902 8.598 6.785 16.318 7.01-5.126-1.125-9.117-3.742-10.62-7.01C92.805 93.487 102 86.967 102 79.059c0-8.53-10.699-15.445-23.896-15.445-6.599 0-12.572 1.729-16.897 4.524zm12.794-14.158c-4.324 2.795-10.298 4.524-16.897 4.524-2.619 0-5.14-.272-7.497-.775-3.312 2.25-8.383 3.69-14.067 3.69l-.255-.002c4.119-.892 7.511-2.747 9.478-5.13-6.925-2.704-11.555-7.617-11.555-13.228 0-8.53 10.699-15.445 23.896-15.445C70.301 27.613 81 34.528 81 43.058c0 4.265-2.675 8.126-6.999 10.921zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-plugin": {
"title": "$:/core/images/plugin-generic-plugin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-theme": {
"title": "$:/core/images/plugin-generic-theme",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M29.408 91.472L51.469 69.41l-.004-.005a2.22 2.22 0 01.004-3.146c.87-.87 2.281-.872 3.147-.005l9.465 9.464a2.22 2.22 0 01-.005 3.147c-.87.87-2.28.871-3.147.005l-.005-.005-22.061 22.062a6.686 6.686 0 11-9.455-9.455zM60.802 66.38c-2.436-2.704-4.465-5.091-5.817-6.869-6.855-9.014-10.313-4.268-14.226 0-3.913 4.268 1.03 7.726-2.683 10.741-3.713 3.015-3.484 4.06-9.752-1.455-6.267-5.516-6.7-7.034-3.823-10.181 2.877-3.147 5.281 1.808 11.159-3.785 5.877-5.593.94-10.55.94-10.55s12.237-25.014 28.588-23.167c16.351 1.848-6.186-2.392-11.792 17.226-2.4 8.4.447 6.42 4.998 9.968 1.394 1.086 6.03 4.401 11.794 8.685l20.677-20.676 1.615-4.766 7.84-4.689 3.151 3.152-4.688 7.84-4.766 1.615-20.224 20.223c12.663 9.547 28.312 22.146 28.312 26.709 0 7.217-3.071 11.526-9.535 9.164-4.693-1.715-18.768-15.192-28.753-25.897l-2.893 2.893-3.151-3.152 3.029-3.029zM63.953 0l54.56 32v64l-54.56 32-54.56-32V32l54.56-32z\"/></svg>"
},
"$:/core/images/preview-closed": {
"title": "$:/core/images/preview-closed",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-closed tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M.088 64a7.144 7.144 0 001.378 5.458C16.246 88.818 39.17 100.414 64 100.414c24.83 0 47.753-11.596 62.534-30.956A7.144 7.144 0 00127.912 64C110.582 78.416 88.304 87.086 64 87.086 39.696 87.086 17.418 78.416.088 64z\"/><rect width=\"4\" height=\"16\" x=\"62\" y=\"96\" rx=\"4\"/><rect width=\"4\" height=\"16\" x=\"78\" y=\"93\" rx=\"4\" transform=\"rotate(-5 80 101)\"/><rect width=\"4\" height=\"16\" x=\"46\" y=\"93\" rx=\"4\" transform=\"rotate(5 48 101)\"/><rect width=\"4\" height=\"16\" x=\"30\" y=\"88\" rx=\"4\" transform=\"rotate(10 32 96)\"/><rect width=\"4\" height=\"16\" x=\"94\" y=\"88\" rx=\"4\" transform=\"rotate(-10 96 96)\"/><rect width=\"4\" height=\"16\" x=\"110\" y=\"80\" rx=\"4\" transform=\"rotate(-20 112 88)\"/><rect width=\"4\" height=\"16\" x=\"14\" y=\"80\" rx=\"4\" transform=\"rotate(20 16 88)\"/></g></svg>"
},
"$:/core/images/preview-open": {
"title": "$:/core/images/preview-open",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-open tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.11 99.588c-24.83 0-47.754-11.596-62.534-30.957a7.148 7.148 0 010-8.675C16.356 40.596 39.28 29 64.11 29c24.83 0 47.753 11.596 62.534 30.956a7.148 7.148 0 010 8.675c-14.78 19.36-37.703 30.957-62.534 30.957zm46.104-32.007c1.44-1.524 1.44-3.638 0-5.162C99.326 50.9 82.439 44 64.147 44S28.968 50.9 18.08 62.42c-1.44 1.523-1.44 3.637 0 5.16C28.968 79.1 45.855 86 64.147 86s35.179-6.9 46.067-18.42z\"/><path d=\"M63.5 88C76.479 88 87 77.479 87 64.5S76.479 41 63.5 41 40 51.521 40 64.5 50.521 88 63.5 88z\"/></g></svg>"
},
"$:/core/images/print-button": {
"title": "$:/core/images/print-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M112 71V30.5h-.032c-.035-2-.816-3.99-2.343-5.516L86.998 2.357A7.978 7.978 0 0081 .02V0H24a8 8 0 00-8 8v63h8V8h57v14.5c0 4.422 3.582 8 8 8h15V71h8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/><path d=\"M0 80.005C0 71.165 7.156 64 16 64h96c8.836 0 16 7.155 16 16.005v31.99c0 8.84-7.156 16.005-16 16.005H16c-8.836 0-16-7.155-16-16.005v-31.99zM104 96a8 8 0 100-16 8 8 0 000 16z\"/></g></svg>"
},
"$:/core/images/quote": {
"title": "$:/core/images/quote",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-quote tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M51.219 117.713V62.199H27.427c0-8.891 1.683-16.401 5.047-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.36 3.184-20.728 6.669-6.368 3.484-11.835 7.87-16.401 13.157C9.524 27.113 5.98 33.241 3.456 40.21.933 47.18-.21 54.63.03 62.56v55.153H51.22zm76.781 0V62.199h-23.791c0-8.891 1.682-16.401 5.046-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.359 3.184-20.727 6.669-6.369 3.484-11.836 7.87-16.402 13.157-4.566 5.287-8.11 11.415-10.634 18.384-2.523 6.97-3.665 14.42-3.424 22.35v55.153H128z\"/></svg>"
},
"$:/core/images/refresh-button": {
"title": "$:/core/images/refresh-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-refresh-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M106.369 39.433c10.16 20.879 6.57 46.764-10.771 64.106-21.87 21.87-57.327 21.87-79.196 0-21.87-21.87-21.87-57.326 0-79.196a8 8 0 1111.314 11.314c-15.621 15.62-15.621 40.947 0 56.568 15.62 15.621 40.947 15.621 56.568 0C97.72 78.79 99.6 58.175 89.924 42.73l-6.44 12.264a8 8 0 11-14.166-7.437L84.435 18.76a8 8 0 0110.838-3.345l28.873 15.345a8 8 0 11-7.51 14.129l-10.267-5.457zm-8.222-12.368c-.167-.19-.336-.38-.506-.57l.96-.296-.454.866z\"/></svg>"
},
"$:/core/images/right-arrow": {
"title": "$:/core/images/right-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-right-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M99.069 64.173c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></svg>"
},
"$:/core/images/rotate-left": {
"title": "$:/core/images/rotate-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-rotate-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"32\" height=\"80\" rx=\"8\"/><rect width=\"80\" height=\"32\" x=\"48\" y=\"96\" rx=\"8\"/><path d=\"M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 01-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 11-5.657 5.657L49.172 43.142a4 4 0 010-5.657l11.313-11.313a4 4 0 115.657 5.656l-4.821 4.822z\"/></g></svg>"
},
"$:/core/images/save-button": {
"title": "$:/core/images/save-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\"/></svg>"
},
"$:/core/images/size": {
"title": "$:/core/images/size",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-size tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M92.343 26l-9.171 9.172a4 4 0 105.656 5.656l16-16a4 4 0 000-5.656l-16-16a4 4 0 10-5.656 5.656L92.343 18H22a4 4 0 00-4 4v70.343l-9.172-9.171a4 4 0 10-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656L26 92.343V22l-4 4h70.343zM112 52v64l4-4H52a4 4 0 100 8h64a4 4 0 004-4V52a4 4 0 10-8 0z\"/></svg>"
},
"$:/core/images/spiral": {
"title": "$:/core/images/spiral",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-spiral tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074a4.785 4.785 0 00-4.52-5.03 4.778 4.778 0 00-5.03 4.52c-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01a1.047 1.047 0 01-.264-.332c-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"/></svg>"
},
"$:/core/images/stamp": {
"title": "$:/core/images/stamp",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-stamp tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M49.733 64H16.01C11.584 64 8 67.583 8 72.003V97h112V72.003A8 8 0 00111.99 64H78.267A22.813 22.813 0 0175.5 53.077c0-6.475 2.687-12.324 7.009-16.497A22.818 22.818 0 0087 22.952C87 10.276 76.703 0 64 0S41 10.276 41 22.952c0 5.103 1.669 9.817 4.491 13.628 4.322 4.173 7.009 10.022 7.009 16.497 0 3.954-1.002 7.675-2.767 10.923zM8 104h112v8H8v-8z\"/></svg>"
},
"$:/core/images/star-filled": {
"title": "$:/core/images/star-filled",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-star-filled tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M61.836 96.823l37.327 27.287c2.72 1.99 6.379-.69 5.343-3.912L90.29 75.988l-1.26 3.91 37.285-27.345c2.718-1.993 1.32-6.327-2.041-6.33l-46.113-.036 3.3 2.416L67.176 4.416c-1.04-3.221-5.563-3.221-6.604 0L46.29 48.603l3.3-2.416-46.113.036c-3.362.003-4.759 4.337-2.04 6.33L38.72 79.898l-1.26-3.91-14.216 44.21c-1.036 3.223 2.622 5.901 5.343 3.912l37.326-27.287h-4.078z\"/></svg>"
},
"$:/core/images/storyview-classic": {
"title": "$:/core/images/storyview-classic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-classic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm0 48C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0 32C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-pop": {
"title": "$:/core/images/storyview-pop",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-pop tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm-7.99 40C11.587 56 8 59.578 8 63.992v16.016C8 84.422 11.584 88 16.01 88h95.98c4.424 0 8.01-3.578 8.01-7.992V63.992c0-4.414-3.584-7.992-8.01-7.992H16.01zM24 96C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0-32C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-zoomin": {
"title": "$:/core/images/storyview-zoomin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-zoomin tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16A8 8 0 0016 24.009V71.99C16 76.414 19.588 80 24 80h80a8 8 0 008-8.009V24.01c0-4.423-3.588-8.009-8-8.009H24z\"/></svg>"
},
"$:/core/images/strikethrough": {
"title": "$:/core/images/strikethrough",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-strikethrough tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M92.794 38.726h15.422c-.229-6.74-1.514-12.538-3.856-17.393-2.342-4.855-5.54-8.881-9.596-12.08-4.055-3.199-8.767-5.54-14.136-7.025C75.258.743 69.433 0 63.15 0a62.76 62.76 0 00-16.364 2.142C41.474 3.57 36.733 5.74 32.564 8.653c-4.17 2.913-7.511 6.626-10.025 11.138-2.513 4.512-3.77 9.853-3.77 16.022 0 5.597 1.115 10.252 3.342 13.965 2.228 3.712 5.198 6.74 8.91 9.081 3.713 2.342 7.911 4.227 12.595 5.655a194.641 194.641 0 0014.308 3.77c4.855 1.085 9.624 2.142 14.308 3.17 4.683 1.028 8.881 2.37 12.594 4.027 3.713 1.656 6.683 3.798 8.91 6.425 2.228 2.628 3.342 6.055 3.342 10.281 0 4.456-.914 8.111-2.742 10.967a19.953 19.953 0 01-7.197 6.768c-2.97 1.657-6.311 2.828-10.024 3.513a60.771 60.771 0 01-11.052 1.028c-4.57 0-9.025-.571-13.366-1.713-4.34-1.143-8.139-2.913-11.394-5.312-3.256-2.4-5.884-5.455-7.883-9.168-1.999-3.712-2.998-8.139-2.998-13.28H15c0 7.426 1.342 13.852 4.027 19.278 2.684 5.426 6.34 9.881 10.966 13.365 4.627 3.484 9.996 6.083 16.107 7.797 6.112 1.713 12.595 2.57 19.449 2.57 5.597 0 11.223-.657 16.878-1.97 5.655-1.314 10.767-3.428 15.336-6.34 4.57-2.914 8.31-6.683 11.224-11.31 2.913-4.626 4.37-10.195 4.37-16.707 0-6.054-1.115-11.08-3.342-15.079-2.228-3.998-5.198-7.31-8.91-9.938-3.713-2.627-7.911-4.712-12.595-6.254a170.83 170.83 0 00-14.308-4.027 549.669 549.669 0 00-14.308-3.17c-4.683-.971-8.881-2.2-12.594-3.684-3.713-1.485-6.683-3.399-8.91-5.74-2.228-2.342-3.342-5.398-3.342-9.168 0-3.998.771-7.34 2.313-10.024 1.543-2.685 3.599-4.826 6.17-6.426 2.57-1.599 5.51-2.741 8.824-3.427a49.767 49.767 0 0110.11-1.028c8.453 0 15.393 1.97 20.819 5.912 5.426 3.94 8.596 10.31 9.51 19.106z\"/><path d=\"M5 54h118v16H5z\"/></g></svg>"
},
"$:/core/images/subscript": {
"title": "$:/core/images/subscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-subscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 128.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/superscript": {
"title": "$:/core/images/superscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-superscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 63.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/tag-button": {
"title": "$:/core/images/tag-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tag-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M18.164 47.66l.004 4.105c.003 3.823 2.19 9.097 4.885 11.792l61.85 61.85c2.697 2.697 7.068 2.69 9.769-.01L125.767 94.3a6.903 6.903 0 00.01-9.77L63.928 22.683c-2.697-2.697-7.976-4.88-11.796-4.881l-27.076-.007a6.902 6.902 0 00-6.91 6.91l.008 9.96.287.033c3.73.411 8.489-.044 13.365-1.153a9.702 9.702 0 0111.14-3.662l.291-.13.128.285a9.7 9.7 0 013.3 2.17c3.796 3.796 3.801 9.945.012 13.734-3.618 3.618-9.386 3.777-13.204.482-5.365 1.122-10.674 1.596-15.309 1.237z\"/><path d=\"M47.633 39.532l.023.051c-9.689 4.356-21.584 6.799-30.396 5.828C5.273 44.089-1.028 36.43 2.443 24.078 5.562 12.976 14.3 4.361 24.047 1.548c10.68-3.083 19.749 1.968 19.749 13.225h-8.623c0-4.859-3.078-6.573-8.735-4.94-6.91 1.995-13.392 8.383-15.694 16.577-1.915 6.818.417 9.653 7.46 10.43 7.126.785 17.531-1.352 25.917-5.121l.027.06.036-.017c1.76-.758 6.266 6.549 3.524 7.74a2.8 2.8 0 01-.075.03z\"/></g></svg>"
},
"$:/core/images/theme-button": {
"title": "$:/core/images/theme-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-theme-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.854 66.945a122.626 122.626 0 01-3.9-4.819c-11.064-14.548-16.645-6.888-22.96 0-6.315 6.888 1.664 12.47-4.33 17.335-5.993 4.866-5.623 6.552-15.737-2.35-10.115-8.9-10.815-11.351-6.172-16.43 4.644-5.08 8.524 2.918 18.01-6.108 9.485-9.026 1.517-17.026 1.517-17.026S42.03-2.824 68.42.157c26.39 2.982-9.984-3.86-19.031 27.801-3.874 13.556.72 10.362 8.066 16.087 1.707 1.33 6.428 4.732 12.671 9.318-6.129 5.879-11.157 10.669-14.273 13.582zm11.641 12.947c16.013 17.036 37.742 37.726 45.117 40.42 10.432 3.813 15.388-3.141 15.388-14.79 0-7.151-23.83-26.542-43.924-41.769-7.408 7.156-13.376 12.953-16.58 16.139z\"/><path d=\"M11.069 109.828L46.31 74.587a3.56 3.56 0 115.037-5.032l15.098 15.098a3.56 3.56 0 11-5.032 5.037l-35.24 35.241c-4.171 4.17-10.933 4.17-15.104 0-4.17-4.17-4.17-10.933 0-15.103zM124.344 6.622l5.034 5.034-7.49 12.524-7.613 2.58L61.413 79.62l-5.034-5.034 52.861-52.862 2.58-7.614 12.524-7.49z\"/></g></svg>"
},
"$:/core/images/timestamp-off": {
"title": "$:/core/images/timestamp-off",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-off tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/></g></svg>"
},
"$:/core/images/timestamp-on": {
"title": "$:/core/images/timestamp-on",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-on tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178a5.005 5.005 0 01-7.045-.613 5.008 5.008 0 01.616-7.047l9.95-8.348a5 5 0 016.429 7.661l-9.95 8.348zm89.573 0a5.005 5.005 0 007.045-.613 5.008 5.008 0 00-.616-7.047l-9.95-8.348a5 5 0 00-6.428 7.661l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/></g></svg>"
},
"$:/core/images/tip": {
"title": "$:/core/images/tip",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tip tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128.242c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64 0 35.346 28.654 64 64 64zm11.936-36.789c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349C54.33 94.05 58.824 95.82 64 95.82c5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.456c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zM64.3 24.242c11.618 0 23.699 7.82 23.699 24.2S75.92 71.754 75.92 83.576c0 5.873-5.868 9.26-11.92 9.26s-12.027-3.006-12.027-9.26C51.973 71.147 40 65.47 40 48.442s12.683-24.2 24.301-24.2z\"/></svg>"
},
"$:/core/images/transcludify": {
"title": "$:/core/images/transcludify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-transcludify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806z\"/></svg>"
},
"$:/core/images/twitter": {
"title": "$:/core/images/twitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-twitter tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.626 115.803A73.376 73.376 0 012 104.235c2.022.238 4.08.36 6.166.36 12.111 0 23.258-4.117 32.105-11.023-11.312-.208-20.859-7.653-24.148-17.883a25.98 25.98 0 0011.674-.441C15.971 72.881 7.061 62.474 7.061 49.997c0-.108 0-.216.002-.323a25.824 25.824 0 0011.709 3.22c-6.936-4.617-11.5-12.5-11.5-21.433 0-4.719 1.274-9.142 3.5-12.945 12.75 15.579 31.797 25.83 53.281 26.904-.44-1.884-.67-3.85-.67-5.868 0-14.22 11.575-25.75 25.852-25.75a25.865 25.865 0 0118.869 8.132 51.892 51.892 0 0016.415-6.248c-1.93 6.012-6.029 11.059-11.366 14.246A51.844 51.844 0 00128 25.878a52.428 52.428 0 01-12.9 13.33c.05 1.104.075 2.214.075 3.33 0 34.028-26 73.265-73.549 73.265\"/></svg>"
},
"$:/core/images/underline": {
"title": "$:/core/images/underline",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-underline tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M7 117.421h114.248V128H7v-10.579zm97.871-18.525V0h-16.26v55.856c0 4.463-.605 8.576-1.816 12.338-1.212 3.762-3.03 7.046-5.452 9.851-2.423 2.806-5.452 4.974-9.086 6.504-3.635 1.53-7.939 2.296-12.912 2.296-6.25 0-11.159-1.786-14.73-5.356-3.57-3.571-5.356-8.417-5.356-14.538V0H23v65.038c0 5.356.542 10.234 1.626 14.633 1.084 4.4 2.965 8.194 5.643 11.382 2.678 3.188 6.185 5.643 10.52 7.365 4.337 1.721 9.756 2.582 16.26 2.582 7.27 0 13.582-1.435 18.938-4.304 5.356-2.87 9.755-7.365 13.199-13.486h.382v15.686h15.303z\"/></svg>"
},
"$:/core/images/unfold-all-button": {
"title": "$:/core/images/unfold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M63.945 60.624c-2.05 0-4.101-.78-5.666-2.345L35.662 35.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 41.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 58.279a7.986 7.986 0 01-5.663 2.346zM64.004 124.565c-2.05 0-4.102-.78-5.666-2.345L35.721 99.603c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 105.255l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.662 122.22a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unfold-button": {
"title": "$:/core/images/unfold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M63.945 63.624c-2.05 0-4.101-.78-5.666-2.345L35.662 38.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 44.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 61.279a7.986 7.986 0 01-5.663 2.346zM64.004 105.682c-2.05.001-4.102-.78-5.666-2.344L35.721 80.721c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 86.373l16.966-16.966c3.124-3.125 8.194-3.13 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319l-22.617 22.617a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unlocked-padlock": {
"title": "$:/core/images/unlocked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unlocked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M48.627 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h6.136c-10.455-12.651-27.364-35.788-4.3-55.142 24.636-20.672 45.835 4.353 55.777 16.201 9.943 11.85-2.676 22.437-12.457 9.892-9.78-12.545-21.167-24.146-33.207-14.043-12.041 10.104-1.757 22.36 8.813 34.958 2.467 2.94 3.641 5.732 3.865 8.134zm19.105 28.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/up-arrow": {
"title": "$:/core/images/up-arrow",
"created": "20150316000544368",
"modified": "20150316000831867",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-up-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M63.892.281c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.104 3.092-11.196 0L63.894 19.393 13.513 69.774a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98A7.892 7.892 0 0163.893.28z\"/></svg>"
},
"$:/core/images/video": {
"title": "$:/core/images/video",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-video tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 12c-34.91 0-55.273 2.917-58.182 5.833C2.91 20.75 0 41.167 0 64.5c0 23.333 2.91 43.75 5.818 46.667C8.728 114.083 29.091 117 64 117c34.91 0 55.273-2.917 58.182-5.833C125.09 108.25 128 87.833 128 64.5c0-23.333-2.91-43.75-5.818-46.667C119.272 14.917 98.909 12 64 12zm-9.084 32.618c-3.813-2.542-6.905-.879-6.905 3.698v31.368c0 4.585 3.099 6.235 6.905 3.698l22.168-14.779c3.813-2.542 3.806-6.669 0-9.206L54.916 44.618z\"/></svg>"
},
"$:/core/images/warning": {
"title": "$:/core/images/warning",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-warning tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M57.072 11c3.079-5.333 10.777-5.333 13.856 0l55.426 96c3.079 5.333-.77 12-6.928 12H8.574c-6.158 0-10.007-6.667-6.928-12l55.426-96zM64 37c-4.418 0-8 3.582-8 7.994v28.012C56 77.421 59.59 81 64 81c4.418 0 8-3.582 8-7.994V44.994C72 40.579 68.41 37 64 37zm0 67a8 8 0 100-16 8 8 0 000 16z\"/></svg>"
},
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "advanced search"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "Advanced search"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "cancel"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "Discard changes to this tiddler"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "clone"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "Clone this tiddler"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "close"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "Close this tiddler"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "close all"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "Close all tiddlers"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "close others"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "Close other tiddlers"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "control panel"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "Open control panel"
},
"$:/language/Buttons/CopyToClipboard/Caption": {
"title": "$:/language/Buttons/CopyToClipboard/Caption",
"text": "copy to clipboard"
},
"$:/language/Buttons/CopyToClipboard/Hint": {
"title": "$:/language/Buttons/CopyToClipboard/Hint",
"text": "Copy this text to the clipboard"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "delete"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "Delete this tiddler"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "edit"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "Edit this tiddler"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "encryption"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "Set or clear a password for saving this wiki"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "clear password"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "Clear the password and save this wiki without encryption"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "set password"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "Set a password for saving this wiki with encryption"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "export all"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "Export all tiddlers"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "export tiddler"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "Export tiddler"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "export tiddlers"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "Export tiddlers"
},
"$:/language/Buttons/SidebarSearch/Hint": {
"title": "$:/language/Buttons/SidebarSearch/Hint",
"text": "Select the sidebar search field"
},
"$:/language/Buttons/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "fold tiddler"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "Fold the body of this tiddler"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "fold-bar"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "Optional bars to fold and unfold tiddlers"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "unfold tiddler"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "Unfold the body of this tiddler"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "fold other tiddlers"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "Fold the bodies of other opened tiddlers"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "fold all tiddlers"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "Fold the bodies of all opened tiddlers"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "unfold all tiddlers"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "Unfold the bodies of all opened tiddlers"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "full-screen"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "Enter or leave full-screen mode"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "help"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "Show help panel"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "import"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "Import many types of file including text, image, TiddlyWiki or JSON"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "info"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "Show information for this tiddler"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "home"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "Open the default tiddlers"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "language"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "Choose the user interface language"
},
"$:/language/Buttons/Manager/Caption": {
"title": "$:/language/Buttons/Manager/Caption",
"text": "tiddler manager"
},
"$:/language/Buttons/Manager/Hint": {
"title": "$:/language/Buttons/Manager/Hint",
"text": "Open tiddler manager"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "more"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "More actions"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "new here"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "Create a new tiddler tagged with this one"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "new journal"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "Create a new journal tiddler"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "new journal here"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "Create a new journal tiddler tagged with this one"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "new image"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "Create a new image tiddler"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "new Markdown tiddler"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "Create a new Markdown tiddler"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "new tiddler"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "Create a new tiddler"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "open in new window"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "Open tiddler in new window"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "palette"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "Choose the colour palette"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "permalink"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "Set browser address bar to a direct link to this tiddler"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "permaview"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "Set browser address bar to a direct link to all the tiddlers in this story"
},
"$:/language/Buttons/Print/Caption": {
"title": "$:/language/Buttons/Print/Caption",
"text": "print page"
},
"$:/language/Buttons/Print/Hint": {
"title": "$:/language/Buttons/Print/Hint",
"text": "Print the current page"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "refresh"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "Perform a full refresh of the wiki"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "ok"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "Confirm changes to this tiddler"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "save changes"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "Save changes"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "storyview"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "Choose the story visualisation"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "hide sidebar"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "Hide sidebar"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "show sidebar"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "Show sidebar"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "tag manager"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "Open tag manager"
},
"$:/language/Buttons/Timestamp/Caption": {
"title": "$:/language/Buttons/Timestamp/Caption",
"text": "timestamps"
},
"$:/language/Buttons/Timestamp/Hint": {
"title": "$:/language/Buttons/Timestamp/Hint",
"text": "Choose whether modifications update timestamps"
},
"$:/language/Buttons/Timestamp/On/Caption": {
"title": "$:/language/Buttons/Timestamp/On/Caption",
"text": "timestamps are on"
},
"$:/language/Buttons/Timestamp/On/Hint": {
"title": "$:/language/Buttons/Timestamp/On/Hint",
"text": "Update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Timestamp/Off/Caption": {
"title": "$:/language/Buttons/Timestamp/Off/Caption",
"text": "timestamps are off"
},
"$:/language/Buttons/Timestamp/Off/Hint": {
"title": "$:/language/Buttons/Timestamp/Off/Hint",
"text": "Don't update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "theme"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "Choose the display theme"
},
"$:/language/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "bold"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "Apply bold formatting to selection"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "clear"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "Clear image to solid colour"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "editor height"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "Automatically adjust height to fit content"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "Fixed height:"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "Choose the height of the text editor"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "excise"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "Perform excision"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "Macro name:"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "Title of new tiddler:"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "Replace excised text with:"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "macro"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "link"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "transclusion"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "Tag new tiddler with the title of this tiddler"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "Warning: tiddler already exists"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "Excise the selected text into a new tiddler"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "heading 1"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "Apply heading level 1 formatting to lines containing selection"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "heading 2"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "Apply heading level 2 formatting to lines containing selection"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "heading 3"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "Apply heading level 3 formatting to lines containing selection"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "heading 4"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "Apply heading level 4 formatting to lines containing selection"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "heading 5"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "Apply heading level 5 formatting to lines containing selection"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "heading 6"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "Apply heading level 6 formatting to lines containing selection"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "italic"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "Apply italic formatting to selection"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "line width"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "Set line width for painting"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "link"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "Create wikitext link"
},
"$:/language/Buttons/Linkify/Caption": {
"title": "$:/language/Buttons/Linkify/Caption",
"text": "wikilink"
},
"$:/language/Buttons/Linkify/Hint": {
"title": "$:/language/Buttons/Linkify/Hint",
"text": "Wrap selection in square brackets"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "bulleted list"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "Apply bulleted list formatting to lines containing selection"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "numbered list"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "Apply numbered list formatting to lines containing selection"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "monospaced block"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "Apply monospaced block formatting to lines containing selection"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "monospaced"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "Apply monospaced character formatting to selection"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "opacity"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "Set painting opacity"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "paint colour"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "Set painting colour"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "picture"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "Insert picture"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "preview"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "Show preview pane"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "preview type"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "Choose preview type"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "quote"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "Apply quoted text formatting to lines containing selection"
},
"$:/language/Buttons/RotateLeft/Caption": {
"title": "$:/language/Buttons/RotateLeft/Caption",
"text": "rotate left"
},
"$:/language/Buttons/RotateLeft/Hint": {
"title": "$:/language/Buttons/RotateLeft/Hint",
"text": "Rotate image left by 90 degrees"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "image size"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "Height:"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "Resize image"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "Width:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "Set image size"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "stamp"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "Add your own"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "Insert a preconfigured snippet of text"
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "Name as shown in menu"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "strikethrough"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "Apply strikethrough formatting to selection"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "subscript"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "Apply subscript formatting to selection"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "superscript"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "Apply superscript formatting to selection"
},
"$:/language/Buttons/ToggleSidebar/Hint": {
"title": "$:/language/Buttons/ToggleSidebar/Hint",
"text": "Toggle the sidebar visibility"
},
"$:/language/Buttons/Transcludify/Caption": {
"title": "$:/language/Buttons/Transcludify/Caption",
"text": "transclusion"
},
"$:/language/Buttons/Transcludify/Hint": {
"title": "$:/language/Buttons/Transcludify/Hint",
"text": "Wrap selection in curly brackets"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "underline"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "Apply underline formatting to selection"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Advanced"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Internal information about this TiddlyWiki"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Appearance"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Ways to customise the appearance of your TiddlyWiki."
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Animation duration"
},
"$:/language/ControlPanel/Basics/AutoFocus/Prompt": {
"title": "$:/language/ControlPanel/Basics/AutoFocus/Prompt",
"text": "Default focus field for new tiddlers"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Basics"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Default tiddlers"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Choose which tiddlers are displayed at startup"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Hello! Current language:"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "Title of new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
"text": "Text for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "Tags for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
"text": "Title of new tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt",
"text": "Tags for new tiddlers"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "Number of overridden shadow tiddlers"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "Number of shadow tiddlers"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "Subtitle"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "Number of system tiddlers"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "Number of tags"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "Number of tiddlers"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "Title of this ~TiddlyWiki"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "Username for signing edits"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki version"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "Editor Types"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "Editor"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "These tiddlers determine which editor is used to edit specific tiddler types."
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "Type"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "Info"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "Information about this TiddlyWiki"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "Type shortcut here"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "add shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "Keyboard Shortcuts"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "Manage keyboard shortcut assignments"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "No keyboard shortcuts assigned"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "remove keyboard shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "All platforms"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "Macintosh platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "Non-Macintosh platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "Linux platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "Non-Linux platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "Windows platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "Non-Windows platforms only"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "Loaded Modules"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "clone"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "It is recommended that you clone this shadow palette before editing it"
},
"$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
"title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
"text": "delete this entry from the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
"title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
"text": "Show color names that are not part of the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "This shadow palette has been modified"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "Editing"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "reset"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "hide editor"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "Current palette:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "show editor"
},
"$:/language/ControlPanel/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "Parsing"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "Block Parse Rules"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "Inline Parse Rules"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "Pragma Parse Rules"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "Get more plugins"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "Install plugins from the official library"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
},
"$:/language/ControlPanel/Plugins/AlsoRequires": {
"title": "$:/language/ControlPanel/Plugins/AlsoRequires",
"text": "Also requires:"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "disable"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "Disable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(disabled)"
},
"$:/language/ControlPanel/Plugins/Downgrade/Caption": {
"title": "$:/language/ControlPanel/Plugins/Downgrade/Caption",
"text": "downgrade"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "None"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "enable"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "Enable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "install"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "Currently installed plugins:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "Languages"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "Language pack plugins"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "This plugin is not currently installed"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "open plugin library"
},
"$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
"text": "close plugin library"
},
"$:/language/ControlPanel/Plugins/PluginWillRequireReload": {
"title": "$:/language/ControlPanel/Plugins/PluginWillRequireReload",
"text": "(requires reload)"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "reinstall"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "Themes"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "Theme plugins"
},
"$:/language/ControlPanel/Plugins/Update/Caption": {
"title": "$:/language/ControlPanel/Plugins/Update/Caption",
"text": "update"
},
"$:/language/ControlPanel/Plugins/Updates/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/Caption",
"text": "Updates"
},
"$:/language/ControlPanel/Plugins/Updates/Hint": {
"title": "$:/language/ControlPanel/Plugins/Updates/Hint",
"text": "Available updates to installed plugins"
},
"$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption",
"text": "Update <<update-count>> plugins"
},
"$:/language/ControlPanel/Plugins/SubPluginPrompt": {
"title": "$:/language/ControlPanel/Plugins/SubPluginPrompt",
"text": "With <<count>> sub-plugins available"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
"text": "Permit automatic saving for the download saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
"text": "Enable Autosave for Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
"text": "Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
"text": "These settings apply to the HTML5-compatible download saver"
},
"$:/language/ControlPanel/Saving/General/Caption": {
"title": "$:/language/ControlPanel/Saving/General/Caption",
"text": "General"
},
"$:/language/ControlPanel/Saving/General/Hint": {
"title": "$:/language/ControlPanel/Saving/General/Hint",
"text": "These settings apply to all the loaded savers"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
},
"$:/language/ControlPanel/Saving/GitService/Branch": {
"title": "$:/language/ControlPanel/Saving/GitService/Branch",
"text": "Target branch for saving"
},
"$:/language/ControlPanel/Saving/GitService/CommitMessage": {
"title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
"text": "Saved by TiddlyWiki"
},
"$:/language/ControlPanel/Saving/GitService/Description": {
"title": "$:/language/ControlPanel/Saving/GitService/Description",
"text": "These settings are only used when saving to <<service-name>>"
},
"$:/language/ControlPanel/Saving/GitService/Filename": {
"title": "$:/language/ControlPanel/Saving/GitService/Filename",
"text": "Filename of target file (e.g. `index.html`)"
},
"$:/language/ControlPanel/Saving/GitService/Path": {
"title": "$:/language/ControlPanel/Saving/GitService/Path",
"text": "Path to target file (e.g. `/wiki/`)"
},
"$:/language/ControlPanel/Saving/GitService/Repo": {
"title": "$:/language/ControlPanel/Saving/GitService/Repo",
"text": "Target repository (e.g. `Jermolene/TiddlyWiki5`)"
},
"$:/language/ControlPanel/Saving/GitService/ServerURL": {
"title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
"text": "Server API URL"
},
"$:/language/ControlPanel/Saving/GitService/UserName": {
"title": "$:/language/ControlPanel/Saving/GitService/UserName",
"text": "Username"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
"text": "~GitHub Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
"text": "Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
"text": "~GitLab Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
"text": "Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Caption",
"text": "Gitea Saver"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Password",
"text": "Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "Advanced Settings"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "Backup Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "Backups"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
"text": "~TiddlySpot Saver"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "Upload Filename"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "Password"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "Server URL"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "Upload Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "Wiki Name"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "Autosave"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "Do not save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "Save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "Attempt to automatically save changes during editing when using a supporting saver"
},
"$:/language/ControlPanel/Settings/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "Camel Case Wiki Links"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "Enable automatic ~CamelCase linking"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "Settings"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "Enable or disable the editor toolbar:"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "Show editor toolbar"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
"text": "Tiddler Info Panel Mode"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
"text": "Control when the tiddler info panel closes:"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
"text": "Tiddler info panel closes automatically"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
"text": "Tiddler info panel stays open until explicitly closed"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "These settings let you customise the behaviour of TiddlyWiki."
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "Navigation Address Bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "Behaviour of the browser address bar when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "Do not update the address bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "Include the target tiddler"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "Include the target tiddler and the current story sequence"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "Navigation History"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "Update browser history when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "Do not update history"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "Update history"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
"text": "Permalink/permaview Mode"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
"text": "Choose how permalink/permaview is handled:"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
"text": "Copy permalink/permaview URL to clipboard"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
"text": "Update address bar with permalink/permaview URL"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "Performance Instrumentation"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "Enable performance instrumentation"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "Toolbar Button Style"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "Choose the style for toolbar buttons:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "Borderless"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "Boxed"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "Rounded"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "Toolbar Buttons"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "Default toolbar button appearance:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "Include icon"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "Include text"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "Default Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "Specify which sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
"text": "Default More Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
"text": "Specify which More sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "Tiddler Opening Behaviour"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "Navigation from //within// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "Navigation from //outside// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "Open above the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "Open below the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "Open at the top of the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "Open at the bottom of the story river"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "Tiddler Titles"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "Optionally display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "Do not display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "Display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "Wiki Links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "Choose whether to link to tiddlers that do not exist yet"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "Enable links to missing tiddlers"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/Stylesheets/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Caption",
"text": "Stylesheets"
},
"$:/language/ControlPanel/Stylesheets/Expand/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
"text": "Expand All"
},
"$:/language/ControlPanel/Stylesheets/Hint": {
"title": "$:/language/ControlPanel/Stylesheets/Hint",
"text": "This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag \"$:/tags/Stylesheet\">>"
},
"$:/language/ControlPanel/Stylesheets/Restore/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
"text": "Restore"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "Theme"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "Current theme:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "Tiddler Fields"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "Toolbars"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "Edit Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "Select which toolbar buttons are displayed"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "Page Toolbar"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "View Toolbar"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Download full wiki"
},
"$:/language/Date/DaySuffix/1": {
"title": "$:/language/Date/DaySuffix/1",
"text": "st"
},
"$:/language/Date/DaySuffix/2": {
"title": "$:/language/Date/DaySuffix/2",
"text": "nd"
},
"$:/language/Date/DaySuffix/3": {
"title": "$:/language/Date/DaySuffix/3",
"text": "rd"
},
"$:/language/Date/DaySuffix/4": {
"title": "$:/language/Date/DaySuffix/4",
"text": "th"
},
"$:/language/Date/DaySuffix/5": {
"title": "$:/language/Date/DaySuffix/5",
"text": "th"
},
"$:/language/Date/DaySuffix/6": {
"title": "$:/language/Date/DaySuffix/6",
"text": "th"
},
"$:/language/Date/DaySuffix/7": {
"title": "$:/language/Date/DaySuffix/7",
"text": "th"
},
"$:/language/Date/DaySuffix/8": {
"title": "$:/language/Date/DaySuffix/8",
"text": "th"
},
"$:/language/Date/DaySuffix/9": {
"title": "$:/language/Date/DaySuffix/9",
"text": "th"
},
"$:/language/Date/DaySuffix/10": {
"title": "$:/language/Date/DaySuffix/10",
"text": "th"
},
"$:/language/Date/DaySuffix/11": {
"title": "$:/language/Date/DaySuffix/11",
"text": "th"
},
"$:/language/Date/DaySuffix/12": {
"title": "$:/language/Date/DaySuffix/12",
"text": "th"
},
"$:/language/Date/DaySuffix/13": {
"title": "$:/language/Date/DaySuffix/13",
"text": "th"
},
"$:/language/Date/DaySuffix/14": {
"title": "$:/language/Date/DaySuffix/14",
"text": "th"
},
"$:/language/Date/DaySuffix/15": {
"title": "$:/language/Date/DaySuffix/15",
"text": "th"
},
"$:/language/Date/DaySuffix/16": {
"title": "$:/language/Date/DaySuffix/16",
"text": "th"
},
"$:/language/Date/DaySuffix/17": {
"title": "$:/language/Date/DaySuffix/17",
"text": "th"
},
"$:/language/Date/DaySuffix/18": {
"title": "$:/language/Date/DaySuffix/18",
"text": "th"
},
"$:/language/Date/DaySuffix/19": {
"title": "$:/language/Date/DaySuffix/19",
"text": "th"
},
"$:/language/Date/DaySuffix/20": {
"title": "$:/language/Date/DaySuffix/20",
"text": "th"
},
"$:/language/Date/DaySuffix/21": {
"title": "$:/language/Date/DaySuffix/21",
"text": "st"
},
"$:/language/Date/DaySuffix/22": {
"title": "$:/language/Date/DaySuffix/22",
"text": "nd"
},
"$:/language/Date/DaySuffix/23": {
"title": "$:/language/Date/DaySuffix/23",
"text": "rd"
},
"$:/language/Date/DaySuffix/24": {
"title": "$:/language/Date/DaySuffix/24",
"text": "th"
},
"$:/language/Date/DaySuffix/25": {
"title": "$:/language/Date/DaySuffix/25",
"text": "th"
},
"$:/language/Date/DaySuffix/26": {
"title": "$:/language/Date/DaySuffix/26",
"text": "th"
},
"$:/language/Date/DaySuffix/27": {
"title": "$:/language/Date/DaySuffix/27",
"text": "th"
},
"$:/language/Date/DaySuffix/28": {
"title": "$:/language/Date/DaySuffix/28",
"text": "th"
},
"$:/language/Date/DaySuffix/29": {
"title": "$:/language/Date/DaySuffix/29",
"text": "th"
},
"$:/language/Date/DaySuffix/30": {
"title": "$:/language/Date/DaySuffix/30",
"text": "th"
},
"$:/language/Date/DaySuffix/31": {
"title": "$:/language/Date/DaySuffix/31",
"text": "st"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "Sunday"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "Monday"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "Tuesday"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "Wednesday"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "Thursday"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "Friday"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "Saturday"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "January"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "February"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "March"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "April"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "May"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "June"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "July"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "August"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "September"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "October"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "November"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "December"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "am"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "pm"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "Sun"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "Mon"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "Tue"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "Wed"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "Thu"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "Fri"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "Sat"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "Jan"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "Feb"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "Mar"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "Apr"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "May"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "Jun"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "Jul"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "Aug"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "Sep"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "Oct"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "Nov"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "Dec"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "<<period>> days from now"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "<<period>> hours from now"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "<<period>> minutes from now"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "<<period>> months from now"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "1 second from now"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "<<period>> seconds from now"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "<<period>> years from now"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>> days ago"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>> hours ago"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>> minutes ago"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>> months ago"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1 second ago"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>> seconds ago"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>> years ago"
},
"$:/language/Docs/ModuleTypes/allfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/allfilteroperator",
"text": "A sub-operator for the ''all'' filter operator."
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations that may be used with the RevealWidget."
},
"$:/language/Docs/ModuleTypes/authenticator": {
"title": "$:/language/Docs/ModuleTypes/authenticator",
"text": "Defines how requests are authenticated by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
"title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
"text": "A bitmap editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Commands that can be executed under Node.js."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "Data to be inserted into `$tw.config`."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "Individual filter operator methods."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "Global data to be inserted into `$tw`."
},
"$:/language/Docs/ModuleTypes/info": {
"title": "$:/language/Docs/ModuleTypes/info",
"text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "Operands for the ''is'' filter operator."
},
"$:/language/Docs/ModuleTypes/library": {
"title": "$:/language/Docs/ModuleTypes/library",
"text": "Generic module type for general purpose JavaScript modules."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript macro definitions."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "Parsers for different content types."
},
"$:/language/Docs/ModuleTypes/route": {
"title": "$:/language/Docs/ModuleTypes/route",
"text": "Defines how individual URL patterns are handled by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "Savers handle different methods for saving files from the browser."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "Startup functions."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "Story views customise the animation and behaviour of list widgets."
},
"$:/language/Docs/ModuleTypes/texteditoroperation": {
"title": "$:/language/Docs/ModuleTypes/texteditoroperation",
"text": "A text editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "Converts different content types into tiddlers."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "Defines the behaviour of an individual tiddler field."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "Adds methods to the `$tw.Tiddler` prototype."
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "Applies upgrade processing to tiddlers during an upgrade/import."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "Adds methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "Adds Node.js-specific methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "Widgets encapsulate DOM rendering and refreshing."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "Adds methods to `$tw.Wiki`."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "Individual parser rules for the main WikiText parser."
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "Alert background"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "Alert border"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "Alert highlight"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "Alert muted foreground"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "General background"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "Blockquote bar"
},
"$:/language/Docs/PaletteColours/button-background": {
"title": "$:/language/Docs/PaletteColours/button-background",
"text": "Default button background"
},
"$:/language/Docs/PaletteColours/button-border": {
"title": "$:/language/Docs/PaletteColours/button-border",
"text": "Default button border"
},
"$:/language/Docs/PaletteColours/button-foreground": {
"title": "$:/language/Docs/PaletteColours/button-foreground",
"text": "Default button foreground"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "Unsaved changes indicator"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "Code background"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "Code border"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "Code foreground"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "Download button background"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "Download button foreground"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "Dragger background"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "Dragger foreground"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "Dropdown background"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "Dropdown border"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "Dropdown tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "Dropdown tab background"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "Dropzone background"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "External link background hover"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "External link background visited"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "External link background"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "External link foreground hover"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "External link foreground visited"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "External link foreground"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "General foreground"
},
"$:/language/Docs/PaletteColours/menubar-background": {
"title": "$:/language/Docs/PaletteColours/menubar-background",
"text": "Menu bar background"
},
"$:/language/Docs/PaletteColours/menubar-foreground": {
"title": "$:/language/Docs/PaletteColours/menubar-foreground",
"text": "Menu bar foreground"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "Message box background"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "Message box border"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "Message box foreground"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "Modal backdrop"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "Modal background"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "Modal border"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "Modal footer background"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "Modal footer border"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "Modal header border"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "General muted foreground"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "Notification background"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "Notification border"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "Page background"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "Preformatted code background"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "Preformatted code border"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "General primary"
},
"$:/language/Docs/PaletteColours/select-tag-background": {
"title": "$:/language/Docs/PaletteColours/select-tag-background",
"text": "`<select>` element background"
},
"$:/language/Docs/PaletteColours/select-tag-foreground": {
"title": "$:/language/Docs/PaletteColours/select-tag-foreground",
"text": "`<select>` element text"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "Sidebar button foreground"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "Sidebar controls foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "Sidebar controls foreground"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "Sidebar foreground shadow"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "Sidebar foreground"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "Sidebar muted foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "Sidebar muted foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "Sidebar tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "Sidebar tab background"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "Sidebar tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "Sidebar tab border"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "Sidebar tab divider"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "Sidebar tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "Sidebar tab foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "Sidebar tiddler link foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "Sidebar tiddler link foreground"
},
"$:/language/Docs/PaletteColours/site-title-foreground": {
"title": "$:/language/Docs/PaletteColours/site-title-foreground",
"text": "Site title foreground"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "Static alert foreground"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "Tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "Tab background"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "Tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "Tab border"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "Tab divider"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "Tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "Tab foreground"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "Table border"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "Table footer background"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "Table header background"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "Tag background"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "Tag foreground"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "Tiddler background"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "Tiddler border"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "Tiddler controls foreground hover"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "Tiddler controls foreground for selected controls"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "Tiddler controls foreground"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "Tiddler editor background"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "Tiddler editor border image"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "Tiddler editor border"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "Tiddler editor background for even fields"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "Tiddler editor background for odd fields"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "Tiddler info panel background"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "Tiddler info panel border"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "Tiddler info panel tab background"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "Tiddler link background"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "Tiddler link foreground"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "Tiddler subtitle foreground"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "Tiddler title foreground"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "Toolbar 'new tiddler' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "Toolbar 'options' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "Toolbar 'save' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "Toolbar 'info' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "Toolbar 'edit' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "Toolbar 'close' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "Toolbar 'delete' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "Toolbar 'cancel' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "Toolbar 'done' button foreground"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "Untagged pill background"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "Very muted foreground"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "output"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "remove field"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "Remove field"
},
"$:/language/EditTemplate/Field/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Field/Dropdown/Caption",
"text": "field list"
},
"$:/language/EditTemplate/Field/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Field/Dropdown/Hint",
"text": "Show field list"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Fields/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Fields/Add/Button/Hint",
"text": "Add the new field to the tiddler"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "field name"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "Add a new field:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "field value"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/System": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
"text": "System fields"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/User": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
"text": "User fields"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Tags/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Tags/Add/Button/Hint",
"text": "add tag"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "tag name"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "tag list"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "Show tag list"
},
"$:/language/EditTemplate/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
},
"$:/language/EditTemplate/Title/Exists/Prompt": {
"title": "$:/language/EditTemplate/Title/Exists/Prompt",
"text": "Target tiddler already exists"
},
"$:/language/EditTemplate/Title/Relink/Prompt": {
"title": "$:/language/EditTemplate/Title/Relink/Prompt",
"text": "Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"
},
"$:/language/EditTemplate/Title/References/Prompt": {
"title": "$:/language/EditTemplate/Title/References/Prompt",
"text": "The following references to this tiddler will not be automatically updated:"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "content type list"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "Show content type list"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "delete content type"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "Delete content type"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "content type"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type:"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "Static HTML"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON file"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV file"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "\".tid\" file"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "The full URI of an external image tiddler"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "The name of the bag from which a tiddler came"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "The text to be displayed on a tab or button"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "The CSS color value associated with a tiddler"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "The date a tiddler was created"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "The name of the person who created a tiddler"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "For a plugin, lists the dependent plugin titles"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "The descriptive text for a plugin, or a modal dialogue"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "For draft tiddlers, contains the proposed new title of the tiddler"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "The footer text for a wizard"
},
"$:/language/Docs/Fields/hide-body": {
"title": "$:/language/Docs/Fields/hide-body",
"text": "The view template will hide bodies of tiddlers if set to: ''yes''"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "The title of the tiddler containing the icon associated with a tiddler"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "An ordered list of tiddler titles associated with a tiddler"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "The date and time at which a tiddler was last modified"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "The tiddler title associated with the person who last modified a tiddler"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "The human readable name associated with a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "A numerical value indicating the priority of a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "The type of plugin in a plugin tiddler"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "The revision of the tiddler held at the server"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "Date of a TiddlyWiki release"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "The source URL associated with a tiddler"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "The subtitle text for a wizard"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "A list of tags associated with a tiddler"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "The body text of a tiddler"
},
"$:/language/Docs/Fields/throttle.refresh": {
"title": "$:/language/Docs/Fields/throttle.refresh",
"text": "If present, throttles refreshes of this tiddler"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "The unique name of a tiddler"
},
"$:/language/Docs/Fields/toc-link": {
"title": "$:/language/Docs/Fields/toc-link",
"text": "Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "The content type of a tiddler"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "Version information for a plugin"
},
"$:/language/Docs/Fields/_is_skinny": {
"title": "$:/language/Docs/Fields/_is_skinny",
"text": "If present, indicates that the tiddler text field must be loaded from the server"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "All tiddlers except system tiddlers"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "Recently modified tiddlers, including system tiddlers"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "Recently modified tiddlers"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "All tags except system tags"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "Missing tiddlers"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "Draft tiddlers"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "Orphan tiddlers"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "System tiddlers"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "Shadow tiddlers"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "Overridden shadow tiddlers"
},
"$:/language/Filters/SessionTiddlers": {
"title": "$:/language/Filters/SessionTiddlers",
"text": "Tiddlers modified since the wiki was loaded"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "System tags"
},
"$:/language/Filters/StoryList": {
"title": "$:/language/Filters/StoryList",
"text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
},
"$:/language/Filters/TypedTiddlers": {
"title": "$:/language/Filters/TypedTiddlers",
"text": "Non wiki-text tiddlers"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "Automatically run configured commands",
"text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "Clear a password for subsequent crypto operations",
"text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/deletetiddlers": {
"title": "$:/language/Help/deletetiddlers",
"description": "Deletes a group of tiddlers",
"text": "<<.from-version \"5.1.20\">> Deletes a group of tiddlers identified by a filter.\n\n```\n--deletetiddlers <filter>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "Lists the available editions of TiddlyWiki",
"text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
},
"$:/language/Help/fetch": {
"title": "$:/language/Help/fetch",
"description": "Fetch tiddlers from wiki by URL",
"text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "Display help for TiddlyWiki commands",
"text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
},
"$:/language/Help/import": {
"title": "$:/language/Help/import",
"description": "Import tiddlers from a file",
"text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "Initialise a new wiki folder",
"text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
},
"$:/language/Help/listen": {
"title": "$:/language/Help/listen",
"description": "Provides an HTTP server interface to TiddlyWiki",
"text": "Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of header to be used for trusted authentication\n* ''readers'' - comma separated list of principals allowed to read from this wiki\n* ''writers'' - comma separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "Load tiddlers from a file",
"text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \"noerror\" parameter.\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "Construct library plugin required by upgrade process",
"text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "No such help item"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "Set the base output directory for subsequent commands",
"text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Set a password for subsequent crypto operations",
"text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
},
"$:/language/Help/render": {
"title": "$:/language/Help/render",
"description": "Renders individual tiddlers to files",
"text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''template'': Optional template through which each tiddler is rendered\n* ''name'': Name of optional variable\n* ''value'': Value of optional variable\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Render an individual tiddler as a specified ContentType",
"text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "Render tiddlers matching a filter to a specified ContentType",
"text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
},
"$:/language/Help/save": {
"title": "$:/language/Help/save",
"description": "Saves individual raw tiddlers to files",
"text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "Saves a raw tiddler to a file",
"text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "Saves a group of raw tiddlers to a directory",
"text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
},
"$:/language/Help/savewikifolder": {
"title": "$:/language/Help/savewikifolder",
"description": "Saves a wiki to a new wiki folder",
"text": "<<.from-version \"5.1.20\">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* The target wiki folder must be empty or non-existent\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\n* Custom plugins are unpacked into their own folder\n\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)",
"text": "Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "Prepares external tiddlers for use",
"text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "Unpack the payload tiddlers from a plugin",
"text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Triggers verbose output mode",
"text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Displays the version number of TiddlyWiki",
"text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "The following tiddlers were imported:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "Cancel"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "These tiddlers are ready to import:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "Import"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "Select"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "Status"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "Title"
},
"$:/language/Import/Listing/Preview": {
"title": "$:/language/Import/Listing/Preview",
"text": "Preview:"
},
"$:/language/Import/Listing/Preview/Text": {
"title": "$:/language/Import/Listing/Preview/Text",
"text": "Text"
},
"$:/language/Import/Listing/Preview/TextRaw": {
"title": "$:/language/Import/Listing/Preview/TextRaw",
"text": "Text (Raw)"
},
"$:/language/Import/Listing/Preview/Fields": {
"title": "$:/language/Import/Listing/Preview/Fields",
"text": "Fields"
},
"$:/language/Import/Listing/Preview/Diff": {
"title": "$:/language/Import/Listing/Preview/Diff",
"text": "Diff"
},
"$:/language/Import/Listing/Preview/DiffFields": {
"title": "$:/language/Import/Listing/Preview/DiffFields",
"text": "Diff (Fields)"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "Blocked incompatible or obsolete plugin"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)"
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "Upgraded plugin from <<incoming>> to <<upgraded>>"
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "Blocked temporary state tiddler"
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "Blocked system tiddler"
},
"$:/language/Import/Upgrader/System/Warning": {
"title": "$:/language/Import/Upgrader/System/Warning",
"text": "Core module tiddler"
},
"$:/language/Import/Upgrader/System/Alert": {
"title": "$:/language/Import/Upgrader/System/Alert",
"text": "You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable"
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "Migrated theme tweak from <$text text=<<from>>/>"
},
"$:/language/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "This tiddler contains binary data"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "upgrade"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "close all"
},
"$:/language/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "Recent:"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "count"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "New Tiddler"
},
"$:/language/Diffs/CountMessage": {
"title": "$:/language/Diffs/CountMessage",
"text": "<<diff-count>> differences"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "Drop here (or use the 'Escape' key to cancel)"
},
"$:/language/Encryption/Cancel": {
"title": "$:/language/Encryption/Cancel",
"text": "Cancel"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "Set a new password for this TiddlyWiki"
},
"$:/language/Encryption/Username": {
"title": "$:/language/Encryption/Username",
"text": "Username"
},
"$:/language/Encryption/Password": {
"title": "$:/language/Encryption/Password",
"text": "Password"
},
"$:/language/Encryption/RepeatPassword": {
"title": "$:/language/Encryption/RepeatPassword",
"text": "Repeat password"
},
"$:/language/Encryption/PasswordNoMatch": {
"title": "$:/language/Encryption/PasswordNoMatch",
"text": "Passwords do not match"
},
"$:/language/Encryption/SetPassword": {
"title": "$:/language/Encryption/SetPassword",
"text": "Set password"
},
"$:/language/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "Error"
},
"$:/language/Error/EditConflict": {
"title": "$:/language/Error/EditConflict",
"text": "File changed on server"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "Filter error"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "Syntax error in filter expression"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "Filter Error: Unknown operand for the 'is' filter operator"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "Error loading plugin library"
},
"$:/language/Error/NetworkErrorAlert": {
"title": "$:/language/Error/NetworkErrorAlert",
"text": "`<h2>''Network Error''</h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.<br><br>''Any unsaved changes will be automatically synchronised when connectivity is restored''.`"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "Recursive transclusion error in transclude widget"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "Error retrieving skinny tiddler list"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "Error saving to TWEdit"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "Error while saving"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest error code"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "Internal JavaScript Error"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "Login to TiddlySpace"
},
"$:/language/Manager/Controls/FilterByTag/None": {
"title": "$:/language/Manager/Controls/FilterByTag/None",
"text": "(none)"
},
"$:/language/Manager/Controls/FilterByTag/Prompt": {
"title": "$:/language/Manager/Controls/FilterByTag/Prompt",
"text": "Filter by tag:"
},
"$:/language/Manager/Controls/Order/Prompt": {
"title": "$:/language/Manager/Controls/Order/Prompt",
"text": "Reverse order"
},
"$:/language/Manager/Controls/Search/Placeholder": {
"title": "$:/language/Manager/Controls/Search/Placeholder",
"text": "Search"
},
"$:/language/Manager/Controls/Search/Prompt": {
"title": "$:/language/Manager/Controls/Search/Prompt",
"text": "Search:"
},
"$:/language/Manager/Controls/Show/Option/Tags": {
"title": "$:/language/Manager/Controls/Show/Option/Tags",
"text": "tags"
},
"$:/language/Manager/Controls/Show/Option/Tiddlers": {
"title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
"text": "tiddlers"
},
"$:/language/Manager/Controls/Show/Prompt": {
"title": "$:/language/Manager/Controls/Show/Prompt",
"text": "Show:"
},
"$:/language/Manager/Controls/Sort/Prompt": {
"title": "$:/language/Manager/Controls/Sort/Prompt",
"text": "Sort by:"
},
"$:/language/Manager/Item/Colour": {
"title": "$:/language/Manager/Item/Colour",
"text": "Colour"
},
"$:/language/Manager/Item/Fields": {
"title": "$:/language/Manager/Item/Fields",
"text": "Fields"
},
"$:/language/Manager/Item/Icon/None": {
"title": "$:/language/Manager/Item/Icon/None",
"text": "(none)"
},
"$:/language/Manager/Item/Icon": {
"title": "$:/language/Manager/Item/Icon",
"text": "Icon"
},
"$:/language/Manager/Item/RawText": {
"title": "$:/language/Manager/Item/RawText",
"text": "Raw text"
},
"$:/language/Manager/Item/Tags": {
"title": "$:/language/Manager/Item/Tags",
"text": "Tags"
},
"$:/language/Manager/Item/Tools": {
"title": "$:/language/Manager/Item/Tools",
"text": "Tools"
},
"$:/language/Manager/Item/WikifiedText": {
"title": "$:/language/Manager/Item/WikifiedText",
"text": "Wikified text"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "No"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "Official ~TiddlyWiki Plugin Library"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
},
"$:/language/PluginReloadWarning": {
"title": "$:/language/PluginReloadWarning",
"text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to ~JavaScript plugins to take effect"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DDth MMM YYYY"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "This is a system tiddler"
},
"$:/language/SystemTiddlers/Include/Prompt": {
"title": "$:/language/SystemTiddlers/Include/Prompt",
"text": "Include system tiddlers"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "Colour"
},
"$:/language/TagManager/Count/Heading": {
"title": "$:/language/TagManager/Count/Heading",
"text": "Count"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "Icon"
},
"$:/language/TagManager/Icons/None": {
"title": "$:/language/TagManager/Icons/None",
"text": "None"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "Info"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "Tag"
},
"$:/language/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "DDth MMM YYYY at hh12:0mmam"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "You have unsaved changes in TiddlyWiki"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "Yes"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"subtitle": "Download changes",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/DownloadingChanges.html",
"text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"subtitle": "Save your work",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/SavingChanges.html",
"text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "DDth MMM YYYY"
},
"$:/config/NewJournal/Text": {
"title": "$:/config/NewJournal/Text",
"text": ""
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"tags": "Journal"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "Saved wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "Starting to save wiki"
},
"$:/language/Notifications/CopiedToClipboard/Succeeded": {
"title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
"text": "Copied to clipboard!"
},
"$:/language/Notifications/CopiedToClipboard/Failed": {
"title": "$:/language/Notifications/CopiedToClipboard/Failed",
"text": "Failed to copy to clipboard!"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "List"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "Filter"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "All matches:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "Title matches:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "Search"
},
"$:/language/Search/Search/TooShort": {
"title": "$:/language/Search/Search/TooShort",
"text": "Search text too short"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Search for shadow tiddlers"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "Standard"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "Search for standard tiddlers"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "System"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Search for system tiddlers"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "All"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "Contents"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "Drafts"
},
"$:/language/SideBar/Explorer/Caption": {
"title": "$:/language/SideBar/Explorer/Caption",
"text": "Explorer"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "Missing"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "More"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "Open"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "Orphans"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "Recent"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "Shadows"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "System"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "Tags"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "untagged"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Tools"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "a non-linear personal web notebook"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "My ~TiddlyWiki"
},
"$:/language/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "List of tiddlers by tag",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Macro definition",
"text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table with 4 columns by 3 rows",
"text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table of Contents",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "Theme Tweaks"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "You can tweak certain aspects of the ''Vanilla'' theme."
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "Options"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "Sidebar layout"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "Fixed story, fluid sidebar"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "Fluid story, fixed sidebar"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "Sticky titles"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "Causes tiddler titles to \"stick\" to the top of the browser window"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "Wrap long lines in code blocks"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "Settings"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "Font family"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "Code font family"
},
"$:/language/ThemeTweaks/Settings/EditorFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
"text": "Editor font family"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "Page background image"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "Page background image attachment"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "Scroll with tiddlers"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "Fixed to window"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "Page background image size"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "Auto"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "Cover"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "Contain"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "Sizes"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "Font size"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "Line height"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "Font size for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "Line height for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "Story left position"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "Story top position"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "how far the top margin of the story river<br>is from the top of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "Story right"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "how far the left margin of the sidebar <br>is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "Story width"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "the overall width of the story river"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "Tiddler width"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "within the story river"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "Sidebar breakpoint"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "Sidebar width"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "the width of the sidebar in fluid-fixed layout"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "Advanced"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "none"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "Plugin Details"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "This plugin contains the following shadow tiddlers:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "Shadow Status"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "It is overridden by an ordinary tiddler"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Fields"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "List"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "This tiddler does not have a list"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listed"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "This tiddler is not listed by any others"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "References"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "No tiddlers link to this one"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "Tagging"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "No tiddlers are tagged with this one"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "Tools"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "JavaScript code",
"name": "application/javascript",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON data",
"name": "application/json",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Data dictionary",
"name": "application/x-tiddler-dictionary",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF image",
"name": "image/gif",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG image",
"name": "image/jpeg",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG image",
"name": "image/png",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics image",
"name": "image/svg+xml",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO format icon file",
"name": "image/x-icon",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Static stylesheet",
"name": "text/css",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML markup",
"name": "text/html",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Plain text",
"name": "text/plain",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki 5",
"name": "text/vnd.tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki Classic",
"name": "text/x-tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/languages/en-GB/icon": {
"title": "$:/languages/en-GB/icon",
"type": "image/svg+xml",
"text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
},
"$:/languages/en-GB": {
"title": "$:/languages/en-GB",
"name": "en-GB",
"description": "English (British)",
"author": "JeremyRuston",
"core-version": ">=5.0.0\"",
"text": "Stub pseudo-plugin for the default language"
},
"$:/core/modules/commander.js": {
"title": "$:/core/modules/commander.js",
"text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\t\t\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/commands/build.js": {
"title": "$:/core/modules/commands/build.js",
"text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/clearpassword.js": {
"title": "$:/core/modules/commands/clearpassword.js",
"text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/deletetiddlers.js": {
"title": "$:/core/modules/commands/deletetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/deletetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to delete tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"deletetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\twiki.deleteTiddler(title);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/editions.js": {
"title": "$:/core/modules/commands/editions.js",
"text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\" \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/fetch.js": {
"title": "$:/core/modules/commands/fetch.js",
"text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = $tw.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t \tdata = [];\n\t self.commander.write(\"Reading \" + url + \": \");\n\t response.on(\"data\",function(chunk) {\n\t data.push(chunk);\n\t self.commander.write(\".\");\n\t });\n\t response.on(\"end\",function() {\n\t self.commander.write(\"\\n\");\n\t if(response.statusCode === 200) {\n\t\t self.processBody(Buffer.concat(data),type,options,url);\n\t\t callback(null);\n\t } else {\n\t \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t \t} else {\n\t\t \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\t \t\t\n\t \t}\n\t }\n\t \t});\n\t \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/help.js": {
"title": "$:/core/modules/commands/help.js",
"text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/import.js": {
"title": "$:/core/modules/commands/import.js",
"text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/init.js": {
"title": "$:/core/modules/commands/init.js",
"text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/listen.js": {
"title": "$:/core/modules/commands/listen.js",
"text": "/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: [],\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/load.js": {
"title": "$:/core/modules/commands/load.js",
"text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count && self.params[1] !== \"noerror\") {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/makelibrary.js": {
"title": "$:/core/modules/commands/makelibrary.js",
"text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = fs.readdirSync(folder);\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = fs.readdirSync(folder);\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.pluginsPath,$tw.config.pluginsEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.themesPath,$tw.config.themesEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,$tw.config.languagesEnvVar),collectPlugins);\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers})\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/output.js": {
"title": "$:/core/modules/commands/output.js",
"text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/password.js": {
"title": "$:/core/modules/commands/password.js",
"text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/render.js": {
"title": "$:/core/modules/commands/render.js",
"text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvarName = this.params[4],\n\t\tvarValue = this.params[5],\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\tvariables = {currentTiddler: title};\n\t\tif(varName) {\n\t\t\tvariables[varName] = varValue || \"\";\n\t\t}\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddler.js": {
"title": "$:/core/modules/commands/rendertiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddlers.js": {
"title": "$:/core/modules/commands/rendertiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/save.js": {
"title": "$:/core/modules/commands/save.js",
"text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savelibrarytiddlers.js": {
"title": "$:/core/modules/commands/savelibrarytiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\tdoesRequireReload = !!$tw.wiki.doesPluginInfoRequireReload(pluginTiddlers),\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{\n\t\t\ttext: undefined,\n\t\t\treadme: readmeContent,\n\t\t\t\"requires-reload\": doesRequireReload ? \"yes\" : \"no\",\n\t\t\ticon: iconContent\n\t\t}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddler.js": {
"title": "$:/core/modules/commands/savetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddlers.js": {
"title": "$:/core/modules/commands/savetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savewikifolder.js": {
"title": "$:/core/modules/commands/savewikifolder.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savewikifolder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the current wiki as a wiki folder\n\n--savewikifolder <wikifolderpath> [<filter>]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savewikifolder\",\n\tsynchronous: true\n};\n\nvar fs,path;\nif($tw.node) {\n\tfs = require(\"fs\");\n\tpath = require(\"path\");\n}\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing wiki folder path\";\n\t}\n\tvar wikifoldermaker = new WikiFolderMaker(this.params[0],this.params[1],this.commander);\n\treturn wikifoldermaker.save();\n};\n\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander) {\n\tthis.wikiFolderPath = wikiFolderPath;\n\tthis.wikiFilter = wikiFilter || \"[all[tiddlers]]\";\n\tthis.commander = commander;\n\tthis.wiki = commander.wiki;\n\tthis.savedPaths = []; // So that we can detect filename clashes\n}\n\nWikiFolderMaker.prototype.log = function(str) {\n\tif(this.commander.verbose) {\n\t\tconsole.log(str);\n\t}\n};\n\nWikiFolderMaker.prototype.tiddlersToIgnore = [\n\t\"$:/boot/boot.css\",\n\t\"$:/boot/boot.js\",\n\t\"$:/boot/bootprefix.js\",\n\t\"$:/core\",\n\t\"$:/library/sjcl.js\",\n\t\"$:/temp/info-plugin\"\n];\n\n/*\nReturns null if successful, or an error string if there was an error\n*/\nWikiFolderMaker.prototype.save = function() {\n\tvar self = this;\n\t// Check that the output directory doesn't exist\n\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\n\t\treturn \"The unpackwiki command requires that the output wiki folder be empty\";\n\t}\n\t// Get the tiddlers from the source wiki\n\tvar tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);\n\t// Initialise a new tiddlwiki.info file\n\tvar newWikiInfo = {};\n\t// Process each incoming tiddler in turn\n\t$tw.utils.each(tiddlerTitles,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tif(self.tiddlersToIgnore.indexOf(title) !== -1) {\n\t\t\t\t// Ignore the core plugin and the ephemeral info plugin\n\t\t\t\tself.log(\"Ignoring tiddler: \" + title);\n\t\t\t} else {\n\t\t\t\tvar type = tiddler.fields.type,\n\t\t\t\t\tpluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif(type === \"application/json\" && pluginType) {\n\t\t\t\t\t// Plugin tiddler\n\t\t\t\t\tvar libraryDetails = self.findPluginInLibrary(title);\n\t\t\t\t\tif(libraryDetails) {\n\t\t\t\t\t\t// A plugin from the core library\n\t\t\t\t\t\tself.log(\"Adding built-in plugin: \" + libraryDetails.name);\n\t\t\t\t\t\tnewWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type] || [];\n\t\t\t\t\t\t$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// A custom plugin\n\t\t\t\t\t\tself.log(\"Processing custom plugin: \" + title);\n\t\t\t\t\t\tself.saveCustomPlugin(tiddler);\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t// Ordinary tiddler\n\t\t\t\t\tself.saveTiddler(\"tiddlers\",tiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Save the tiddlywiki.info file\n\tthis.saveJSONFile(\"tiddlywiki.info\",newWikiInfo);\n\tself.log(\"Writing tiddlywiki.info: \" + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\n/*\nTest whether the specified tiddler is a plugin in the plugin library\n*/\nWikiFolderMaker.prototype.findPluginInLibrary = function(title) {\n\tvar parts = title.split(\"/\"),\n\t\tpluginPath, type, name;\n\tif(parts[0] === \"$:\") {\n\t\tif(parts[1] === \"languages\" && parts.length === 3) {\n\t\t\tpluginPath = \"languages\" + path.sep + parts[2];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2];\n\t\t} else if(parts[1] === \"plugins\" || parts[1] === \"themes\" && parts.length === 4) {\n\t\t\tpluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2] + \"/\" + parts[3];\n\t\t}\n\t}\n\tif(pluginPath && type && name) {\n\t\tpluginPath = path.resolve($tw.boot.bootPath,\"..\",pluginPath);\n\t\tif(fs.existsSync(pluginPath)) {\n\t\t\treturn {\n\t\t\t\tpluginPath: pluginPath,\n\t\t\t\ttype: type,\n\t\t\t\tname: name\n\t\t\t};\n\t\t}\n\t}\n\treturn false;\n};\n\nWikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {\n\tvar self = this,\n\t\tpluginTitle = pluginTiddler.fields.title,\n\t\ttitleParts = pluginTitle.split(\"/\"),\n\t\tdirectory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{\n\t\t\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields[\"plugin-type\"] + \"s\")\n\t\t}),\n\t\tpluginInfo = pluginTiddler.getFieldStrings({exclude: [\"text\",\"type\"]});\n\tthis.saveJSONFile(directory + path.sep + \"plugin.info\",pluginInfo);\n\tself.log(\"Writing \" + directory + path.sep + \"plugin.info: \" + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\n\tvar pluginTiddlers = JSON.parse(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\n\t$tw.utils.each(pluginTiddlers,function(tiddler) {\n\t\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\n\t});\n};\n\nWikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {\n\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\tdirectory: path.resolve(this.wikiFolderPath,directory),\n\t\twiki: this.wiki\n\t});\n\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n};\n\nWikiFolderMaker.prototype.saveJSONFile = function(filename,json) {\n\tthis.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));\n};\n\nWikiFolderMaker.prototype.saveTextFile = function(filename,data) {\n\tthis.saveFile(filename,\"utf8\",data);\n};\n\nWikiFolderMaker.prototype.saveFile = function(filename,encoding,data) {\n\tvar filepath = path.resolve(this.wikiFolderPath,filename);\n\t$tw.utils.createFileDirectories(filepath);\n\tfs.writeFileSync(filepath,data,encoding);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/server.js": {
"title": "$:/core/modules/commands/server.js",
"text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nDeprecated legacy command for serving tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: {\n\t\t\tport: this.params[0],\n\t\t\thost: this.params[6],\n\t\t\t\"root-tiddler\": this.params[1],\n\t\t\t\"root-render-type\": this.params[2],\n\t\t\t\"root-serve-type\": this.params[3],\n\t\t\tusername: this.params[4],\n\t\t\tpassword: this.params[5],\n\t\t\t\"path-prefix\": this.params[7],\n\t\t\t\"debug-level\": this.params[8]\n\t\t}\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/setfield.js": {
"title": "$:/core/modules/commands/setfield.js",
"text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/unpackplugin.js": {
"title": "$:/core/modules/commands/unpackplugin.js",
"text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/verbose.js": {
"title": "$:/core/modules/commands/verbose.js",
"text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n \" + $tw.boot.logMessages.join(\"\\n \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/version.js": {
"title": "$:/core/modules/commands/version.js",
"text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/config.js": {
"title": "$:/core/modules/config.js",
"text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
"type": "application/javascript",
"module-type": "config"
},
"$:/core/modules/deserializers.js": {
"title": "$:/core/modules/deserializers.js",
"text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/core/modules/editor/engines/framed.js": {
"title": "$:/core/modules/editor/engines/framed.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeNode.style[\"background-color\"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText(\"$:/palette\"),\"tiddler-editor-background\");\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.iframeNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"click\",handlerObject: this,handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\tthis.domNode.style[\"background-color\"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText(\"$:/palette\"),\"tiddler-editor-background\");\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a click\n*/\nFramedEngine.prototype.handleClickEvent = function(event) {\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/engines/simple.js": {
"title": "$:/core/modules/editor/engines/simple.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.domNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/factory.js": {
"title": "$:/core/modules/editor/factory.js",
"text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag) || \"input\";\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedAttributes.tabindex || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/operations/bitmap/clear.js": {
"title": "$:/core/modules/editor/operations/bitmap/clear.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/resize.js": {
"title": "$:/core/modules/editor/operations/bitmap/resize.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/rotate-left.js": {
"title": "$:/core/modules/editor/operations/bitmap/rotate-left.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to rotate the image left by 90 degrees\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"rotate-left\"] = function(event) {\n\t// Rotate the canvas left by 90 degrees\n\tthis.rotateCanvasLeft();\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/text/excise.js": {
"title": "$:/core/modules/editor/operations/text/excise.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ? [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/make-link.js": {
"title": "$:/core/modules/editor/operations/text/make-link.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/prefix-lines.js": {
"title": "$:/core/modules/editor/operations/text/prefix-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\tvar targetCount = parseInt(event.paramObject.count + \"\",10);\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,targetCount);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== targetCount) {\n\t\t\t// Apply the prefix\n\t\t\tline = prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-all.js": {
"title": "$:/core/modules/editor/operations/text/replace-all.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-selection.js": {
"title": "$:/core/modules/editor/operations/text/replace-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/save-selection.js": {
"title": "$:/core/modules/editor/operations/text/save-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to save the current selection in a specified tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"save-selection\"] = function(event,operation) {\n\tvar tiddler = event.paramObject.tiddler,\n\t\tfield = event.paramObject.field || \"text\";\n\tif(tiddler && field) {\n\t\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-lines.js": {
"title": "$:/core/modules/editor/operations/text/wrap-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-selection.js": {
"title": "$:/core/modules/editor/operations/text/wrap-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix\n\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\toperation.replacement = \"\";\n\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/filters/addprefix.js": {
"title": "$:/core/modules/filters/addprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/addsuffix.js": {
"title": "$:/core/modules/filters/addsuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/after.js": {
"title": "$:/core/modules/filters/after.js",
"text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/all/current.js": {
"title": "$:/core/modules/filters/all/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/missing.js": {
"title": "$:/core/modules/filters/all/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/orphans.js": {
"title": "$:/core/modules/filters/all/orphans.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/shadows.js": {
"title": "$:/core/modules/filters/all/shadows.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tags.js": {
"title": "$:/core/modules/filters/all/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tiddlers.js": {
"title": "$:/core/modules/filters/all/tiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all.js": {
"title": "$:/core/modules/filters/all.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/backlinks.js": {
"title": "$:/core/modules/filters/backlinks.js",
"text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/before.js": {
"title": "$:/core/modules/filters/before.js",
"text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/commands.js": {
"title": "$:/core/modules/filters/commands.js",
"text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/compare.js": {
"title": "$:/core/modules/filters/compare.js",
"text": "/*\\\ntitle: $:/core/modules/filters/compare.js\ntype: application/javascript\nmodule-type: filteroperator\n\nGeneral purpose comparison operator\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.compare = function(source,operator,options) {\n\tvar suffixes = operator.suffixes || [],\n\t\ttype = (suffixes[0] || [])[0],\n\t\tmode = (suffixes[1] || [])[0],\n\t\ttypeFn = types[type] || types.number,\n\t\tmodeFn = modes[mode] || modes.eq,\n\t\tinvert = operator.prefix === \"!\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tif(modeFn(typeFn(title,operator.operand)) !== invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nvar types = {\n\t\"number\": function(a,b) {\n\t\treturn compare($tw.utils.parseNumber(a),$tw.utils.parseNumber(b));\n\t},\n\t\"integer\": function(a,b) {\n\t\treturn compare($tw.utils.parseInt(a),$tw.utils.parseInt(b));\n\t},\n\t\"string\": function(a,b) {\n\t\treturn compare(\"\" + a,\"\" +b);\n\t},\n\t\"date\": function(a,b) {\n\t\tvar dateA = $tw.utils.parseDate(a),\n\t\t\tdateB = $tw.utils.parseDate(b);\n\t\tif(!isFinite(dateA)) {\n\t\t\tdateA = new Date(0);\n\t\t}\n\t\tif(!isFinite(dateB)) {\n\t\t\tdateB = new Date(0);\n\t\t}\n\t\treturn compare(dateA,dateB);\n\t},\n\t\"version\": function(a,b) {\n\t\treturn $tw.utils.compareVersions(a,b);\n\t}\n};\n\nfunction compare(a,b) {\n\tif(a > b) {\n\t\treturn +1;\n\t} else if(a < b) {\n\t\treturn -1;\n\t} else {\n\t\treturn 0;\n\t}\n};\n\nvar modes = {\n\t\"eq\": function(value) {return value === 0;},\n\t\"ne\": function(value) {return value !== 0;},\n\t\"gteq\": function(value) {return value >= 0;},\n\t\"gt\": function(value) {return value > 0;},\n\t\"lteq\": function(value) {return value <= 0;},\n\t\"lt\": function(value) {return value < 0;}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/contains.js": {
"title": "$:/core/modules/filters/contains.js",
"text": "/*\\\ntitle: $:/core/modules/filters/contains.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for finding values in array fields\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.contains = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"list\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/count.js": {
"title": "$:/core/modules/filters/count.js",
"text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/days.js": {
"title": "$:/core/modules/filters/days.js",
"text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/each.js": {
"title": "$:/core/modules/filters/each.js",
"text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\tvalue,values = {},\n\tfield = operator.operand || \"title\";\n\tif(operator.suffix === \"value\" && field === \"title\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(values,title)) {\n\t\t\t\tvalues[title] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else if(operator.suffix !== \"list-item\") {\n\t\tif(field === \"title\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !$tw.utils.hop(values,title)) {\n\t\t\t\t\tvalues[title] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvalue = tiddler.getFieldString(field);\n\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/eachday.js": {
"title": "$:/core/modules/filters/eachday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editiondescription.js": {
"title": "$:/core/modules/filters/editiondescription.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editions.js": {
"title": "$:/core/modules/filters/editions.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\tresults.push(name);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/else.js": {
"title": "$:/core/modules/filters/else.js",
"text": "/*\\\ntitle: $:/core/modules/filters/else.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing an empty input list with a constant, passing a non-empty input list straight through\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.else = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tif(results.length === 0) {\n\t\treturn [operator.operand];\n\t} else {\n\t\treturn results;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/decodeuricomponent.js": {
"title": "$:/core/modules/filters/decodeuricomponent.js",
"text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURIComponent(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURI(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\nexports.escapecss = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t// escape any character with a special meaning in CSS using CSS.escape()\n\t\tresults.push(CSS.escape(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/enlist.js": {
"title": "$:/core/modules/filters/enlist.js",
"text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar allowDuplicates = false;\n\tswitch(operator.suffix) {\n\t\tcase \"raw\":\n\t\t\tallowDuplicates = true;\n\t\t\tbreak;\n\t\tcase \"dedupe\":\n\t\t\tallowDuplicates = false;\n\t\t\tbreak;\n\t}\n\tvar list = $tw.utils.parseStringArray(operator.operand,allowDuplicates);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/field.js": {
"title": "$:/core/modules/filters/field.js",
"text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],indexedResults,\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.byField && operator.operand) {\n\t\t\t\tindexedResults = source.byField(fieldname,operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults\n\t\t\t\t}\n\t\t\t}\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/fields.js": {
"title": "$:/core/modules/filters/fields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName,\n\t\tsuffixes = (operator.suffixes || [])[0] || [],\n\t\toperand = $tw.utils.parseStringArray(operator.operand);\n\t\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(suffixes.indexOf(\"include\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? $tw.utils.pushTop(results,fieldName) : \"\";\n\t\t\t\t}\n\t\t\t} else if (suffixes.indexOf(\"exclude\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? \"\" : $tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else if\n\t\t\telse {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else\n\t\t} // if (tiddler)\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/get.js": {
"title": "$:/core/modules/filters/get.js",
"text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getindex.js": {
"title": "$:/core/modules/filters/getindex.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getvariable.js": {
"title": "$:/core/modules/filters/getvariable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getvariable.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing input values by the value of the variable with the same name, or blank if the variable is missing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getvariable = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.widget.getVariable(title) || \"\");\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/has.js": {
"title": "$:/core/modules/filters/has.js",
"text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field or index\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse if(operator.suffix === \"index\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop($tw.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop($tw.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand] === \"\")) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && !(tiddler.fields[operator.operand] === \"\" || tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/haschanged.js": {
"title": "$:/core/modules/filters/haschanged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/indexes.js": {
"title": "$:/core/modules/filters/indexes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/insertbefore.js": {
"title": "$:/core/modules/filters/insertbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/is/binary.js": {
"title": "$:/core/modules/filters/is/binary.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/binary.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[binary]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.binary = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/blank.js": {
"title": "$:/core/modules/filters/is/blank.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/blank.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[blank]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.blank = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/current.js": {
"title": "$:/core/modules/filters/is/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/image.js": {
"title": "$:/core/modules/filters/is/image.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/missing.js": {
"title": "$:/core/modules/filters/is/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/orphan.js": {
"title": "$:/core/modules/filters/is/orphan.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/shadow.js": {
"title": "$:/core/modules/filters/is/shadow.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/system.js": {
"title": "$:/core/modules/filters/is/system.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tag.js": {
"title": "$:/core/modules/filters/is/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tiddler.js": {
"title": "$:/core/modules/filters/is/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/variable.js": {
"title": "$:/core/modules/filters/is/variable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/variable.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[variable]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variable = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!(title in options.widget.variables)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title in options.widget.variables) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is.js": {
"title": "$:/core/modules/filters/is.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/limit.js": {
"title": "$:/core/modules/filters/limit.js",
"text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/links.js": {
"title": "$:/core/modules/filters/links.js",
"text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/list.js": {
"title": "$:/core/modules/filters/list.js",
"text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listed.js": {
"title": "$:/core/modules/filters/listed.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listops.js": {
"title": "$:/core/modules/filters/listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/lookup.js": {
"title": "$:/core/modules/filters/lookup.js",
"text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || options.wiki.getTiddlerText(operator.operand + operator.suffix));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/match.js": {
"title": "$:/core/modules/filters/match.js",
"text": "/*\\\ntitle: $:/core/modules/filters/match.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title matches a string\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.match = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = (operator.suffixes || [])[0] || [];\n\tif(suffixes.indexOf(\"caseinsensitive\") !== -1) {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() !== (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() === (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title === operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/math.js": {
"title": "$:/core/modules/filters/math.js",
"text": "/*\\\ntitle: $:/core/modules/filters/math.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\n\n* \"\" converts to 0\n* \"12kk\" converts to 12\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.negate = makeNumericBinaryOperator(\n\tfunction(a) {return -a}\n);\n\nexports.abs = makeNumericBinaryOperator(\n\tfunction(a) {return Math.abs(a)}\n);\n\nexports.ceil = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(a)}\n);\n\nexports.floor = makeNumericBinaryOperator(\n\tfunction(a) {return Math.floor(a)}\n);\n\nexports.round = makeNumericBinaryOperator(\n\tfunction(a) {return Math.round(a)}\n);\n\nexports.trunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.trunc(a)}\n);\n\nexports.untrunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)}\n);\n\nexports.sign = makeNumericBinaryOperator(\n\tfunction(a) {return Math.sign(a)}\n);\n\nexports.add = makeNumericBinaryOperator(\n\tfunction(a,b) {return a + b;}\n);\n\nexports.subtract = makeNumericBinaryOperator(\n\tfunction(a,b) {return a - b;}\n);\n\nexports.multiply = makeNumericBinaryOperator(\n\tfunction(a,b) {return a * b;}\n);\n\nexports.divide = makeNumericBinaryOperator(\n\tfunction(a,b) {return a / b;}\n);\n\nexports.remainder = makeNumericBinaryOperator(\n\tfunction(a,b) {return a % b;}\n);\n\nexports.max = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.max(a,b);}\n);\n\nexports.min = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.min(a,b);}\n);\n\nexports.fixed = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toFixed.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.precision = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toPrecision.call(a,Math.min(Math.max(b,1),100));}\n);\n\nexports.exponential = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toExponential.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.sum = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0 // Initial value\n);\n\nexports.product = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator * value},\n\t1 // Initial value\n);\n\nexports.maxall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.max(accumulator,value)},\n\t-Infinity // Initial value\n);\n\nexports.minall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.min(accumulator,value)},\n\tInfinity // Initial value\n);\n\nfunction makeNumericBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [],\n\t\t\tnumOperand = $tw.utils.parseNumber(operator.operand);\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push($tw.utils.stringifyNumber(fnCalc($tw.utils.parseNumber(title),numOperand)));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeNumericReducingOperator(fnCalc,initialValue) {\n\tinitialValue = initialValue || 0;\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [$tw.utils.stringifyNumber(result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,$tw.utils.parseNumber(currentValue));\n\t\t},initialValue))];\n\t};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/minlength.js": {
"title": "$:/core/modules/filters/minlength.js",
"text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/modules.js": {
"title": "$:/core/modules/filters/modules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/moduletypes.js": {
"title": "$:/core/modules/filters/moduletypes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/next.js": {
"title": "$:/core/modules/filters/next.js",
"text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/plugintiddlers.js": {
"title": "$:/core/modules/filters/plugintiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/prefix.js": {
"title": "$:/core/modules/filters/prefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/previous.js": {
"title": "$:/core/modules/filters/previous.js",
"text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/range.js": {
"title": "$:/core/modules/filters/range.js",
"text": "/*\\\ntitle: $:/core/modules/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g),\n\t\tbeg, end, inc, i, fixed = 0;\n\tfor (i=0; i<parts.length; i++) {\n\t\t// Validate real number\n\t\tif(!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i])) {\n\t\t\treturn [\"range: bad number \\\"\" + parts[i] + \"\\\"\"];\n\t\t}\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif(frac) {\n\t\t\tfixed = Math.max(fixed,frac[0].length-1);\n\t\t}\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\tswitch(parts.length) {\n\t\tcase 1:\n\t\t\tend = parts[0];\n\t\t\tif (end >= 1) {\n\t\t\t\tbeg = 1;\n\t\t\t}\n\t\t\telse if (end <= -1) {\n\t\t\t\tbeg = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\tif(inc === 0) {\n\t\treturn [\"range: increment 0 causes infinite loop\"];\n\t}\n\t// May need to count backwards\n\tvar direction = ((end < beg) ? -1 : 1);\n\tinc *= direction;\n\t// Estimate number of resulting elements\n\tif((end - beg) / inc > 10000) {\n\t\treturn [\"range: too many steps (over 10K)\"];\n\t}\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1,fixed);\n\tvar safety = 10010;\n\t// Enumerate the range\n\tif (end<beg) {\n\t\tfor(i=beg; i>end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor(i=beg; i<end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif(safety<0) {\n\t\treturn [\"range: unexpectedly large output\"];\n\t}\n\t// Reverse?\n\tif(operator.prefix === \"!\") {\n\t\tresults.reverse();\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/regexp.js": {
"title": "$:/core/modules/filters/regexp.js",
"text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removeprefix.js": {
"title": "$:/core/modules/filters/removeprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removesuffix.js": {
"title": "$:/core/modules/filters/removesuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title && title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sameday.js": {
"title": "$:/core/modules/filters/sameday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/search.js": {
"title": "$:/core/modules/filters/search.js",
"text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffixes) {\n\t\tvar hasFlag = function(flag) {\n\t\t\t\treturn (operator.suffixes[1] || []).indexOf(flag) !== -1;\n\t\t\t},\n\t\t\texcludeFields = false,\n\t\t\tfieldList = operator.suffixes[0] || [],\n\t\t\tfirstField = fieldList[0] || \"\", \n\t\t\tfirstChar = firstField.charAt(0),\n\t\t\tfields;\n\t\tif(firstChar === \"-\") {\n\t\t\tfields = [firstField.slice(1)].concat(fieldList.slice(1));\n\t\t\texcludeFields = true;\n\t\t} else if(fieldList[0] === \"*\"){\n\t\t\tfields = [];\n\t\t\texcludeFields = true;\n\t\t} else {\n\t\t\tfields = fieldList.slice(0);\n\t\t}\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: fields,\n\t\t\texcludeField: excludeFields,\n\t\t\tcaseSensitive: hasFlag(\"casesensitive\"),\n\t\t\tliteral: hasFlag(\"literal\"),\n\t\t\twhitespace: hasFlag(\"whitespace\"),\n\t\t\tanchored: hasFlag(\"anchored\"),\n\t\t\tregexp: hasFlag(\"regexp\"),\n\t\t\twords: hasFlag(\"words\")\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/shadowsource.js": {
"title": "$:/core/modules/filters/shadowsource.js",
"text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sort.js": {
"title": "$:/core/modules/filters/sort.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortan = function(source, operator, options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results, operator.operand || \"title\", operator.prefix === \"!\",false,false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/splitbefore.js": {
"title": "$:/core/modules/filters/splitbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/storyviews.js": {
"title": "$:/core/modules/filters/storyviews.js",
"text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/strings.js": {
"title": "$:/core/modules/filters/strings.js",
"text": "/*\\\ntitle: $:/core/modules/filters/strings.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.length = makeStringBinaryOperator(\n\tfunction(a) {return [\"\" + (\"\" + a).length];}\n);\n\nexports.uppercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toUpperCase()];}\n);\n\nexports.lowercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toLowerCase()];}\n);\n\nexports.sentencecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toSentenceCase(a)];}\n);\n\nexports.titlecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toTitleCase(a)];}\n);\n\nexports.trim = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.trim(a)];}\n);\n\nexports.split = makeStringBinaryOperator(\n\tfunction(a,b) {return (\"\" + a).split(b);}\n);\n\nexports.join = makeStringReducingOperator(\n\tfunction(accumulator,value,operand) {\n\t\tif(accumulator === null) {\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn accumulator + operand + value;\n\t\t}\n\t},null\n);\n\nfunction makeStringBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \"\"));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeStringReducingOperator(fnCalc,initialValue) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,currentValue,operator.operand || \"\");\n\t\t},initialValue) || \"\"];\n\t};\n}\n\nexports.splitregexp = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\tflags = (suffix.indexOf(\"m\") !== -1 ? \"m\" : \"\") + (suffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tregExp;\n\ttry {\n\t\tregExp = new RegExp(operator.operand || \"\",flags);\t\t\n\t} catch(ex) {\n\t\treturn [\"RegExp error: \" + ex];\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,title.split(regExp));\n\t});\t\t\n\treturn result;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subfilter.js": {
"title": "$:/core/modules/filters/subfilter.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subfilter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand evaluated as a filter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subfilter = function(source,operator,options) {\n\tvar list = options.wiki.filterTiddlers(operator.operand,options.widget,source);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subtiddlerfields.js": {
"title": "$:/core/modules/filters/subtiddlerfields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subtiddlerfields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar subtiddler = options.wiki.getSubTiddler(operator.operand,title);\n\t\tif(subtiddler) {\n\t\t\tfor(var fieldName in subtiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/suffix.js": {
"title": "$:/core/modules/filters/suffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tag.js": {
"title": "$:/core/modules/filters/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [],indexedResults;\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tvar tiddlers;\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tif(source.byTag) {\n\t\t\t\tindexedResults = source.byTag(operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\t\tsource(function(tiddler,title) {\n\t\t\t\t\tif(tiddlers.indexOf(title) !== -1) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t\t}\n\t\t}\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tagging.js": {
"title": "$:/core/modules/filters/tagging.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tags.js": {
"title": "$:/core/modules/filters/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/then.js": {
"title": "$:/core/modules/filters/then.js",
"text": "/*\\\ntitle: $:/core/modules/filters/then.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing any titles with a constant\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.then = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/title.js": {
"title": "$:/core/modules/filters/title.js",
"text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/untagged.js": {
"title": "$:/core/modules/filters/untagged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/variables.js": {
"title": "$:/core/modules/filters/variables.js",
"text": "/*\\\ntitle: $:/core/modules/filters/variables.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the active variables\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variables = function(source,operator,options) {\n\tvar names = [];\n\tfor(var variable in options.widget.variables) {\n\t\tnames.push(variable);\n\t}\n\treturn names.sort();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/wikiparserrules.js": {
"title": "$:/core/modules/filters/wikiparserrules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/x-listops.js": {
"title": "$:/core/modules/filters/x-listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n /*jslint node: true, browser: true */\n /*global $tw: false */\n \"use strict\";\n\n /*\n Fetch titles from the current list\n */\n var prepare_results = function (source) {\n var results = [];\n source(function (tiddler, title) {\n results.push(title);\n });\n return results;\n };\n\n /*\n Moves a number of items from the tail of the current list before the item named in the operand\n */\n exports.putbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1);\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list after the item named in the operand\n */\n exports.putafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1);\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Replaces the item named in the operand with a number of items from the tail of the current list\n */\n exports.replace = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1);\n return (index === -1) ?\n results.slice(0, -count) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list to the head of the list\n */\n exports.putfirst = function (source, operator) {\n var results = prepare_results(source),\n count = $tw.utils.getInt(operator.suffix,1);\n return results.slice(-count).concat(results.slice(0, -count));\n };\n\n /*\n Moves a number of items from the head of the current list to the tail of the list\n */\n exports.putlast = function (source, operator) {\n var results = prepare_results(source),\n count = $tw.utils.getInt(operator.suffix,1);\n return results.slice(count).concat(results.slice(0, count));\n };\n\n /*\n Moves the item named in the operand a number of places forward or backward in the list\n */\n exports.move = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1),\n marker = results.splice(index, 1),\n offset = (index + count) > 0 ? index + count : 0;\n return results.slice(0, offset).concat(marker).concat(results.slice(offset));\n };\n\n /*\n Returns the items from the current list that are after the item named in the operand\n */\n exports.allafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index === -1) ? [] :\n (operator.suffix) ? results.slice(index) :\n results.slice(index + 1);\n };\n\n /*\n Returns the items from the current list that are before the item named in the operand\n */\n exports.allbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index === -1) ? [] :\n (operator.suffix) ? results.slice(0, index + 1) :\n results.slice(0, index);\n };\n\n /*\n Appends the items listed in the operand array to the tail of the current list\n */\n exports.append = function (source, operator) {\n var append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || append.length;\n return (append.length === 0) ? results :\n (operator.prefix) ? results.concat(append.slice(-count)) :\n results.concat(append.slice(0, count));\n };\n\n /*\n Prepends the items listed in the operand array to the head of the current list\n */\n exports.prepend = function (source, operator) {\n var prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = $tw.utils.getInt(operator.suffix,prepend.length);\n return (prepend.length === 0) ? results :\n (operator.prefix) ? prepend.slice(-count).concat(results) :\n prepend.slice(0, count).concat(results);\n };\n\n /*\n Returns all items from the current list except the items listed in the operand array\n */\n exports.remove = function (source, operator) {\n var array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || array.length,\n p,\n len,\n index;\n len = array.length - 1;\n for (p = 0; p < count; ++p) {\n if (operator.prefix) {\n index = results.indexOf(array[len - p]);\n } else {\n index = results.indexOf(array[p]);\n }\n if (index !== -1) {\n results.splice(index, 1);\n }\n }\n return results;\n };\n\n /*\n Returns all items from the current list sorted in the order of the items in the operand array\n */\n exports.sortby = function (source, operator) {\n var results = prepare_results(source);\n if (!results || results.length < 2) {\n return results;\n }\n var lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n results.sort(function (a, b) {\n return lookup.indexOf(a) - lookup.indexOf(b);\n });\n return results;\n };\n\n /*\n Removes all duplicate items from the current list\n */\n exports.unique = function (source, operator) {\n var results = prepare_results(source);\n var set = results.reduce(function (a, b) {\n if (a.indexOf(b) < 0) {\n a.push(b);\n }\n return a;\n }, []);\n return set;\n };\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters.js": {
"title": "$:/core/modules/filters.js",
"text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\t// The raw suffix for older filters\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t\t// The processed suffix for newer filters\n\t\t\toperator.suffixes = [];\n\t\t\t$tw.utils.each(operator.suffix.split(\":\"),function(subsuffix) {\n\t\t\t\toperator.suffixes.push([]);\n\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\tif(entry) {\n\t\t\t\t\t\toperator.suffixes[operator.suffixes.length - 1].push(entry); \n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operand = operator.operand,\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tsuffixes: operator.suffixes,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"=\": // The results of the operation are pushed into the result without deduplication\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\tArray.prototype.push.apply(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"~\": // This operation is unioned into the result only if the main result so far is empty\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\tif(results.length === 0) {\n\t\t\t\t\t\t\t// Main result so far is empty\n\t\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter: \" + filterString,function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/indexers/backlinks-indexer.js": {
"title": "$:/core/modules/indexers/backlinks-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/backlinks-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers' backlinks\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\n\nfunction BacklinksIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nBacklinksIndexer.prototype.init = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype.rebuild = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype._getLinks = function(tiddler) {\n\tvar parser = this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {});\n\tif(parser) {\n\t\treturn this.wiki.extractLinks(parser.tree);\n\t}\n\treturn [];\n}\n\nBacklinksIndexer.prototype.update = function(updateDescriptor) {\n\tif(!this.index) {\n\t\treturn;\n\t}\n\tvar newLinks = [],\n\t oldLinks = [],\n\t self = this;\n\tif(updateDescriptor.old.exists) {\n\t\toldLinks = this._getLinks(updateDescriptor.old.tiddler);\n\t}\n\tif(updateDescriptor.new.exists) {\n\t\tnewLinks = this._getLinks(updateDescriptor.new.tiddler);\n\t}\n\n\t$tw.utils.each(oldLinks,function(link) {\n\t\tif(self.index[link]) {\n\t\t\tdelete self.index[link][updateDescriptor.old.tiddler.fields.title];\n\t\t}\n\t});\n\t$tw.utils.each(newLinks,function(link) {\n\t\tif(!self.index[link]) {\n\t\t\tself.index[link] = Object.create(null);\n\t\t}\n\t\tself.index[link][updateDescriptor.new.tiddler.fields.title] = true;\n\t});\n}\n\nBacklinksIndexer.prototype.lookup = function(title) {\n\tif(!this.index) {\n\t\tthis.index = Object.create(null);\n\t\tvar self = this;\n\t\tthis.wiki.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self._getLinks(tiddler);\n\t\t\t$tw.utils.each(links, function(link) {\n\t\t\t\tif(!self.index[link]) {\n\t\t\t\t\tself.index[link] = Object.create(null);\n\t\t\t\t}\n\t\t\t\tself.index[link][title] = true;\n\t\t\t});\n\t\t});\n\t}\n\tif(this.index[title]) {\n\t\treturn Object.keys(this.index[title]);\n\t} else {\n\t\treturn [];\n\t}\n}\n\nexports.BacklinksIndexer = BacklinksIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/field-indexer.js": {
"title": "$:/core/modules/indexers/field-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/field-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nvar DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH = 128;\n\nfunction FieldIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nFieldIndexer.prototype.init = function() {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;\n\tthis.addIndexMethods();\n}\n\n// Provided for testing\nFieldIndexer.prototype.setMaxIndexedValueLength = function(length) {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = length;\n};\n\nFieldIndexer.prototype.addIndexMethods = function() {\n\tvar self = this;\n\tthis.wiki.each.byField = function(name,value) {\n\t\tvar titles = self.wiki.allTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachShadow.byField = function(name,value) {\n\t\tvar titles = self.wiki.allShadowTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachTiddlerPlusShadows.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n\tthis.wiki.eachShadowPlusTiddlers.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n};\n\n/*\nTear down and then rebuild the index as if all tiddlers have changed\n*/\nFieldIndexer.prototype.rebuild = function() {\n\t// Invalidate the index so that it will be rebuilt when it is next used\n\tthis.index = null;\n};\n\n/*\nBuild the index for a particular field\n*/\nFieldIndexer.prototype.buildIndexForField = function(name) {\n\tvar self = this;\n\t// Hashmap by field name of hashmap by field value of array of tiddler titles\n\tthis.index = this.index || Object.create(null);\n\tthis.index[name] = Object.create(null);\n\tvar baseIndex = this.index[name];\n\t// Update the index for each tiddler\n\tthis.wiki.eachTiddlerPlusShadows(function(tiddler,title) {\n\t\tif(name in tiddler.fields) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t// Skip any values above the maximum length\n\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\tbaseIndex[value] = baseIndex[value] || [];\n\t\t\t\tbaseIndex[value].push(title);\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nUpdate the index in the light of a tiddler value changing; note that the title must be identical. (Renames are handled as a separate delete and create)\nupdateDescriptor: {old: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>},new: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>}}\n*/\nFieldIndexer.prototype.update = function(updateDescriptor) {\n\tvar self = this;\n\t// Don't do anything if the index hasn't been built yet\n\tif(this.index === null) {\n\t\treturn;\n\t}\n\t// Remove the old tiddler from the index\n\tif(updateDescriptor.old.tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor.old.tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor.old.tiddler.getFieldString(name),\n\t\t\t\t\ttiddlerList = indexEntry[value];\n\t\t\t\tif(tiddlerList) {\n\t\t\t\t\tvar index = tiddlerList.indexOf(updateDescriptor.old.tiddler.fields.title);\n\t\t\t\t\tif(index !== -1) {\n\t\t\t\t\t\ttiddlerList.splice(index,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// Add the new tiddler to the index\n\tif(updateDescriptor[\"new\"].tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor[\"new\"].tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor[\"new\"].tiddler.getFieldString(name);\n\t\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\t\tindexEntry[value] = indexEntry[value] || [];\n\t\t\t\t\tindexEntry[value].push(updateDescriptor[\"new\"].tiddler.fields.title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n// Lookup the given field returning a list of tiddler titles\nFieldIndexer.prototype.lookup = function(name,value) {\n\t// Fail the lookup if the value is too long\n\tif(value.length >= this.maxIndexedValueLength) {\n\t\treturn null;\n\t}\n\t// Update the index if it has yet to be built\n\tif(this.index === null || !this.index[name]) {\n\t\tthis.buildIndexForField(name);\n\t}\n\treturn this.index[name][value] || [];\n};\n\nexports.FieldIndexer = FieldIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/tag-indexer.js": {
"title": "$:/core/modules/indexers/tag-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/tag-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nfunction TagIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nTagIndexer.prototype.init = function() {\n\tthis.subIndexers = [\n\t\tnew TagSubIndexer(this,\"each\"),\n\t\tnew TagSubIndexer(this,\"eachShadow\"),\n\t\tnew TagSubIndexer(this,\"eachTiddlerPlusShadows\"),\n\t\tnew TagSubIndexer(this,\"eachShadowPlusTiddlers\")\n\t];\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.addIndexMethod();\n\t});\n};\n\nTagIndexer.prototype.rebuild = function() {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.rebuild();\n\t});\n};\n\nTagIndexer.prototype.update = function(updateDescriptor) {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.update(updateDescriptor);\n\t});\n};\n\nfunction TagSubIndexer(indexer,iteratorMethod) {\n\tthis.indexer = indexer;\n\tthis.iteratorMethod = iteratorMethod;\n\tthis.index = null; // Hashmap of tag title to {isSorted: bool, titles: [array]} or null if not yet initialised\n}\n\nTagSubIndexer.prototype.addIndexMethod = function() {\n\tvar self = this;\n\tthis.indexer.wiki[this.iteratorMethod].byTag = function(tag) {\n\t\treturn self.lookup(tag).slice(0);\n\t};\n};\n\nTagSubIndexer.prototype.rebuild = function() {\n\tvar self = this;\n\t// Hashmap by tag of array of {isSorted:, titles:[]}\n\tthis.index = Object.create(null);\n\t// Add all the tags\n\tthis.indexer.wiki[this.iteratorMethod](function(tiddler,title) {\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\tif(!self.index[tag]) {\n\t\t\t\tself.index[tag] = {isSorted: false, titles: [title]};\n\t\t\t} else {\n\t\t\t\tself.index[tag].titles.push(title);\n\t\t\t}\n\t\t});\t\t\n\t});\n};\n\nTagSubIndexer.prototype.update = function(updateDescriptor) {\n\tthis.index = null;\n};\n\nTagSubIndexer.prototype.lookup = function(tag) {\n\t// Update the index if it has yet to be built\n\tif(this.index === null) {\n\t\tthis.rebuild();\n\t}\n\tvar indexRecord = this.index[tag];\n\tif(indexRecord) {\n\t\tif(!indexRecord.isSorted) {\n\t\t\tif(this.indexer.wiki.sortByList) {\n\t\t\t\tindexRecord.titles = this.indexer.wiki.sortByList(indexRecord.titles,tag);\n\t\t\t}\t\t\t\n\t\t\tindexRecord.isSorted = true;\n\t\t}\n\t\treturn indexRecord.titles;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n\nexports.TagIndexer = TagIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/info/platform.js": {
"title": "$:/core/modules/info/platform.js",
"text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\tif($tw.browser) {\n\t\t// Document location\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\t\t\t\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t\t// Screen size\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/width\", text: window.screen.width.toString()});\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/height\", text: window.screen.height.toString()});\n\t\t// Language\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/language\", text: navigator.language || \"\"});\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "info"
},
"$:/core/modules/keyboard.js": {
"title": "$:/core/modules/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n\tthis.shortcutKeysList = [], // Stores the shortcut-key descriptors\n\tthis.shortcutActionList = [], // Stores the corresponding action strings\n\tthis.shortcutParsedList = []; // Stores the parsed key descriptors\n\tthis.lookupNames = [\"shortcuts\"];\n\tthis.lookupNames.push($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\")\n\tthis.lookupNames.push($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\tthis.lookupNames.push($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\tthis.updateShortcutLists(this.getShortcutTiddlerList());\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.handleShortcutChanges(changes);\n\t});\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\n\t\t\t\t\tlookupName(platformDescriptor);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.getShortcutTiddlerList = function() {\n\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/KeyboardShortcut\");\n};\n\nKeyboardManager.prototype.updateShortcutLists = function(tiddlerList) {\n\tthis.shortcutTiddlers = tiddlerList;\n\tfor(var i=0; i<tiddlerList.length; i++) {\n\t\tvar title = tiddlerList[i],\n\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields;\n\t\tthis.shortcutKeysList[i] = tiddlerFields.key !== undefined ? tiddlerFields.key : undefined;\n\t\tthis.shortcutActionList[i] = tiddlerFields.text;\n\t\tthis.shortcutParsedList[i] = this.shortcutKeysList[i] !== undefined ? this.parseKeyDescriptors(this.shortcutKeysList[i]) : undefined;\n\t}\n};\n\nKeyboardManager.prototype.handleKeydownEvent = function(event) {\n\tvar key, action;\n\tfor(var i=0; i<this.shortcutTiddlers.length; i++) {\n\t\tif(this.shortcutParsedList[i] !== undefined && this.checkKeyDescriptors(event,this.shortcutParsedList[i])) {\n\t\t\tkey = this.shortcutParsedList[i];\n\t\t\taction = this.shortcutActionList[i];\n\t\t}\n\t}\n\tif(key !== undefined) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.detectNewShortcuts = function(changedTiddlers) {\n\tvar shortcutConfigTiddlers = [],\n\t\thandled = false;\n\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\n\t\tvar descriptorString = \"$:/config/\" + platformDescriptor + \"/\";\n\t\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\n\t\t\tvar configString = configTiddler.substr(0, configTiddler.lastIndexOf(\"/\") + 1);\n\t\t\tif(configString === descriptorString) {\n\t\t\t\tshortcutConfigTiddlers.push(configTiddler);\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t});\n\t});\n\tif(handled) {\n\t\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nKeyboardManager.prototype.handleShortcutChanges = function(changedTiddlers) {\n\tvar newList = this.getShortcutTiddlerList();\n\tvar hasChanged = $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\n\t\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\n\t\t(this.detectNewShortcuts(changedTiddlers))\n\t);\n\t// Re-cache shortcuts if something changed\n\tif(hasChanged) {\n\t\tthis.updateShortcutLists(newList);\n\t}\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/language.js": {
"title": "$:/core/modules/language.js",
"text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/macros/changecount.js": {
"title": "$:/core/modules/macros/changecount.js",
"text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/contrastcolour.js": {
"title": "$:/core/modules/macros/contrastcolour.js",
"text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/csvtiddlers.js": {
"title": "$:/core/modules/macros/csvtiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/displayshortcuts.js": {
"title": "$:/core/modules/macros/displayshortcuts.js",
"text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddler.js": {
"title": "$:/core/modules/macros/jsontiddler.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddlers.js": {
"title": "$:/core/modules/macros/jsontiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"spaces\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,spaces) {\n\treturn this.wiki.getTiddlersAsJson(filter,$tw.utils.parseInt(spaces));\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/makedatauri.js": {
"title": "$:/core/modules/macros/makedatauri.js",
"text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"},\n\t{name: \"_canonical_uri\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type,_canonical_uri) {\n\treturn $tw.utils.makeDataUri(text,type,_canonical_uri);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/now.js": {
"title": "$:/core/modules/macros/now.js",
"text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/qualify.js": {
"title": "$:/core/modules/macros/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/resolvepath.js": {
"title": "$:/core/modules/macros/resolvepath.js",
"text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/unusedtitle.js": {
"title": "$:/core/modules/macros/unusedtitle.js",
"text": "/*\\\ntitle: $:/core/modules/macros/unusedtitle.js\ntype: application/javascript\nmodule-type: macro\nMacro to return a new title that is unused in the wiki. It can be given a name as a base.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"unusedtitle\";\n\nexports.params = [\n\t{name: \"baseName\"},\n\t{name: \"options\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(baseName, options) {\n\tif(!baseName) {\n\t\tbaseName = $tw.language.getString(\"DefaultNewTiddlerTitle\");\n\t}\n\treturn this.wiki.generateNewTitle(baseName, options);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/version.js": {
"title": "$:/core/modules/macros/version.js",
"text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/parsers/audioparser.js": {
"title": "$:/core/modules/parsers/audioparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/binaryparser.js": {
"title": "$:/core/modules/parsers/binaryparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe binary parser parses a binary tiddler into a warning message and download link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar BinaryParser = function(type,text,options) {\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on binary tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!title\"}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to external or internal data URI\n\tif(options._canonical_uri) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: options._canonical_uri\n\t\t};\n\t} else if(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/octet-stream\"] = BinaryParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/csvparser.js": {
"title": "$:/core/modules/parsers/csvparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/htmlparser.js": {
"title": "$:/core/modules/parsers/htmlparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/imageparser.js": {
"title": "$:/core/modules/parsers/imageparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t};\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/webp\"] = ImageParser;\nexports[\"image/heic\"] = ImageParser;\nexports[\"image/heif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/utils/parseutils.js": {
"title": "$:/core/modules/utils/parseutils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/parsers/pdfparser.js": {
"title": "$:/core/modules/parsers/pdfparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/textparser.js": {
"title": "$:/core/modules/parsers/textparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/videoparser.js": {
"title": "$:/core/modules/parsers/videoparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/ogg\"] = VideoParser;\nexports[\"video/webm\"] = VideoParser;\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/dash.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"–\" : \"—\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/entity.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: ©\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/extlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/heading.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/html.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/html.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.slice(1).indexOf(\"$\") !== -1) {\n\t\treturn null;\n\t}\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/image.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/image.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/import.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/import.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for importing variable definitions\n\n```\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"import\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\import[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the filter terminated by a line break\n\tvar reMatch = /(.*)(\\r?\\n)|$/mg;\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\tthis.parser.pos = reMatch.lastIndex;\n\t// Parse tree nodes to return\n\treturn [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: match[1]}\n\t\t},\n\t\tchildren: []\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/list.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/list.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"div\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params,\n\t\tisMacroDefinition: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/rules.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/syslink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/table.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/table.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/whitespace.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/wikiparser.js": {
"title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\t\t\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/pluginswitcher.js": {
"title": "$:/core/modules/pluginswitcher.js",
"text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Read the plugin info for the incoming plugins\n\tvar changes = $tw.wiki.readPluginInfo(plugins);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/saver-handler.js": {
"title": "$:/core/modules/saver-handler.js",
"text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.preloadDirty = options.preloadDirty || [];\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(self.preloadDirty,function(title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t});\n\t\tthis.numChanges = filteredChanges.length;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\";\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\t}\n\tvar\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/savers/andtidwiki.js": {
"title": "$:/core/modules/savers/andtidwiki.js",
"text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback,options) {\n\tvar filename = options && options.variables ? options.variables.filename : null;\n\tif (method === \"download\") {\n\t\t// Support download\n\t\tif (window.twi.saveDownload) {\n\t\t\ttry {\n\t\t\t\twindow.twi.saveDownload(text,filename);\n\t\t\t} catch(err) {\n\t\t\t\tif (err.message === \"Method not found\") {\n\t\t\t\t\twindow.twi.saveDownload(text);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar link = document.createElement(\"a\");\n\t\t\tlink.setAttribute(\"href\",\"data:text/plain,\" + encodeURIComponent(text));\n\t\t\tif (filename) {\n\t\t\t link.setAttribute(\"download\",filename);\n\t\t\t}\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\t\t}\n\t} else if (window.twi.saveWiki) {\n\t\t// Direct save in Tiddloid\n\t\twindow.twi.saveWiki(text);\n\t} else {\n\t\t// Get the pathname of this document\n\t\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t\t// Strip the file://\n\t\tif(pathname.indexOf(\"file://\") === 0) {\n\t\t\tpathname = pathname.substr(7);\n\t\t}\n\t\t// Strip any query or location part\n\t\tvar p = pathname.indexOf(\"?\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\tp = pathname.indexOf(\"#\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\t// Save the file\n\t\twindow.twi.saveFile(pathname,text);\n\t}\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/beaker.js": {
"title": "$:/core/modules/savers/beaker.js",
"text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive && location.protocol===\"dat:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/download.js": {
"title": "$:/core/modules/savers/download.js",
"text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/fsosaver.js": {
"title": "$:/core/modules/savers/fsosaver.js",
"text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitea.js": {
"title": "$:/core/modules/savers/gitea.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitea.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the gitea\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GiteaSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGiteaSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/Gitea/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"Gitea\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/Gitea/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/Gitea/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/Gitea/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/Gitea/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/Gitea/ServerURL\") || \"https://gitea\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password)\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar use_put = true;\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(sha === \"\"){\n\t\t\t\t\tuse_put = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: endpoint + \"/repos/\" + repo + \"/branches/\" + branch,\n\t\t\t\ttype: \"GET\",\n\t\t\t\theaders: headers,\n\t\t\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\t\t\tif(xhr.status === 404) {\n\t\t\t\t\t\tcallback(\"Please ensure the branch in the Gitea repo exists\");\n\t\t\t\t\t}else{\n\t\t\t\t\t\tdata[\"branch\"] = branch;\n\t\t\t\t\t\tself.upload(uri + filename, use_put?\"PUT\":\"POST\", headers, data, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\nGiteaSaver.prototype.upload = function(uri,method,headers,data,callback) {\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: method,\n\t\theaders: headers,\n\t\tdata: JSON.stringify(data),\n\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\tcallback(null);\n\t\t}\n\t});\n};\n\n/*\nInformation about this saver\n*/\nGiteaSaver.prototype.info = {\n\tname: \"Gitea\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GiteaSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/github.js": {
"title": "$:/core/modules/savers/github.js",
"text": "/*\\\ntitle: $:/core/modules/savers/github.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitHub v3 REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitHubSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitHubSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitHub/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"github\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitHub/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitHub/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitHub/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitHub/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitHub/ServerURL\") || \"https://api.github.com\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/vnd.github.v3+json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password)\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a PUT request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + filename,\n\t\t\t\ttype: \"PUT\",\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitHubSaver.prototype.info = {\n\tname: \"github\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitHubSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitlab.js": {
"title": "$:/core/modules/savers/gitlab.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitlab.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitLab REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: true */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitLabSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitLabSaver.prototype.save = function(text,method,callback) {\n\t/* See https://docs.gitlab.com/ee/api/repository_files.html */\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitLab/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"gitlab\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitLab/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitLab/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitLab/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitLab/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitLab/ServerURL\") || \"https://gitlab.com/api/v4\",\n\t\theaders = {\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Private-Token\": password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/projects/\" + encodeURIComponent(repo) + \"/repository/\";\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri + \"tree/?path=\" + encodeURIComponent(path.replace(/^\\/+|\\/$/g, '')) + \"&branch=\" + encodeURIComponent(branch.replace(/^\\/+|\\/$/g, '')),\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar requestType = \"POST\";\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\trequestType = \"PUT\";\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tcommit_message: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: text,\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + \"files/\" + encodeURIComponent(path.replace(/^\\/+/, '') + filename),\n\t\t\t\ttype: requestType,\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitLabSaver.prototype.info = {\n\tname: \"gitlab\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitLabSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/manualdownload.js": {
"title": "$:/core/modules/savers/manualdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/msdownload.js": {
"title": "$:/core/modules/savers/msdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/put.js": {
"title": "$:/core/modules/savers/put.js",
"text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRetrieve ETag if available\n*/\nvar retrieveETag = function(self) {\n\tvar headers = {\n\t\tAccept: \"*/*;charset=UTF-8\"\n\t};\n\t$tw.utils.httpRequest({\n\t\turl: self.uri(),\n\t\ttype: \"HEAD\",\n\t\theaders: headers,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar etag = xhr.getResponseHeader(\"ETag\");\n\t\t\tif(!etag) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.etag = etag.replace(/^W\\//,\"\");\n\t\t}\n\t});\n};\n\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err,data,xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\tretrieveETag(this);\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text,method,callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = {\n\t\t\"Content-Type\": \"text/html;charset=UTF-8\"\n\t};\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\t// response is textual: \"XMLHttpRequest error code: 412\"\n\t\t\t\tvar status = Number(err.substring(err.indexOf(':') + 2, err.length))\n\t\t\t\tif(status === 412) { // edit conflict\n\t\t\t\t\tvar message = $tw.language.getString(\"Error/EditConflict\");\n\t\t\t\t\tcallback(message);\n\t\t\t\t} else {\n\t\t\t\t\tcallback(err); // fail\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tif(self.etag == null) {\n\t\t\t\t\tretrieveETag(self);\n\t\t\t\t}\n\t\t\t\tcallback(null); // success\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyfox.js": {
"title": "$:/core/modules/savers/tiddlyfox.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyie.js": {
"title": "$:/core/modules/savers/tiddlyie.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/twedit.js": {
"title": "$:/core/modules/savers/twedit.js",
"text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/upload.js": {
"title": "$:/core/modules/savers/upload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/server/authenticators/basic.js": {
"title": "$:/core/modules/server/authenticators/basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/basic.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for WWW basic authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\nfunction BasicAuthenticator(server) {\n\tthis.server = server;\n\tthis.credentialsData = [];\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nBasicAuthenticator.prototype.init = function() {\n\t// Read the credentials data\n\tthis.credentialsFilepath = this.server.get(\"credentials\");\n\tif(this.credentialsFilepath) {\n\t\tvar resolveCredentialsFilepath = path.resolve($tw.boot.wikiPath,this.credentialsFilepath);\n\t\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\n\t\t\tvar credentialsText = fs.readFileSync(resolveCredentialsFilepath,\"utf8\"),\n\t\t\t\tcredentialsData = $tw.utils.parseCsvStringWithHeader(credentialsText);\n\t\t\tif(typeof credentialsData === \"string\") {\n\t\t\t\treturn \"Error: \" + credentialsData + \" reading credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t\t} else {\n\t\t\t\tthis.credentialsData = credentialsData;\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"Error: Unable to load user credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t}\n\t}\n\t// Add the hardcoded username and password if specified\n\tif(this.server.get(\"username\") && this.server.get(\"password\")) {\n\t\tthis.credentialsData = this.credentialsData || [];\n\t\tthis.credentialsData.push({\n\t\t\tusername: this.server.get(\"username\"),\n\t\t\tpassword: this.server.get(\"password\")\n\t\t});\n\t}\n\treturn this.credentialsData.length > 0;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nBasicAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Extract the incoming username and password from the request\n\tvar header = request.headers.authorization || \"\";\n\tif(!header && state.allowAnon) {\n\t\t// If there's no header and anonymous access is allowed then we don't set authenticatedUsername\n\t\treturn true;\n\t}\n\tvar token = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tincomingUsername = parts[0],\n\t\tincomingPassword = parts[1];\n\t// Check that at least one of the credentials matches\n\tvar matchingCredentials = this.credentialsData.find(function(credential) {\n\t\treturn credential.username === incomingUsername && credential.password === incomingPassword;\n\t});\n\tif(matchingCredentials) {\n\t\t// If so, add the authenticated username to the request state\n\t\tstate.authenticatedUsername = incomingUsername;\n\t\treturn true;\n\t} else {\n\t\t// If not, return an authentication challenge\n\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t\treturn false;\n\t}\n};\n\nexports.AuthenticatorClass = BasicAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/authenticators/header.js": {
"title": "$:/core/modules/server/authenticators/header.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/header.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for trusted header authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction HeaderAuthenticator(server) {\n\tthis.server = server;\n\tthis.header = server.get(\"authenticated-user-header\");\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nHeaderAuthenticator.prototype.init = function() {\n\treturn !!this.header;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nHeaderAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Otherwise, authenticate as the username in the specified header\n\tvar username = request.headers[this.header];\n\tif(!username && !state.allowAnon) {\n\t\tresponse.writeHead(401,\"Authorization header required to login to '\" + state.server.servername + \"'\");\n\t\tresponse.end();\n\t\treturn false;\n\t} else {\n\t\t// authenticatedUsername will be undefined for anonymous users\n\t\tstate.authenticatedUsername = username;\n\t\treturn true;\n\t}\n};\n\nexports.AuthenticatorClass = HeaderAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/routes/delete-tiddler.js": {
"title": "$:/core/modules/server/routes/delete-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nDELETE /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"DELETE\";\n\nexports.path = /^\\/bags\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]);\n\tstate.wiki.deleteTiddler(title);\n\tresponse.writeHead(204, \"OK\", {\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-favicon.js": {
"title": "$:/core/modules/server/routes/get-favicon.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-favicon.js\ntype: application/javascript\nmodule-type: route\n\nGET /favicon.ico\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/favicon.ico$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\tresponse.end(buffer,\"base64\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-file.js": {
"title": "$:/core/modules/server/routes/get-file.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-file.js\ntype: application/javascript\nmodule-type: route\n\nGET /files/:filepath\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/files\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar path = require(\"path\"),\n\t\tfs = require(\"fs\"),\n\t\tutil = require(\"util\"),\n\t\tsuppliedFilename = decodeURIComponent(state.params[0]),\n\t\tfilename = path.resolve($tw.boot.wikiPath,\"files\",suppliedFilename),\n\t\textension = path.extname(filename);\n\tfs.readFile(filename,function(err,content) {\n\t\tvar status,content,type = \"text/plain\";\n\t\tif(err) {\n\t\t\tconsole.log(\"Error accessing file \" + filename + \": \" + err.toString());\n\t\t\tstatus = 404;\n\t\t\tcontent = \"File '\" + suppliedFilename + \"' not found\";\n\t\t} else {\n\t\t\tstatus = 200;\n\t\t\tcontent = content;\n\t\t\ttype = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : \"application/octet-stream\");\n\t\t}\n\t\tresponse.writeHead(status,{\n\t\t\t\"Content-Type\": type\n\t\t});\n\t\tresponse.end(content);\n\t});\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-index.js": {
"title": "$:/core/modules/server/routes/get-index.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-index.js\ntype: application/javascript\nmodule-type: route\n\nGET /\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar zlib = require(\"zlib\");\n\nexports.method = \"GET\";\n\nexports.path = /^\\/$/;\n\nexports.handler = function(request,response,state) {\n\tvar acceptEncoding = request.headers[\"accept-encoding\"];\n\tif(!acceptEncoding) {\n\t\tacceptEncoding = \"\";\n\t}\n\tvar text = state.wiki.renderTiddler(state.server.get(\"root-render-type\"),state.server.get(\"root-tiddler\")),\n\t\tresponseHeaders = {\n\t\t\"Content-Type\": state.server.get(\"root-serve-type\")\n\t};\n\t/*\n\tIf the gzip=yes flag for `listen` is set, check if the user agent permits\n\tcompression. If so, compress our response. Note that we use the synchronous\n\tfunctions from zlib to stay in the imperative style. The current `Server`\n\tdoesn't depend on this, and we may just as well use the async versions.\n\t*/\n\tif(state.server.enableGzip) {\n\t\tif (/\\bdeflate\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\ttext = zlib.deflateSync(text);\n\t\t} else if (/\\bgzip\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\ttext = zlib.gzipSync(text);\n\t\t}\n\t}\n\tresponse.writeHead(200,responseHeaders);\n\tresponse.end(text);\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-login-basic.js": {
"title": "$:/core/modules/server/routes/get-login-basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\ntype: application/javascript\nmodule-type: route\n\nGET /login-basic -- force a Basic Authentication challenge\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/login-basic$/;\n\nexports.handler = function(request,response,state) {\n\tif(!state.authenticatedUsername) {\n\t\t// Challenge if there's no username\n\t\tresponse.writeHead(401,{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\t\t\n\t} else {\n\t\t// Redirect to the root wiki if login worked\n\t\tresponse.writeHead(302,{\n\t\t\tLocation: \"/\"\n\t\t});\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-status.js": {
"title": "$:/core/modules/server/routes/get-status.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-status.js\ntype: application/javascript\nmodule-type: route\n\nGET /status\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/status$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar text = JSON.stringify({\n\t\tusername: state.authenticatedUsername || state.server.get(\"anon-username\") || \"\",\n\t\tanonymous: !state.authenticatedUsername,\n\t\tread_only: !state.server.isAuthorized(\"writers\",state.authenticatedUsername),\n\t\tspace: {\n\t\t\trecipe: \"default\"\n\t\t},\n\t\ttiddlywiki_version: $tw.version\n\t});\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler-html.js": {
"title": "$:/core/modules/server/routes/get-tiddler-html.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\ntype: application/javascript\nmodule-type: route\n\nGET /:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/([^\\/]+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar renderType = tiddler.getFieldString(\"_render_type\"),\n\t\t\trenderTemplate = tiddler.getFieldString(\"_render_template\");\n\t\t// Tiddler fields '_render_type' and '_render_template' overwrite\n\t\t// system wide settings for render type and template\n\t\tif(state.wiki.isSystemTiddler(title)) {\n\t\t\trenderType = renderType || state.server.get(\"system-tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"system-tiddler-render-template\");\n\t\t} else {\n\t\t\trenderType = renderType || state.server.get(\"tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"tiddler-render-template\");\n\t\t}\n\t\tvar text = state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\n\t\t// Naughty not to set a content-type, but it's the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\n\t\tresponse.writeHead(200);\n\t\tresponse.end(text,\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler.js": {
"title": "$:/core/modules/server/routes/get-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title),\n\t\ttiddlerFields = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\ttiddlerFields[name] = value;\n\t\t\t} else {\n\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.bag = \"default\";\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddlers-json.js": {
"title": "$:/core/modules/server/routes/get-tiddlers-json.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/tiddlers.json?filter=<filter>\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_FILTER = \"[all[tiddlers]!is[system]sort[title]]\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers.json$/;\n\nexports.handler = function(request,response,state) {\n\tvar filter = state.queryParameters.filter || DEFAULT_FILTER;\n\tif($tw.wiki.getTiddlerText(\"$:/config/Server/AllowAllExternalFilters\") !== \"yes\") {\n\t\tif($tw.wiki.getTiddlerText(\"$:/config/Server/ExternalFilters/\" + filter) !== \"yes\") {\n\t\t\tconsole.log(\"Blocked attempt to GET /recipes/default/tiddlers/tiddlers.json with filter: \" + filter);\n\t\t\tresponse.writeHead(403);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t}\n\tvar excludeFields = (state.queryParameters.exclude || \"text\").split(\",\"),\n\t\ttitles = state.wiki.filterTiddlers(filter);\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar tiddlers = [];\n\t$tw.utils.each(titles,function(title) {\n\t\tvar tiddler = state.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar tiddlerFields = tiddler.getFieldStrings({exclude: excludeFields});\n\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\ttiddlers.push(tiddlerFields);\n\t\t}\n\t});\n\tvar text = JSON.stringify(tiddlers);\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/put-tiddler.js": {
"title": "$:/core/modules/server/routes/put-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nPUT /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"PUT\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\tfields = JSON.parse(state.data);\n\t// Pull up any subfields in the `fields` object\n\tif(fields.fields) {\n\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\tfields[name] = field;\n\t\t});\n\t\tdelete fields.fields;\n\t}\n\t// Remove any revision field\n\tif(fields.revision) {\n\t\tdelete fields.revision;\n\t}\n\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\tresponse.writeHead(204, \"OK\",{\n\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/server.js": {
"title": "$:/core/modules/server/server.js",
"text": "/*\\\ntitle: $:/core/modules/server/server.js\ntype: application/javascript\nmodule-type: library\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\tquerystring = require(\"querystring\");\n}\n\n/*\nA simple HTTP server with regexp-based routes\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\n\t\t routes - optional array of routes to use\n\t\t wiki - reference to wiki object\n*/\nfunction Server(options) {\n\tvar self = this;\n\tthis.routes = options.routes || [];\n\tthis.authenticators = options.authenticators || [];\n\tthis.wiki = options.wiki;\n\tthis.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\");\n\t// Initialise the variables\n\tthis.variables = $tw.utils.extend({},this.defaultVariables);\n\tif(options.variables) {\n\t\tfor(var variable in options.variables) {\n\t\t\tif(options.variables[variable]) {\n\t\t\t\tthis.variables[variable] = options.variables[variable];\n\t\t\t}\n\t\t}\t\t\n\t}\n\t$tw.utils.extend({},this.defaultVariables,options.variables);\n\t// Initialise CSRF\n\tthis.csrfDisable = this.get(\"csrf-disable\") === \"yes\";\n\t// Initialize Gzip compression\n\tthis.enableGzip = this.get(\"gzip\") === \"yes\";\n\t// Initialise authorization\n\tvar authorizedUserName = (this.get(\"username\") && this.get(\"password\")) ? this.get(\"username\") : \"(anon)\";\n\tthis.authorizationPrincipals = {\n\t\treaders: (this.get(\"readers\") || authorizedUserName).split(\",\").map($tw.utils.trim),\n\t\twriters: (this.get(\"writers\") || authorizedUserName).split(\",\").map($tw.utils.trim)\n\t}\n\t// Load and initialise authenticators\n\t$tw.modules.forEachModuleOfType(\"authenticator\", function(title,authenticatorDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\n\t});\n\t// Load route handlers\n\t$tw.modules.forEachModuleOfType(\"route\", function(title,routeDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addRoute(routeDefinition);\n\t});\n\t// Initialise the http vs https\n\tthis.listenOptions = null;\n\tthis.protocol = \"http\";\n\tvar tlsKeyFilepath = this.get(\"tls-key\"),\n\t\ttlsCertFilepath = this.get(\"tls-cert\");\n\tif(tlsCertFilepath && tlsKeyFilepath) {\n\t\tthis.listenOptions = {\n\t\t\tkey: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsKeyFilepath),\"utf8\"),\n\t\t\tcert: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsCertFilepath),\"utf8\")\n\t\t};\n\t\tthis.protocol = \"https\";\n\t}\n\tthis.transport = require(this.protocol);\n}\n\nServer.prototype.defaultVariables = {\n\tport: \"8080\",\n\thost: \"127.0.0.1\",\n\t\"root-tiddler\": \"$:/core/save/all\",\n\t\"root-render-type\": \"text/plain\",\n\t\"root-serve-type\": \"text/html\",\n\t\"tiddler-render-type\": \"text/html\",\n\t\"tiddler-render-template\": \"$:/core/templates/server/static.tiddler.html\",\n\t\"system-tiddler-render-type\": \"text/plain\",\n\t\"system-tiddler-render-template\": \"$:/core/templates/wikified-tiddler\",\n\t\"debug-level\": \"none\",\n\t\"gzip\": \"no\"\n};\n\nServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nServer.prototype.addAuthenticator = function(AuthenticatorClass) {\n\t// Instantiate and initialise the authenticator\n\tvar authenticator = new AuthenticatorClass(this),\n\t\tresult = authenticator.init();\n\tif(typeof result === \"string\") {\n\t\t$tw.utils.error(\"Error: \" + result);\n\t} else if(result) {\n\t\t// Only use the authenticator if it initialised successfully\n\t\tthis.authenticators.push(authenticator);\n\t}\n};\n\nServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"path-prefix\") || \"\";\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(pathprefix.length) || \"/\";\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nServer.prototype.methodMappings = {\n\t\"GET\": \"readers\",\n\t\"OPTIONS\": \"readers\",\n\t\"HEAD\": \"readers\",\n\t\"PUT\": \"writers\",\n\t\"POST\": \"writers\",\n\t\"DELETE\": \"writers\"\n};\n\n/*\nCheck whether a given user is authorized for the specified authorizationType (\"readers\" or \"writers\"). Pass null or undefined as the username to check for anonymous access\n*/\nServer.prototype.isAuthorized = function(authorizationType,username) {\n\tvar principals = this.authorizationPrincipals[authorizationType] || [];\n\treturn principals.indexOf(\"(anon)\") !== -1 || (username && (principals.indexOf(\"(authenticated)\") !== -1 || principals.indexOf(username) !== -1));\n}\n\nServer.prototype.requestHandler = function(request,response) {\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = self.wiki;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\tstate.queryParameters = querystring.parse(state.urlInfo.query);\n\t// Get the principals authorized to access this resource\n\tvar authorizationType = this.methodMappings[request.method] || \"readers\";\n\t// Check for the CSRF header if this is a write\n\tif(!this.csrfDisable && authorizationType === \"writers\" && request.headers[\"x-requested-with\"] !== \"TiddlyWiki\") {\n\t\tresponse.writeHead(403,\"'X-Requested-With' header required to login to '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\t\t\n\t}\n\t// Check whether anonymous access is granted\n\tstate.allowAnon = this.isAuthorized(authorizationType,null);\n\t// Authenticate with the first active authenticator\n\tif(this.authenticators.length > 0) {\n\t\tif(!this.authenticators[0].authenticateRequest(request,response,state)) {\n\t\t\t// Bail if we failed (the authenticator will have sent the response)\n\t\t\treturn;\n\t\t}\t\t\n\t}\n\t// Authorize with the authenticated username\n\tif(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {\n\t\tresponse.writeHead(401,\"'\" + state.authenticatedUsername + \"' is not authorized to access '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Optionally output debug info\n\tif(self.get(\"debug-level\") !== \"none\") {\n\t\tconsole.log(\"Request path:\",JSON.stringify(state.urlInfo));\n\t\tconsole.log(\"Request headers:\",JSON.stringify(request.headers));\n\t\tconsole.log(\"authenticatedUsername:\",state.authenticatedUsername);\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Receive the request body if necessary and hand off to the route handler\n\tif(route.bodyFormat === \"stream\" || request.method === \"GET\" || request.method === \"HEAD\") {\n\t\t// Let the route handle the request stream itself\n\t\troute.handler(request,response,state);\n\t} else if(route.bodyFormat === \"string\" || !route.bodyFormat) {\n\t\t// Set the encoding for the incoming request\n\t\trequest.setEncoding(\"utf8\");\n\t\tvar data = \"\";\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata += chunk.toString();\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = data;\n\t\t\troute.handler(request,response,state);\n\t\t});\n\t} else if(route.bodyFormat === \"buffer\") {\n\t\tvar data = [];\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata.push(chunk);\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = Buffer.concat(data);\n\t\t\troute.handler(request,response,state);\n\t\t})\n\t} else {\n\t\tresponse.writeHead(400,\"Invalid bodyFormat \" + route.bodyFormat + \" in route \" + route.method + \" \" + route.path.source);\n\t\tresponse.end();\n\t}\n};\n\n/*\nListen for requests\nport: optional port number (falls back to value of \"port\" variable)\nhost: optional host address (falls back to value of \"host\" variable)\nprefix: optional prefix (falls back to value of \"path-prefix\" variable)\n*/\nServer.prototype.listen = function(port,host,prefix) {\n\tvar self = this;\n\t// Handle defaults for port and host\n\tport = port || this.get(\"port\");\n\thost = host || this.get(\"host\");\n\tprefix = prefix || this.get(\"path-prefix\") || \"\";\n\t// Check for the port being a string and look it up as an environment variable\n\tif(parseInt(port,10).toString() !== port) {\n\t\tport = process.env[port] || 8080;\n\t}\n\t// Warn if required plugins are missing\n\tif(!$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\t// Create the server\n\tvar server;\n\tif(this.listenOptions) {\n\t\tserver = this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\n\t} else {\n\t\tserver = this.transport.createServer(this.requestHandler.bind(this));\n\t}\n\t// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)\n\tserver.on(\"listening\",function() {\n\t\tvar address = server.address();\n\t\t$tw.utils.log(\"Serving on \" + self.protocol + \"://\" + address.address + \":\" + address.port + prefix,\"brown/orange\");\n\t\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t});\n\t// Listen\n\treturn server.listen(port,host);\n};\n\nexports.Server = Server;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/browser-messaging.js": {
"title": "$:/core/modules/browser-messaging.js",
"text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\t// console.log(\"browser-messaging: \",document.location.toString())\n\t\t// console.log(\"browser-messaging: Received message from\",event.origin);\n\t\t// console.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/commands.js": {
"title": "$:/core/modules/startup/commands.js",
"text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/CSSescape.js": {
"title": "$:/core/modules/startup/CSSescape.js",
"text": "/*\\\ntitle: $:/core/modules/startup/CSSescape.js\ntype: application/javascript\nmodule-type: startup\n\nPolyfill for CSS.escape()\n\n\\*/\n(function(root,factory){\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"css-escape\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n// https://github.com/umdjs/umd/blob/master/returnExports.js\nexports.startup = factory(root);\n}(typeof global != 'undefined' ? global : this, function(root) {\n\n\tif (root.CSS && root.CSS.escape) {\n\t\treturn;\n\t}\n\n\t// https://drafts.csswg.org/cssom/#serialize-an-identifier\n\tvar cssEscape = function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n\n\tif (!root.CSS) {\n\t\troot.CSS = {};\n\t}\n\n\troot.CSS.escape = cssEscape;\n\n}));\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/favicon.js": {
"title": "$:/core/modules/startup/favicon.js",
"text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/info.js": {
"title": "$:/core/modules/startup/info.js",
"text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_INFO_PLUGIN = \"$:/temp/info-plugin\";\n\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin. We use the non-standard plugin-type \"info\" because ordinary plugins are only registered asynchronously after being loaded dynamically\n\tvar fields = {\n\t\ttitle: TITLE_INFO_PLUGIN,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]);\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/load-modules.js": {
"title": "$:/core/modules/startup/load-modules.js",
"text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.wiki.addIndexersToWiki();\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/password.js": {
"title": "$:/core/modules/startup/password.js",
"text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/plugins.js": {
"title": "$:/core/modules/startup/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/startup/plugins.js\ntype: application/javascript\nmodule-type: startup\n\nStartup logic concerned with managing plugins\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"plugins\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE = \"$:/status/RequireReloadDueToPluginChange\";\n\nvar PREFIX_CONFIG_REGISTER_PLUGIN_TYPE = \"$:/config/RegisterPluginType/\";\n\nexports.startup = function() {\n\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"no\"});\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tvar changesToProcess = [],\n\t\t\trequireReloadDueToPluginChange = false;\n\t\t$tw.utils.each(Object.keys(changes),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\t\trequiresReload = $tw.wiki.doesPluginRequireReload(title);\n\t\t\tif(requiresReload) {\n\t\t\t\trequireReloadDueToPluginChange = true;\n\t\t\t} else if(tiddler) {\n\t\t\t\tvar pluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields[\"plugin-type\"] || \"\"),\"no\") === \"yes\") {\n\t\t\t\t\tchangesToProcess.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif(requireReloadDueToPluginChange) {\n\t\t\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"yes\"});\n\t\t}\n\t\t// Read or delete the plugin info of the changed tiddlers\n\t\tif(changesToProcess.length > 0) {\n\t\t\tvar changes = $tw.wiki.readPluginInfo(changesToProcess);\n\t\t\tif(changes.modifiedPlugins.length > 0 || changes.deletedPlugins.length > 0) {\n\t\t\t\t// (Re-)register any modified plugins\n\t\t\t\t$tw.wiki.registerPluginTiddlers(null,changes.modifiedPlugins);\n\t\t\t\t// Unregister any deleted plugins\n\t\t\t\t$tw.wiki.unregisterPluginTiddlers(null,changes.deletedPlugins);\n\t\t\t\t// Unpack the shadow tiddlers\n\t\t\t\t$tw.wiki.unpackPluginTiddlers();\n\t\t\t}\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/render.js": {
"title": "$:/core/modules/startup/render.js",
"text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar THROTTLE_REFRESH_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n \t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t})();\n\t// Remove any splash screen elements\n\tvar removeList = document.querySelectorAll(\".tc-remove-when-wiki-loaded\");\n\t$tw.utils.each(removeList,function(removeItem) {\n\t\tif(removeItem.parentNode) {\n\t\t\tremoveItem.parentNode.removeChild(removeItem);\n\t\t}\n\t});\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.hooks.invokeHook(\"th-page-refreshing\");\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only tiddlers that are throttled have changed\n\t\tvar onlyThrottledTiddlersHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !(tiddler.hasField(\"draft.of\") || tiddler.hasField(\"throttle.refresh\"))) {\n\t\t\t\tonlyThrottledTiddlersHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyThrottledTiddlersHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = THROTTLE_REFRESH_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/rootwidget.js": {
"title": "$:/core/modules/startup/rootwidget.js",
"text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\n\t});\n\t// Install the notification mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the copy-to-clipboard mechanism\n\t$tw.rootWidget.addEventListener(\"tm-copy-to-clipboard\",function(event) {\n\t\t$tw.utils.copyToClipboard(event.param);\n\t});\n\t// Install the tm-focus-selector message\n\t$tw.rootWidget.addEventListener(\"tm-focus-selector\",function(event) {\n\t\tvar selector = event.param || \"\",\n\t\t\telement;\n\t\ttry {\n\t\t\telement = document.querySelector(selector);\n\t\t} catch(e) {\n\t\t\tconsole.log(\"Error in selector: \",selector)\n\t\t}\n\t\tif(element && element.focus) {\n\t\t\telement.focus(event.paramObject);\n\t\t}\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tvar fullScreenDocument = event.event ? event.event.target.ownerDocument : document;\n\t\t\tif(event.param === \"enter\") {\n\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t} else if(event.param === \"exit\") {\n\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tif(fullScreenDocument[fullscreen._fullscreenElement]) {\n\t\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t\t} else {\n\t\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup.js": {
"title": "$:/core/modules/startup.js",
"text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.platform);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t$tw.rootWidget = new widget.widget({\n\t\ttype: \"widget\",\n\t\tchildren: []\n\t},{\n\t\twiki: $tw.wiki,\n\t\tdocument: $tw.browser ? document : $tw.fakeDocument\n\t});\n\t// Execute any startup actions\n\tvar executeStartupTiddlers = function(tag) {\n\t\t$tw.utils.each($tw.wiki.filterTiddlers(\"[all[shadows+tiddlers]tag[\" + tag + \"]!has[draft.of]]\"),function(title) {\n\t\t\t$tw.rootWidget.invokeActionString($tw.wiki.getTiddlerText(title),$tw.rootWidget);\n\t\t});\n\t};\n\texecuteStartupTiddlers(\"$:/tags/StartupAction\");\n\tif($tw.browser) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Browser\");\t\t\n\t}\n\tif($tw.node) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Node\");\t\t\n\t}\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-GB\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Listen for shortcuts\n\tif($tw.browser) {\n\t\t$tw.utils.addEventListeners(document,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t}\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t}\n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({\n\t\twiki: $tw.wiki,\n\t\tdirtyTracking: !$tw.syncadaptor,\n\t\tpreloadDirty: $tw.boot.preloadDirty || []\n\t});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/story.js": {
"title": "$:/core/modules/startup/story.js",
"text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD = \"$:/config/Navigation/Permalinkview/CopyToClipboard\"; // Can be \"yes\" (default) or \"no\"\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/Permalinkview/UpdateAddressBar\"; // Can be \"yes\" (default) or \"no\"\n\n\n// Links to help, if there is no param\nvar HELP_OPEN_EXTERNAL_WINDOW = \"http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\";\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers({\n\t\tdisableHistory: $tw.boot.disableStartupNavigation\n\t});\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for tm-open-external-window message\n\t\t$tw.rootWidget.addEventListener(\"tm-open-external-window\",function(event) {\n\t\t\tvar paramObject = event.paramObject || {},\n\t\t\t\tstrUrl = event.param || HELP_OPEN_EXTERNAL_WINDOW,\n\t\t\t\tstrWindowName = paramObject.windowName,\n\t\t\t\tstrWindowFeatures = paramObject.windowFeatures;\n\t\t\twindow.open(strUrl, strWindowName, strWindowFeatures);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\"\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\"\n\t\t\t});\t\t\t\t\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndisableHistory: if true $:/History is NOT updated\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// Update history\n\tif(!options.disableHistory) {\n\t\t// If a target tiddler was specified add it to the history stack\n\t\tif(target && target !== \"\") {\n\t\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t\t}\n\t\t\t$tw.wiki.addToHistory(target);\n\t\t} else if(storyList.length > 0) {\n\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t}\t\t\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.copyToClipboard: \"permalink\", \"permaview\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\t// Get the story and the history stack\n\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\ttargetTiddler = \"\";\n\tif(options.targetTiddler) {\n\t\ttargetTiddler = options.targetTiddler;\n\t} else {\n\t\t// The target tiddler is the one at the top of the stack\n\t\tif(historyList.length > 0) {\n\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t}\n\t\t// Blank the target tiddler if it isn't present in the story\n\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\ttargetTiddler = \"\";\n\t\t}\n\t}\n\t// Assemble the location hash\n\tswitch(options.updateAddressBar) {\n\t\tcase \"permalink\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t\tbreak;\n\t}\n\t// Copy URL to the clipboard\n\tswitch(options.copyToClipboard) {\n\t\tcase \"permalink\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler));\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList)));\n\t\t\tbreak;\n\t}\n\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\tif(options.updateHistory === \"yes\") {\n\t\t\t// Assign the location hash so that history is updated\n\t\t\twindow.location.hash = $tw.locationHash;\n\t\t} else {\n\t\t\t// We use replace so that browser history isn't affected\n\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t}\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/windows.js": {
"title": "$:/core/modules/startup/windows.js",
"text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\nvar windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\twindowTitle = paramObject.windowTitle || title,\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow,\n\t\t srcDocument;\n\t\t// In case that popup blockers deny opening a new window\n\t\ttry {\n\t\t\tsrcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\t}\n\t\tcatch(e) {\n\t\t\treturn;\n\t\t}\n\t\twindows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = windowTitle;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\t// Listen for keyboard shortcuts\n\t\t$tw.utils.addEventListeners(srcDocument,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t},{\n\t\t\tname: \"click\",\n\t\t\thandlerObject: $tw.popup,\n\t\t\thandlerMethod: \"handleEvent\"\n\t\t}]);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each(windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/story.js": {
"title": "$:/core/modules/story.js",
"text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/storyviews/classic.js": {
"title": "$:/core/modules/storyviews/classic.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration()\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\tif(duration) {\n\t\t// Scroll the node into view\n\t\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\t\n\t} else {\n\t\ttargetElement.scrollIntoView();\n\t}\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Reset the margin once the transition is over\n\t\tsetTimeout(function() {\n\t\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t\t{transition: \"none\"},\n\t\t\t\t{marginBottom: \"\"}\n\t\t\t]);\n\t\t},duration);\n\t\t// Set up the initial position of the element\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t// Transition to the final position\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t]);\n\t}\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode(),\n\t\t\tremoveElement = function() {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t};\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\tremoveElement();\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar currWidth = targetElement.offsetWidth,\n\t\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Remove the dom nodes of the widget at the end of the transition\n\t\tsetTimeout(removeElement,duration);\n\t\t// Animate the closure\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"translateX(0px)\"},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/pop.js": {
"title": "$:/core/modules/storyviews/pop.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t\t$tw.utils.setStyle(widget.document.body,[\n\t\t\t{\"overflow-x\": \"\"}\n\t\t]);\n\t},duration);\n\t// Prevent the page from overscrolling due to the zoom factor\n\t$tw.utils.setStyle(widget.document.body,[\n\t\t{\"overflow-x\": \"hidden\"}\n\t]);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement && targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/zoomin.js": {
"title": "$:/core/modules/storyviews/zoomin.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/syncer.js": {
"title": "$:/core/modules/syncer.js",
"text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store and synchronises them to a remote data store represented as a \"sync adaptor\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleIsAnonymous = \"$:/status/IsAnonymous\";\nSyncer.prototype.titleIsReadOnly = \"$:/status/IsReadOnly\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSyncPollingInterval = \"$:/config/SyncPollingInterval\";\nSyncer.prototype.titleSyncDisableLazyLoading = \"$:/config/SyncDisableLazyLoading\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.titleSyncThrottleInterval = \"$:/config/SyncThrottleInterval\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.errorRetryInterval = 5 * 1000; // Interval to retry after an error\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\t// Save parameters\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncThrottleInterval,\"\"),10) || this.throttleInterval;\n\tthis.errorRetryInterval = options.errorRetryInterval || this.errorRetryInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\"\"),10) || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging,\n\t\tsaveHistory: true\n\t});\n\t// Make another logger for connection errors\n\tthis.loggerConnection = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\") + \"-connection\",{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging\n\t});\n\t// Ask the syncadaptor to use the main logger\n\tif(this.syncadaptor.setLoggerSaveBuffer) {\n\t\tthis.syncadaptor.setLoggerSaveBuffer(this.logger);\n\t}\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\tthis.titlesToBeLoaded = {}; // Hashmap of titles of tiddlers that need loading from the server\n\tthis.titlesHaveBeenLazyLoaded = {}; // Hashmap of titles of tiddlers that have already been lazily loaded from the server\n\t// Timers\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Number of outstanding requests\n\tthis.numTasksInProgress = 0;\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Filter the changes to just include ones that are being synced\n\t\tvar filteredChanges = self.getSyncedTiddlers(function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t\tif(filteredChanges.length > 0) {\n\t\t\tself.processTaskQueue();\n\t\t} else {\n\t\t\t// Look for deletions of tiddlers we're already syncing\t\n\t\t\tvar outstandingDeletion = false\n\t\t\t$tw.utils.each(changes,function(change,title,object) {\n\t\t\t\tif(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) {\n\t\t\t\t\toutstandingDeletion = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(outstandingDeletion) {\n\t\t\t\tself.processTaskQueue();\n\t\t\t}\n\t\t}\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function() {\n\t\t\tself.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-copy-syncer-logs-to-clipboard\",function() {\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getSystemInfo() + \"\\n\\nLog:\\n\" + self.logger.getBuffer());\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI && $tw.wiki.getTiddlerText(this.titleSyncDisableLazyLoading) !== \"yes\") {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\t\t\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nShow a generic network error alert\n*/\nSyncer.prototype.displayError = function(msg,err) {\n\tif(err === ($tw.language.getString(\"Error/XMLHttpRequest\") + \": 0\")) {\n\t\tthis.loggerConnection.alert($tw.language.getString(\"Error/NetworkErrorAlert\"));\n\t\tthis.logger.log(msg + \":\",err);\n\t} else {\n\t\tthis.logger.alert(msg + \":\",err);\n\t}\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getSyncedTiddlers = function(source) {\n\treturn this.filterFn.call(this.wiki,source);\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getTiddlerRevision = function(title) {\n\tif(this.syncadaptor && this.syncadaptor.getTiddlerRevision) {\n\t\treturn this.syncadaptor.getTiddlerRevision(title);\n\t} else {\n\t\treturn this.wiki.getTiddler(title).fields.revision;\t\n\t} \n};\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\t// \"revision\" is the revision of the tiddler last seen on the server, and \"changecount\" is the corresponding local changecount\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.getSyncedTiddlers();\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: self.getTiddlerRevision(title),\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t};\n\t});\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\tthis.logger.log(\"Checking dirty status\");\n\t// Check tiddlers that are in the store and included in the filter function\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(this.wiki.tiddlerExists(title)) {\n\t\t\tif(tiddlerInfo) {\n\t\t\t\t// If the tiddler is known on the server and has been modified locally then it needs to be saved to the server\n\t\t\t\tif($tw.wiki.getChangeCount(title) > tiddlerInfo.changeCount) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If the tiddler isn't known on the server then it needs to be saved to the server\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\t// Check tiddlers that are known from the server but not currently in the store\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\tif(!this.wiki.tiddlerExists(titles[index])) {\n\t\t\t// There must be a pending delete\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\tvar dirty = this.isDirty();\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",dirty);\n\t\tif(!dirty) {\n\t\t\tthis.loggerConnection.clearAlerts();\n\t\t}\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: this.getTiddlerRevision(tiddlerFields.title),\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\t// Set the various status tiddlers\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\t\tif(isLoggedIn) {\n\t\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tvar self = this,\n\t\tcancelNextSync = function() {\n\t\t\tif(self.pollTimerId) {\n\t\t\t\tclearTimeout(self.pollTimerId);\n\t\t\t\tself.pollTimerId = null;\n\t\t\t}\n\t\t},\n\t\ttriggerNextSync = function() {\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t};\n\tif(this.syncadaptor && this.syncadaptor.getUpdatedTiddlers) {\n\t\tthis.logger.log(\"Retrieving updated tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getUpdatedTiddlers(self,function(err,updates) {\n\t\t\ttriggerNextSync();\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(updates) {\n\t\t\t\t$tw.utils.each(updates.modifications,function(title) {\n\t\t\t\t\tself.titlesToBeLoaded[title] = true;\n\t\t\t\t});\n\t\t\t\t$tw.utils.each(updates.deletions,function(title) {\n\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t});\n\t\t\t\tif(updates.modifications.length > 0 || updates.deletions.length > 0) {\n\t\t\t\t\tself.processTaskQueue();\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t} else if(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\ttriggerNextSync();\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Keep track of which tiddlers we already know about have been reported this time\n\t\t\tvar previousTitles = Object.keys(self.tiddlerInfo);\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.tiddlerExists(tiddlerFields.title) && self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null,\n\t\t\t\t\tindexInPreviousTitles = previousTitles.indexOf(tiddlerFields.title);\n\t\t\t\tif(indexInPreviousTitles !== -1) {\n\t\t\t\t\tpreviousTitles.splice(indexInPreviousTitles,1);\n\t\t\t\t}\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Only load the skinny version if we don't already have a fat version of the tiddler\n\t\t\t\t\tif(!tiddler || tiddler.fields.text === undefined) {\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\tself.titlesToBeLoaded[tiddlerFields.title] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Delete any tiddlers that were previously reported but missing this time\n\t\t\t$tw.utils.each(previousTitles,function(title) {\n\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t});\n\t\t\tself.processTaskQueue();\n\t\t});\n\t}\n};\n\n/*\nForce load a tiddler from the server\n*/\nSyncer.prototype.enqueueLoadTiddler = function(title) {\n\tthis.titlesToBeLoaded[title] = true;\n\tthis.processTaskQueue();\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Ignore if the syncadaptor doesn't handle it\n\tif(!this.syncadaptor.supportsLazyLoading) {\n\t\treturn;\n\t}\n\t// Don't lazy load the same tiddler twice\n\tif(!this.titlesHaveBeenLazyLoaded[title]) {\n\t\t// Don't lazy load if the tiddler isn't included in the sync filter\n\t\tif(this.getSyncedTiddlers().indexOf(title) !== -1) {\n\t\t\t// Mark the tiddler as needing loading, and having already been lazily loaded\n\t\t\tthis.titlesToBeLoaded[title] = true;\n\t\t\tthis.titlesHaveBeenLazyLoaded[title] = true;\n\t\t}\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!err && !isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(err,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nProcess the next task\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing\n\t// a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(typeof task === \"object\" && task !== null) {\n\t\t\tthis.numTasksInProgress += 1;\n\t\t\ttask.run(function(err) {\n\t\t\t\tself.numTasksInProgress -= 1;\n\t\t\t\tif(err) {\n\t\t\t\t\tself.displayError(\"Sync error while processing \" + task.type + \" of '\" + task.title + \"'\",err);\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\tself.triggerTimeout(self.errorRetryInterval);\n\t\t\t\t} else {\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\t// Process the next task\n\t\t\t\t\tself.processTaskQueue.call(self);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// No task is ready so update the status\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// And trigger a timeout if there is a pending task\n\t\t\tif(task === true) {\n\t\t\t\tthis.triggerTimeout();\t\t\t\t\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.updateDirtyStatus();\t\t\n\t}\n};\n\nSyncer.prototype.triggerTimeout = function(interval) {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},interval || self.taskTimerInterval);\n\t}\n};\n\n/*\nChoose the next sync task. We prioritise saves, then deletes, then loads from the server\n\nReturns either a task object, null if there's no upcoming tasks, or the boolean true if there are pending tasks that aren't yet due\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar thresholdLastSaved = (new Date()) - this.throttleInterval,\n\t\thavePending = null;\n\t// First we look for tiddlers that have been modified locally and need saving back to the server\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title),\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(tiddler) {\n\t\t\t// If the tiddler is not known on the server, or has been modified locally no more recently than the threshold then it needs to be saved to the server\n\t\t\tvar hasChanged = !tiddlerInfo || $tw.wiki.getChangeCount(title) > tiddlerInfo.changeCount,\n\t\t\t\tisReadyToSave = !tiddlerInfo || !tiddlerInfo.timestampLastSaved || tiddlerInfo.timestampLastSaved < thresholdLastSaved;\n\t\t\tif(hasChanged) {\n\t\t\t\tif(isReadyToSave) {\n\t\t\t\t\treturn new SaveTiddlerTask(this,title); \t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\thavePending = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Second, we check tiddlers that are known from the server but not currently in the store, and so need deleting on the server\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\ttitle = titles[index];\n\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\treturn new DeleteTiddlerTask(this,title);\n\t\t}\n\t}\n\t// Check for tiddlers that need loading\n\ttitle = Object.keys(this.titlesToBeLoaded)[0];\n\tif(title) {\n\t\tdelete this.titlesToBeLoaded[title];\n\t\treturn new LoadTiddlerTask(this,title);\n\t}\n\t// No tasks are ready\n\treturn havePending;\n};\n\nfunction SaveTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"save\";\n}\n\nSaveTiddlerTask.prototype.run = function(callback) {\n\tvar self = this,\n\t\tchangeCount = this.syncer.wiki.getChangeCount(this.title),\n\t\ttiddler = this.syncer.wiki.tiddlerExists(this.title) && this.syncer.wiki.getTiddler(this.title);\n\tthis.syncer.logger.log(\"Dispatching 'save' task:\",this.title);\n\tif(tiddler) {\n\t\tthis.syncer.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t// If there's an error, exit without changing any internal state\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Adjust the info stored about this tiddler\n\t\t\tself.syncer.tiddlerInfo[self.title] = {\n\t\t\t\tchangeCount: changeCount,\n\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\trevision: revision,\n\t\t\t\ttimestampLastSaved: new Date()\n\t\t\t};\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else {\n\t\tthis.syncer.logger.log(\" Not Dispatching 'save' task:\",this.title,\"tiddler does not exist\");\n\t\t$tw.utils.nextTick(callback(null));\n\t}\n};\n\nfunction DeleteTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"delete\";\n}\n\nDeleteTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'delete' task:\",this.title);\n\tthis.syncer.syncadaptor.deleteTiddler(this.title,function(err) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Remove the info stored about this tiddler\n\t\tdelete self.syncer.tiddlerInfo[self.title];\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t},{\n\t\ttiddlerInfo: self.syncer.tiddlerInfo[this.title]\n\t});\n};\n\nfunction LoadTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"load\";\n}\n\nLoadTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'load' task:\",this.title);\n\tthis.syncer.syncadaptor.loadTiddler(this.title,function(err,tiddlerFields) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Update the info stored about this tiddler\n\t\tif(tiddlerFields) {\n\t\t\tself.syncer.storeTiddler(tiddlerFields);\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t});\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/tiddler.js": {
"title": "$:/core/modules/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet the value of a field as a list\n*/\nexports.getFieldList = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn [];\n\t}\n\treturn $tw.utils.parseStringArray(value);\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [],\n\t\tfields = Object.keys(this.fields).sort(),\n\t\tresult = [];\n\tfor(var t=0; t<fields.length; t++) {\n\t\tvar field = fields[t];\n\t\tif(exclude.indexOf(field) === -1) {\n\t\t\tresult.push(field + \": \" + this.getFieldString(field));\n\t\t}\n\t}\n\treturn result.join(\"\\n\");\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlermethod"
},
"$:/core/modules/upgraders/plugins.js": {
"title": "$:/core/modules/upgraders/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin contains JS modules\n\t\t\tvar requiresReload = $tw.wiki.doesPluginInfoRequireReload(JSON.parse(incomingTiddler.text)) ? ($tw.wiki.getTiddlerText(\"$:/language/ControlPanel/Plugins/PluginWillRequireReload\") + \" \") : \"\";\n\t\t\tmessages[title] = requiresReload;\n\t\t\tif(incomingTiddler.version) {\n\t\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/system.js": {
"title": "$:/core/modules/upgraders/system.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\",\"$:/Import\"],\n\tWARN_IMPORT_PREFIX_LIST = [\"$:/core/modules/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tshowAlert = false;\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var t=0; t<WARN_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = WARN_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix && wiki.isShadowTiddler(title)) {\n\t\t\t\t\tshowAlert = true;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Warning\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tif(showAlert) {\n\t\tvar logger = new $tw.utils.Logger(\"import\");\n\t\tlogger.alert($tw.language.getString(\"Import/Upgrader/System/Alert\"));\n\t}\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/themetweaks.js": {
"title": "$:/core/modules/upgraders/themetweaks.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/utils/base64-utf8/base64-utf8.module.js": {
"text": "(function(){// From https://gist.github.com/Nijikokun/5192472\n//\n// UTF8 Module\n//\n// Cleaner and modularized utf-8 encoding and decoding library for javascript.\n//\n// copyright: MIT\n// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com\n!function(r,e,o,t){void 0!==o.module&&o.module.exports?o.module.exports=e.apply(o):void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"utf8\",[],e):o.utf8=e.apply(o)}(0,function(){return{encode:function(r){if(\"string\"!=typeof r)return r;r=r.replace(/\\r\\n/g,\"\\n\");for(var e,o=\"\",t=0;t<r.length;t++)(e=r.charCodeAt(t))<128?o+=String.fromCharCode(e):e>127&&e<2048?(o+=String.fromCharCode(e>>6|192),o+=String.fromCharCode(63&e|128)):(o+=String.fromCharCode(e>>12|224),o+=String.fromCharCode(e>>6&63|128),o+=String.fromCharCode(63&e|128));return o},decode:function(r){if(\"string\"!=typeof r)return r;for(var e=\"\",o=0,t=0;o<r.length;)(t=r.charCodeAt(o))<128?(e+=String.fromCharCode(t),o++):t>191&&t<224?(e+=String.fromCharCode((31&t)<<6|63&r.charCodeAt(o+1)),o+=2):(e+=String.fromCharCode((15&t)<<12|(63&r.charCodeAt(o+1))<<6|63&r.charCodeAt(o+2)),o+=3);return e}}},this),function(r,e,o,t){if(void 0!==o.module&&o.module.exports){if(t&&o.require)for(var n=0;n<t.length;n++)o[t[n]]=o.require(t[n]);o.module.exports=e.apply(o)}else void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"base64\",t||[],e):o.base64=e.apply(o)}(0,function(r){var e=r||this.utf8,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{encode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=e.encode(r);for(var t,n,i,d,f,a,h,c=\"\",u=0;u<r.length;)d=(t=r.charCodeAt(u++))>>2,f=(3&t)<<4|(n=r.charCodeAt(u++))>>4,a=(15&n)<<2|(i=r.charCodeAt(u++))>>6,h=63&i,isNaN(n)?a=h=64:isNaN(i)&&(h=64),c+=o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return c},decode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=r.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");for(var t,n,i,d,f,a,h=\"\",c=0;c<r.length;)t=o.indexOf(r.charAt(c++))<<2|(d=o.indexOf(r.charAt(c++)))>>4,n=(15&d)<<4|(f=o.indexOf(r.charAt(c++)))>>2,i=(3&f)<<6|(a=o.indexOf(r.charAt(c++))),h+=String.fromCharCode(t),64!=f&&(h+=String.fromCharCode(n)),64!=a&&(h+=String.fromCharCode(i));return e.decode(h)}}},this,[\"utf8\"]);}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/base64-utf8/base64-utf8.module.js",
"module-type": "library"
},
"$:/core/modules/utils/crypto.js": {
"title": "$:/core/modules/utils/crypto.js",
"text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/csv.js": {
"title": "$:/core/modules/utils/csv.js",
"text": "/*\\\ntitle: $:/core/modules/utils/csv.js\ntype: application/javascript\nmodule-type: utils\n\nA barebones CSV parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a CSV string with a header row and return an array of hashmaps.\n*/\nexports.parseCsvStringWithHeader = function(text,options) {\n\toptions = options || {};\n\tvar separator = options.separator || \",\",\n\t\trows = text.split(/\\r?\\n/mg).map(function(row) {\n\t\t\treturn $tw.utils.trim(row);\n\t\t}).filter(function(row) {\n\t\t\treturn row !== \"\";\n\t\t});\n\tif(rows.length < 1) {\n\t\treturn \"Missing header row\";\n\t}\n\tvar headings = rows[0].split(separator),\n\t\tresults = [];\n\tfor(var row=1; row<rows.length; row++) {\n\t\tvar columns = rows[row].split(separator),\n\t\t\tcolumnResult = Object.create(null);\n\t\tif(columns.length !== headings.length) {\n\t\t\treturn \"Malformed CSV row '\" + rows[row] + \"'\";\n\t\t}\n\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\tvar columnName = headings[column];\n\t\t\tcolumnResult[columnName] = $tw.utils.trim(columns[column] || \"\");\n\t\t}\n\t\tresults.push(columnResult);\t\t\t\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/diff-match-patch/diff_match_patch.js": {
"text": "(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[DIFF_EQUAL,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([DIFF_EQUAL,c]);g&&a.push([DIFF_EQUAL,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[DIFF_INSERT,b]];if(!b)return[[DIFF_DELETE,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[DIFF_INSERT,e.substring(0,g)],[DIFF_EQUAL,f],[DIFF_INSERT,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[[DIFF_DELETE,a],[DIFF_INSERT,b]]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([[DIFF_EQUAL,\na]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([DIFF_EQUAL,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case DIFF_INSERT:e++;g+=a[b][1];break;case DIFF_DELETE:d++;f+=a[b][1];break;case DIFF_EQUAL:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=\nd.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=2*f,h=Array(g),l=Array(g),k=0;k<g;k++)h[k]=-1,l[k]=-1;h[f+1]=0;l[f+1]=0;k=d-e;for(var m=0!=k%2,p=0,x=0,w=0,q=0,t=0;t<f&&!((new Date).getTime()>c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]<h[n+1]?h[n+1]:h[n-1]+1;for(var y=r-v;r<d&&y<e&&a.charAt(r)==b.charAt(y);)r++,y++;h[n]=r;if(r>d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n<g&&-1!=l[n])){var u=d-l[n];if(r>=\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]<l[n+1]?l[n+1]:l[n-1]+1;for(r=u-v;u<d&&r<e&&a.charAt(d-u-1)==b.charAt(e-r-1);)u++,r++;l[n]=u;if(u>d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n<g&&-1!=h[n]&&(r=h[n],y=f+r-n,u=d-u,r>=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[[DIFF_DELETE,a],[DIFF_INSERT,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var h=a.substring(c,f+1);c=f+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!==e[h])?b+=String.fromCharCode(e[h]):(b+=String.fromCharCode(g),e[h]=g,d[g++]=h)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;d=0;for(var e=1;;){var f=a.substring(c-e);f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,k,l,m;-1!=(e=b.indexOf(d,e+1));){var p=f.diff_commonPrefix(a.substring(c),b.substring(e)),u=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<u+p&&(g=b.substring(e-u,e)+b.substring(e,e+p),h=a.substring(0,c-u),k=a.substring(c+p),l=b.substring(0,e-u),m=b.substring(e+p))}return 2*g.length>=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4));d=c(d,e,Math.ceil(d.length/2));if(g||d)g=d?g?g[4].length>d[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f<a.length;)a[f][0]==DIFF_EQUAL?(c[d++]=f,g=l,h=k,k=l=0,e=a[f][1]):(a[f][0]==DIFF_INSERT?l+=a[f][1].length:k+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(l,k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,d--,f=0<d?c[d-1]:-1,k=l=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(a[f-1][0]==\nDIFF_DELETE&&a[f][0]==DIFF_INSERT){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[DIFF_EQUAL,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[DIFF_EQUAL,b.substring(0,e)]),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(a[c-1][0]==DIFF_EQUAL&&a[c+1][0]==DIFF_EQUAL){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g){var h=e.substring(e.length-g);d=d.substring(0,d.length-g);e=h+e.substring(0,e.length-g);f=h+f}g=d;h=e;for(var l=f,k=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){d+=e.charAt(0);e=e.substring(1)+f.charAt(0);f=f.substring(1);var m=b(d,e)+b(e,f);m>=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-\n1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;f<a.length;)a[f][0]==DIFF_EQUAL?(a[f][1].length<this.Diff_EditCost&&(l||k)?(c[d++]=f,g=l,h=k,e=a[f][1]):(d=0,e=null),l=k=!1):(a[f][0]==DIFF_DELETE?k=!0:l=!0,e&&(g&&h&&l&&k||e.length<this.Diff_EditCost/2&&3==g+h+l+k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,e=null,g&&h?(l=k=!0,d=0):(d--,f=0<d?c[d-1]:-1,l=k=!1),b=!0)),f++;b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([DIFF_EQUAL,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case DIFF_INSERT:d++;f+=a[b][1];b++;break;case DIFF_DELETE:c++;e+=a[b][1];b++;break;case DIFF_EQUAL:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&a[b-c-d-1][0]==DIFF_EQUAL?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[DIFF_EQUAL,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-\ng)+a[b][1],f=f.substring(0,f.length-g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[DIFF_INSERT,f]):0===d?a.splice(b-c,c+d,[DIFF_DELETE,e]):a.splice(b-c-d,c+d,[DIFF_DELETE,e],[DIFF_INSERT,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&a[b-1][0]==DIFF_EQUAL?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)a[b-1][0]==DIFF_EQUAL&&a[b+1][0]==DIFF_EQUAL&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,\na[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){a[g][0]!==DIFF_INSERT&&(c+=a[g][1].length);a[g][0]!==DIFF_DELETE&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],l=a[g][1].replace(c,\"&\").replace(d,\"<\").replace(e,\">\").replace(f,\"¶<br>\");switch(h){case DIFF_INSERT:b[g]='<ins style=\"background:#e6ffe6;\">'+l+\"</ins>\";break;case DIFF_DELETE:b[g]='<del style=\"background:#ffe6e6;\">'+l+\"</del>\";break;case DIFF_EQUAL:b[g]=\"<span>\"+l+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_INSERT&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_DELETE&&(b[c]=a[c][1]);return b.join(\"\")};\ndiff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][1];switch(a[e][0]){case DIFF_INSERT:c+=f.length;break;case DIFF_DELETE:d+=f.length;break;case DIFF_EQUAL:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case DIFF_INSERT:b[c]=\"+\"+encodeURI(a[c][1]);break;case DIFF_DELETE:b[c]=\"-\"+a[c][1].length;break;case DIFF_EQUAL:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[DIFF_INSERT,decodeURI(h)]}catch(k){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var l=parseInt(h,10);if(isNaN(l)||0>l)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=l);\"=\"==f[g].charAt(0)?c[d++]=[DIFF_EQUAL,h]:c[d++]=[DIFF_DELETE,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<<b.length-1;h=-1;for(var k,m,p=b.length+a.length,x,w=0;w<b.length;w++){k=0;for(m=p;k<m;)d(w,\nc+m)<=g?k=m:p=m,m=Math.floor((p-k)/2+k);p=m;k=Math.max(1,c-m+1);var q=Math.min(c+m,a.length)+b.length;m=Array(q+2);for(m[q+1]=(1<<w)-1;q>=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([DIFF_EQUAL,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([DIFF_EQUAL,d]);a.start1-=c.length;a.start2-=\nc.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c){var d=a;b=this.diff_main(d,b,!0);2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,l=0;l<b.length;l++){var k=b[l][0],m=b[l][1];e||k===DIFF_EQUAL||(a.start1=f,a.start2=g);switch(k){case DIFF_INSERT:a.diffs[e++]=b[l];a.length2+=m.length;d=d.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+=m.length;a.diffs[e++]=b[l];d=d.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length<=2*this.Patch_Margin&&e&&b.length!=l+1?(a.diffs[e++]=b[l],a.length1+=m.length,a.length2+=m.length):\nm.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\ndiff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),l=-1;if(h.length>this.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h,\ng);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;l<a[f].diffs.length;l++){var p=a[f].diffs[l];p[0]!==DIFF_EQUAL&&(m=this.diff_xIndex(g,h));p[0]===\nDIFF_INSERT?b=b.substring(0,k+m)+p[1]+b.substring(k+m):p[0]===DIFF_DELETE&&(b=b.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p[1].length)));p[0]!==DIFF_DELETE&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;d=a[0];var e=d.diffs;if(0==e.length||e[0][0]!=DIFF_EQUAL)e.unshift([DIFF_EQUAL,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||e[e.length-\n1][0]!=DIFF_EQUAL?(e.push([DIFF_EQUAL,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,l=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([DIFF_EQUAL,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){g=d.diffs[0][0];var k=d.diffs[0][1];g===DIFF_INSERT?(h.length2+=k.length,f+=k.length,h.diffs.push(d.diffs.shift()),\nl=!1):g===DIFF_DELETE&&1==h.diffs.length&&h.diffs[0][0]==DIFF_EQUAL&&k.length>2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push([g,k]),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push([g,k]),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,\nthis.Patch_Margin);\"\"!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push([DIFF_EQUAL,k]));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([DIFF_DELETE,g]);else if(\"+\"==e)f.diffs.push([DIFF_INSERT,g]);else if(\" \"==e)f.diffs.push([DIFF_EQUAL,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){for(var a=[\"@@ -\"+(0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1)+\" +\"+(0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2)+\" @@\\n\"],b,c=0;c<this.diffs.length;c++){switch(this.diffs[c][0]){case DIFF_INSERT:b=\"+\";break;case DIFF_DELETE:b=\"-\";break;case DIFF_EQUAL:b=\" \"}a[c+1]=b+encodeURI(this.diffs[c][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=DIFF_DELETE;this.DIFF_INSERT=DIFF_INSERT;this.DIFF_EQUAL=DIFF_EQUAL;\n}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/diff-match-patch/diff_match_patch.js",
"module-type": "library"
},
"$:/core/modules/utils/dom/animations/slide.js": {
"title": "$:/core/modules/utils/dom/animations/slide.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "animation"
},
"$:/core/modules/utils/dom/animator.js": {
"title": "$:/core/modules/utils/dom/animator.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/browser.js": {
"title": "$:/core/modules/utils/dom/browser.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/csscolorparser.js": {
"title": "$:/core/modules/utils/dom/csscolorparser.js",
"text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom.js": {
"title": "$:/core/modules/utils/dom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function(srcWindow) {\n\tvar scrollWindow = srcWindow || window;\n\tif(\"scrollX\" in scrollWindow) {\n\t\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\n\t} else {\n\t\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight || parseInt(minHeight,10);\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tvar done = false;\n\ttry {\n\t\twindow.localStorage.setItem(\"tw5-password-\" + name,password);\n\t\tdone = true;\n\t} catch(e) {\n\t}\n\tif(!done) {\n\t\t$tw.savedPasswords = $tw.savedPasswords || Object.create(null);\n\t\t$tw.savedPasswords[name] = password;\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\tvar value;\n\ttry {\n\t\tvalue = window.localStorage.getItem(\"tw5-password-\" + name);\n\t} catch(e) {\n\t}\n\tif(value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn ($tw.savedPasswords || Object.create(null))[name] || \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n/*\nCopy plain text to the clipboard on browsers that support it\n*/\nexports.copyToClipboard = function(text,options) {\n\toptions = options || {};\n\tvar textArea = document.createElement(\"textarea\");\n\ttextArea.style.position = \"fixed\";\n\ttextArea.style.top = 0;\n\ttextArea.style.left = 0;\n\ttextArea.style.fontSize = \"12pt\";\n\ttextArea.style.width = \"2em\";\n\ttextArea.style.height = \"2em\";\n\ttextArea.style.padding = 0;\n\ttextArea.style.border = \"none\";\n\ttextArea.style.outline = \"none\";\n\ttextArea.style.boxShadow = \"none\";\n\ttextArea.style.background = \"transparent\";\n\ttextArea.value = text;\n\tdocument.body.appendChild(textArea);\n\ttextArea.select();\n\ttextArea.setSelectionRange(0,text.length);\n\tvar succeeded = false;\n\ttry {\n\t\tsucceeded = document.execCommand(\"copy\");\n\t} catch (err) {\n\t}\n\tif(!options.doNotNotify) {\n\t\t$tw.notifier.display(succeeded ? \"$:/language/Notifications/CopiedToClipboard/Succeeded\" : \"$:/language/Notifications/CopiedToClipboard/Failed\");\n\t}\n\tdocument.body.removeChild(textArea);\n};\n\nexports.getLocationPath = function() {\n\treturn window.location.toString().split(\"#\")[0];\n};\n\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/dragndrop.js": {
"title": "$:/core/modules/utils/dom/dragndrop.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\t\t\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\tif(event.dataTransfer === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \tstartActions = options.startActions;\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Invoke drag-start actions if given\n\t\t\t\tif(startActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(startActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t// Collect the tiddlers being dragged\n\t\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \t\tendActions = options.endActions;\n\t\t\t\tif(dragFilter) {\n\t\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t\t}\n\t\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Invoke drag-end actions if given\n\t\t\t\tif(endActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(endActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Available data types:\");\n\t\tfor(var type=0; type<dataTransfer.types.length; type++) {\n\t\t\tconsole.log(\"type\",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]))\n\t\t}\n\t}\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/http.js": {
"title": "$:/core/modules/utils/dom/http.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\theaders: hashmap of headers to send\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data,xhr)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\turl = options.url,\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tif(type === \"GET\" || type === \"HEAD\") {\n\t\t\t\turl += \"?\" + results.join(\"&\");\n\t\t\t} else {\n\t\t\t\tdata = results.join(\"&\");\n\t\t\t}\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status,null,this);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\tif(!$tw.utils.hop(headers,\"X-Requested-With\")) {\n\t\trequest.setRequestHeader(\"X-Requested-With\",\"TiddlyWiki\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e,null,this);\n\t}\n\treturn request;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/keyboard.js": {
"title": "$:/core/modules/utils/dom/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/modal.js": {
"title": "$:/core/modules/utils/dom/modal.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tthis.srcDocument = options.variables && (options.variables.rootwindow === \"true\" ||\n\t\t\t\toptions.variables.rootwindow === \"yes\") ? document :\n\t\t\t\t(options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\n\tthis.srcWindow = this.srcDocument.defaultView;\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalBackdrop = this.srcDocument.createElement(\"div\"),\n\t\tmodalWrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalHeader = this.srcDocument.createElement(\"div\"),\n\t\theaderTitle = this.srcDocument.createElement(\"h3\"),\n\t\tmodalBody = this.srcDocument.createElement(\"div\"),\n\t\tmodalLink = this.srcDocument.createElement(\"a\"),\n\t\tmodalFooter = this.srcDocument.createElement(\"div\"),\n\t\tmodalFooterHelp = this.srcDocument.createElement(\"span\"),\n\t\tmodalFooterButtons = this.srcDocument.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\tif(tiddler.fields && tiddler.fields.class) {\n\t\t$tw.utils.addClass(wrapper,tiddler.fields.class);\n\t}\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(this.srcDocument.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler.fields && tiddler.fields.help) {\n\t\tvar link = this.srcDocument.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(this.srcDocument.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + self.srcWindow.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\tself.srcWindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tself.srcDocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-this.srcWindow.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tthis.srcDocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tvar windowContainer = $tw.pageContainer ? ($tw.pageContainer === this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\n\tif(windowContainer) {\n\t\t$tw.utils.toggleClass(windowContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/notifier.js": {
"title": "$:/core/modules/utils/dom/notifier.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/popup.js": {
"title": "$:/core/modules/utils/dom/popup.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\n\tdomNodeRect: rectangle to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\n\t// Store the popup details if not already there\n\tif(!options.floating && this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode,\n\t\t\tnoStateReference: options.noStateReference\n\t\t});\n\t}\n\t// Set the state tiddler\n\tvar rect;\n\tif(options.domNodeRect) {\n\t\trect = options.domNodeRect;\n\t} else {\n\t\trect = {\n\t\t\tleft: options.domNode.offsetLeft,\n\t\t\ttop: options.domNode.offsetTop,\n\t\t\twidth: options.domNode.offsetWidth,\n\t\t\theight: options.domNode.offsetHeight\n\t\t};\n\t}\n\tvar popupRect = \"(\" + rect.left + \",\" + rect.top + \",\" + \n\t\t\t\trect.width + \",\" + rect.height + \")\";\n\tif(options.noStateReference) {\n\t\toptions.wiki.setText(options.title,\"text\",undefined,popupRect);\n\t} else {\n\t\toptions.wiki.setTextReference(options.title,popupRect);\n\t}\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tif(popup.noStateReference) {\n\t\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t\t} else {\n\t\t\t\tpopup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);\n \t\t}\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/scroller.js": {
"title": "$:/core/modules/utils/dom/scroller.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.isScrolling = function() {\n\treturn this.idRequestFrame !== null;\n}\n\nPageScroller.prototype.cancelScroll = function(srcWindow) {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element,callback) {\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t srcWindow = element ? element.ownerDocument.defaultView : window;\n\t// Now get ready to scroll the body\n\tthis.cancelScroll(srcWindow);\n\tthis.startTime = Date.now();\n\t// Get the height of any position:fixed toolbars\n\tvar toolbar = srcWindow.document.querySelector(\".tc-adjust-top-of-scroll\"),\n\t\toffset = 0;\n\tif(toolbar) {\n\t\toffset = toolbar.offsetHeight;\n\t}\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar getBounds = function() {\n\t\t\tvar clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(),\n\t\t\t\tscrollPosition = $tw.utils.getScrollPosition(srcWindow);\n\t\t\treturn {\n\t\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\t\ttop: clientBounds.top + scrollPosition.y - offset,\n\t\t\t\twidth: clientBounds.width,\n\t\t\t\theight: clientBounds.height\n\t\t\t};\n\t\t},\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\t// targetPos/targetSize - position and size of the target element\n\t\t// currentPos/currentSize - position and size of the current scroll viewport\n\t\t// returns: new position of the scroll viewport\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = targetPos;\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tdrawFrame = function drawFrame() {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll(srcWindow);\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(srcWindow),\n\t\t\t\tbounds = getBounds(),\n\t\t\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\n\t\t\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\n\t\t\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\tdrawFrame();\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/edition-info.js": {
"title": "$:/core/modules/utils/edition-info.js",
"text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/fakedom.js": {
"title": "$:/core/modules/utils/fakedom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis._style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nObject.defineProperty(TW_Element.prototype, \"style\", {\n\tget: function() {\n\t\treturn this._style;\n\t},\n\tset: function(str) {\n\t\tvar self = this;\n\t\tstr = str || \"\";\n\t\t$tw.utils.each(str.split(\";\"),function(declaration) {\n\t\t\tvar parts = declaration.split(\":\"),\n\t\t\t\tname = $tw.utils.trim(parts[0]),\n\t\t\t\tvalue = $tw.utils.trim(parts[1]);\n\t\t\tif(name && value) {\n\t\t\t\tself._style[$tw.utils.convertStyleNameToPropertyName(name)] = value;\n\t\t\t}\n\t\t});\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this._style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this._style) {\n\t\t\t\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \":\" + this._style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\");\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/filesystem.js": {
"title": "$:/core/modules/utils/filesystem.js",
"text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = Buffer.alloc(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n/*\nCreate a fileInfo object for saving a tiddler:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\nOptions include:\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n*/\nexports.generateTiddlerFileInfo = function(tiddler,options) {\n\tvar fileInfo = {};\n\t// Check if the tiddler has any unsafe fields that can't be expressed in a .tid or .meta file: containing control characters, or leading/trailing whitespace\n\tvar hasUnsafeFields = false;\n\t$tw.utils.each(tiddler.getFieldStrings(),function(value,fieldName) {\n\t\tif(fieldName !== \"text\") {\n\t\t\thasUnsafeFields = hasUnsafeFields || /[\\x00-\\x1F]/mg.test(value);\n\t\t\thasUnsafeFields = hasUnsafeFields || ($tw.utils.trim(value) !== value);\n\t\t}\n\t});\n\t// Check for field values \n\tif(hasUnsafeFields) {\n\t\t// Save as a JSON file\n\t\tfileInfo.type = \"application/json\";\n\t\tfileInfo.hasMetaFile = false;\n\t} else {\n\t\t// Save as a .tid or a text/binary file plus a .meta file\n\t\tvar tiddlerType = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\tif(tiddlerType === \"text/vnd.tiddlywiki\") {\n\t\t\t// Save as a .tid file\n\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\tfileInfo.hasMetaFile = false;\n\t\t} else {\n\t\t\t// Save as a text/binary file and a .meta file\n\t\t\tfileInfo.type = tiddlerType;\n\t\t\tfileInfo.hasMetaFile = true;\n\t\t}\n\t}\n\t// Take the file extension from the tiddler content type\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[fileInfo.type] || {extension: \"\"};\n\t// Generate the filepath\n\tfileInfo.filepath = $tw.utils.generateTiddlerFilepath(tiddler.fields.title,{\n\t\textension: contentTypeInfo.extension,\n\t\tdirectory: options.directory,\n\t\tpathFilters: options.pathFilters,\n\t\twiki: options.wiki\n\t});\n\treturn fileInfo;\n};\n\n/*\nGenerate the filepath for saving a tiddler\nOptions include:\n\textension: file extension to be added the finished filepath\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n*/\nexports.generateTiddlerFilepath = function(title,options) {\n\tvar self = this,\n\t\tdirectory = options.directory || \"\",\n\t\textension = options.extension || \"\",\n\t\tfilepath;\n\t// Check if any of the pathFilters applies\n\tif(options.pathFilters && options.wiki) {\n\t\t$tw.utils.each(options.pathFilters,function(filter) {\n\t\t\tif(!filepath) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\tfilepath = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// If not, generate a base pathname\n\tif(!filepath) {\n\t\tfilepath = title;\n\t\t// If the filepath already ends in the extension then remove it\n\t\tif(filepath.substring(filepath.length - extension.length) === extension) {\n\t\t\tfilepath = filepath.substring(0,filepath.length - extension.length);\n\t\t}\n\t\t// Remove any forward or backward slashes so we don't create directories\n\t\tfilepath = filepath.replace(/\\/|\\\\/g,\"_\");\n\t}\n\t// Don't let the filename start with a dot because such files are invisible on *nix\n\tfilepath = filepath.replace(/^\\./g,\"_\");\n\t// Remove any characters that can't be used in cross-platform filenames\n\tfilepath = $tw.utils.transliterate(filepath.replace(/<|>|\\:|\\\"|\\||\\?|\\*|\\^/g,\"_\"));\n\t// Truncate the filename if it is too long\n\tif(filepath.length > 200) {\n\t\tfilepath = filepath.substr(0,200);\n\t}\n\t// If the resulting filename is blank (eg because the title is just punctuation characters)\n\tif(!filepath) {\n\t\t// ...then just use the character codes of the title\n\t\tfilepath = \"\";\t\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tif(filepath) {\n\t\t\t\tfilepath += \"-\";\n\t\t\t}\n\t\t\tfilepath += char.charCodeAt(0).toString();\n\t\t});\n\t}\n\t// Add a uniquifier if the file already exists\n\tvar fullPath,\n\t\tcount = 0;\n\tdo {\n\t\tfullPath = path.resolve(directory,filepath + (count ? \"_\" + count : \"\") + extension);\n\t\tcount++;\n\t} while(fs.existsSync(fullPath));\n\t// Return the full path to the file\n\treturn fullPath;\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFile = function(tiddler,fileInfo,callback) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFile(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tfs.writeFile(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\",callback);\n\t\t});\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFile(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\",callback);\n\t\t} else {\n\t\t\tfs.writeFile(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\",callback);\n\t\t}\n\t}\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFileSync = function(tiddler,fileInfo) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFileSync(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding);\n\t\tfs.writeFileSync(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\");\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFileSync(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\");\n\t\t} else {\n\t\t\tfs.writeFileSync(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/logger.js": {
"title": "$:/core/modules/utils/logger.js",
"text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n\tthis.save = \"save\" in options ? options.save : true;\n\tthis.saveLimit = options.saveLimit || 100 * 1024;\n\tthis.saveBufferLogger = this;\n\tthis.buffer = \"\";\n\tthis.alertCount = 0;\n}\n\nLogger.prototype.setSaveBuffer = function(logger) {\n\tthis.saveBufferLogger = logger;\n};\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tvar self = this;\n\tif(this.enable) {\n\t\tif(this.saveBufferLogger.save) {\n\t\t\tthis.saveBufferLogger.buffer += $tw.utils.formatDateString(new Date(),\"YYYY MM DD 0hh:0mm:0ss.0XXX\") + \":\";\n\t\t\t$tw.utils.each(Array.prototype.slice.call(arguments,0),function(arg,index) {\n\t\t\t\tself.saveBufferLogger.buffer += \" \" + arg;\n\t\t\t});\n\t\t\tthis.saveBufferLogger.buffer += \"\\n\";\n\t\t\tthis.saveBufferLogger.buffer = this.saveBufferLogger.buffer.slice(-this.saveBufferLogger.saveLimit);\t\t\t\n\t\t}\n\t\tif(console !== undefined && console.log !== undefined) {\n\t\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t\t}\n\t} \n};\n\n/*\nRead the message buffer\n*/\nLogger.prototype.getBuffer = function() {\n\treturn this.saveBufferLogger.buffer;\n};\n\n/*\nLog a structure as a table\n*/\nLogger.prototype.table = function(value) {\n\t(console.table || console.log)(value);\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t\tthis.alertCount += 1;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\t\t\n\t}\n};\n\n/*\nClear outstanding alerts\n*/\nLogger.prototype.clearAlerts = function() {\n\tvar self = this;\n\tif($tw.browser && this.alertCount > 0) {\n\t\t$tw.utils.each($tw.wiki.getTiddlersWithTag(ALERT_TAG),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(tiddler.fields.component === self.componentName) {\n\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t}\n\t\t});\n\t\tthis.alertCount = 0;\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/parsetree.js": {
"title": "$:/core/modules/utils/parsetree.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/performance.js": {
"title": "$:/core/modules/utils/performance.js",
"text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap by measurement name of {time:, invocations:}\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n\tthis.showGreeting();\n}\n\nPerformance.prototype.showGreeting = function() {\n\tif($tw.browser) {\n\t\tthis.logger.log(\"Execute $tw.perf.log(); to see filter execution timings\");\t\t\n\t}\n};\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nPerformance.prototype.log = function() {\n\tvar self = this,\n\t\ttotalTime = 0,\n\t\torderedMeasures = Object.keys(this.measures).sort(function(a,b) {\n\t\t\tif(self.measures[a].time > self.measures[b].time) {\n\t\t\t\treturn -1;\n\t\t\t} else if (self.measures[a].time < self.measures[b].time) {\n\t\t\t\treturn + 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\ttotalTime += self.measures[name].time;\n\t});\n\tvar results = []\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\tvar measure = self.measures[name];\n\t\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\n\t});\n\tself.logger.table(results);\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tif(!(name in self.measures)) {\n\t\t\t\tself.measures[name] = {time: 0, invocations: 0};\n\t\t\t}\n\t\t\tself.measures[name].time += $tw.utils.timer(startTime);\n\t\t\tself.measures[name].invocations++;\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/pluginmaker.js": {
"title": "$:/core/modules/utils/pluginmaker.js",
"text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/transliterate.js": {
"title": "$:/core/modules/utils/transliterate.js",
"text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\nexports.transliterateToSafeASCII = function(str) {\n\treturn str.replace(/[^\\x00-\\x7F]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || \"\"\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/utils.js": {
"title": "$:/core/modules/utils/utils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar base64utf8 = require(\"$:/core/modules/utils/base64-utf8/base64-utf8.module.js\");\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nReturn the integer represented by the str (string).\nReturn the dflt (default) parameter if str is not a base-10 number.\n*/\nexports.getInt = function(str,deflt) {\n\tvar i = parseInt(str,10);\n\treturn isNaN(i) ? deflt : i;\n}\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nConvert a string to sentence case (ie capitalise first letter)\n*/\nexports.toSentenceCase = function(str) {\n\treturn (str || \"\").replace(/^\\S/, function(c) {return c.toUpperCase();});\n}\n\n/*\nConvert a string to title case (ie capitalise each initial letter)\n*/\nexports.toTitleCase = function(str) {\n\treturn (str || \"\").replace(/(^|\\s)\\S/g, function(c) {return c.toUpperCase();});\n}\n\t\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nDetermine whether an array-item is an object-property\n*/\nexports.hopArray = function(object,array) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tif($tw.utils.hop(object,array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.getYearForWeekNo(date);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn date.getFullYear();\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds(),3);\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means\n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\")\n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t}\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call();\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\", duration: 365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\", duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\", duration: 24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\", duration: 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration: 60 * 1000},\n\t\t{name: \"Seconds\", duration: 1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\", \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2), // Strip the & and the ;\n\t\tc;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\tc = parseInt(e.substr(2),16);\n\t\t} else {\n\t\t\tc = parseInt(e.substr(1),10);\n\t\t}\n\t\tif(isNaN(c)) {\n\t\t\treturn s;\n\t\t} else {\n\t\t\treturn converter(c);\n\t\t}\n\t} else {\n\t\tc = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/'/g, \"\\\\'\") // single quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s) {\n\t// See http://www.json.org/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/\\x08/g, '\\\\b') // backspace\n\t\t.replace(/\\x0c/g, '\\\\f') // formfeed\n\t\t.replace(/\\t/g, '\\\\t') // tab\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10) || 0;\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\treturn base64utf8.base64.decode.call(base64utf8,string64);\n};\n\n/*\nEncode a string to base64\n*/\nexports.base64Encode = function(string64) {\n\treturn base64utf8.base64.encode.call(base64utf8,string64);\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\n\t\tm = r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type,_canonical_uri) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tif(_canonical_uri) {\n\t\tparts.push(_canonical_uri);\n\t} else {\n\t\tparts.push(\"data:\");\n\t\tparts.push(type);\n\t\tparts.push(isBase64 ? \";base64\" : \"\");\n\t\tparts.push(\",\");\n\t\tparts.push(isBase64 ? text : encodeURIComponent(text));\t\t\n\t}\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n/*\nReturn system information useful for debugging\n*/\nexports.getSystemInfo = function(str,ending,position) {\n\tvar results = [],\n\t\tsave = function(desc,value) {\n\t\t\tresults.push(desc + \": \" + value);\n\t\t};\n\tif($tw.browser) {\n\t\tsave(\"User Agent\",navigator.userAgent);\n\t\tsave(\"Online Status\",window.navigator.onLine);\n\t}\n\tif($tw.node) {\n\t\tsave(\"Node Version\",process.version);\n\t}\n\treturn results.join(\"\\n\");\n};\n\nexports.parseNumber = function(str) {\n\treturn parseFloat(str) || 0;\n};\n\nexports.parseInt = function(str) {\n\treturn parseInt(str,10) || 0;\n};\n\nexports.stringifyNumber = function(num) {\n\treturn num + \"\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/widgets/action-createtiddler.js": {
"title": "$:/core/modules/widgets/action-createtiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw:false, require:false, exports:false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.hasBase = !!this.actionBaseTitle;\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionSaveDraftTitle = this.getAttribute(\"$savedrafttitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n\t//Following params are new since 5.1.22\n\tthis.actionTemplate = this.getAttribute(\"$template\");\n\tthis.useTemplate = !!this.actionTemplate;\n\tthis.actionOverwrite = this.getAttribute(\"$overwrite\",\"no\");\n\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.getTiddlerText(\"$:/language/DefaultNewTiddlerTitle\"), // Get the initial new-tiddler title\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tif(this.hasBase && this.actionOverwrite === \"no\") {\n\t\ttitle = this.wiki.generateNewTitle(this.actionBaseTitle);\n\t} else if (this.hasBase && this.actionOverwrite === \"yes\") {\n\t\ttitle = this.actionBaseTitle\n\t}\n\t// NO $basetitle BUT $template parameter is available\n\t// the title MUST be unique, otherwise the template would be overwritten\n\tif (!this.hasBase && this.useTemplate) {\n\t\ttitle = this.wiki.generateNewTitle(this.actionTemplate);\n\t} else if (!this.hasBase && !this.useTemplate) {\n\t\t// If NO $basetitle AND NO $template use initial title\n\t\t// DON'T overwrite any stuff\n\t\ttitle = this.wiki.generateNewTitle(title);\n\t}\n\tvar templateTiddler = this.wiki.getTiddler(this.actionTemplate) || {};\n\tvar tiddler = this.wiki.addTiddler(new $tw.Tiddler(templateTiddler.fields,creationFields,fields,modificationFields,{title: title}));\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.actionSaveDraftTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveDraftTitle,this.wiki.generateDraftTitle(title),this.getVariable(\"currentTiddler\"));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletefield.js": {
"title": "$:/core/modules/widgets/action-deletefield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField && tiddler) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletetiddler.js": {
"title": "$:/core/modules/widgets/action-deletetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-listops.js": {
"title": "$:/core/modules/widgets/action-listops.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-navigate.js": {
"title": "$:/core/modules/widgets/action-navigate.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tevent = event || {};\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-popup.js": {
"title": "$:/core/modules/widgets/action-popup.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-popup.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to trigger a popup.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ActionPopupWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nActionPopupWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nActionPopupWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nActionPopupWidget.prototype.execute = function() {\n\tthis.actionState = this.getAttribute(\"$state\");\n\tthis.actionCoords = this.getAttribute(\"$coords\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nActionPopupWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$state\"] || changedAttributes[\"$coords\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nActionPopupWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Trigger the popup\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(this.actionCoords);\n\tif(match) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: null,\n\t\t\tdomNodeRect: {\n\t\t\t\tleft: parseFloat(match[1]),\n\t\t\t\ttop: parseFloat(match[2]),\n\t\t\t\twidth: parseFloat(match[3]),\n\t\t\t\theight: parseFloat(match[4])\n\t\t\t},\n\t\t\ttitle: this.actionState,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-popup\"] = ActionPopupWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-sendmessage.js": {
"title": "$:/core/modules/widgets/action-sendmessage.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-setfield.js": {
"title": "$:/core/modules/widgets/action-setfield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\") || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/browse.js": {
"title": "$:/core/modules/widgets/browse.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/button.js": {
"title": "$:/core/modules/widgets/button.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = \"button\";\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\t\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(self,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup || self.popupTitle) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set || self.setTitle) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) === this.setTo :\n\t\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) === this.setTo :\n\t\t\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\"currentTiddler\") :\n\t\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\tif(this.popupTitle) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popupTitle,\n\t\t\twiki: this.wiki,\n\t\t\tnoStateReference: true\n\t\t});\n\t} else {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popup,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tif(this.setTitle) {\n\t\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\n\t\t\t\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\n\t\t\t\tthis.wiki.setText(this.setTitle,\"text\",undefined,this.setTo));\n\t} else {\n\t\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\tthis.setTitle = this.getAttribute(\"setTitle\");\n\tthis.setField = this.getAttribute(\"setField\");\n\tthis.setIndex = this.getAttribute(\"setIndex\");\n\tthis.popupTitle = this.getAttribute(\"popupTitle\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/checkbox.js": {
"title": "$:/core/modules/widgets/checkbox.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n\tif(this.checkboxCheckActions && checked) {\n\t\tthis.invokeActionString(this.checkboxCheckActions,this,event);\n\t}\n\tif(this.checkboxUncheckActions && !checked) {\n\t\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxCheckActions = this.getAttribute(\"checkactions\");\n\tthis.checkboxUncheckActions = this.getAttribute(\"uncheckactions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/codeblock.js": {
"title": "$:/core/modules/widgets/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/count.js": {
"title": "$:/core/modules/widgets/count.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = \"0\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/diff-text.js": {
"title": "$:/core/modules/widgets/diff-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/diff-text.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display a diff between two texts\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tdmp = require(\"$:/core/modules/utils/diff-match-patch/diff_match_patch.js\");\n\nvar DiffTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDiffTextWidget.prototype = new Widget();\n\nDiffTextWidget.prototype.invisibleCharacters = {\n\t\"\\n\": \"↩︎\\n\",\n\t\"\\r\": \"⇠\",\n\t\"\\t\": \"⇥\\t\"\n};\n\n/*\nRender this widget into the DOM\n*/\nDiffTextWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create the diff\n\tvar dmpObject = new dmp.diff_match_patch(),\n\t\tdiffs = dmpObject.diff_main(this.getAttribute(\"source\"),this.getAttribute(\"dest\"));\n\t// Apply required cleanup\n\tswitch(this.getAttribute(\"cleanup\",\"semantic\")) {\n\t\tcase \"none\":\n\t\t\t// No cleanup\n\t\t\tbreak;\n\t\tcase \"efficiency\":\n\t\t\tdmpObject.diff_cleanupEfficiency(diffs);\n\t\t\tbreak;\n\t\tdefault: // case \"semantic\"\n\t\t\tdmpObject.diff_cleanupSemantic(diffs);\n\t\t\tbreak;\n\t}\n\t// Create the elements\n\tvar domContainer = this.document.createElement(\"div\"), \n\t\tdomDiff = this.createDiffDom(diffs);\n\tparent.insertBefore(domContainer,nextSibling);\n\t// Set variables\n\tthis.setVariable(\"diff-count\",diffs.reduce(function(acc,diff) {\n\t\tif(diff[0] !== dmp.DIFF_EQUAL) {\n\t\t\tacc++;\n\t\t}\n\t\treturn acc;\n\t},0).toString());\n\t// Render child widgets\n\tthis.renderChildren(domContainer,null);\n\t// Render the diff\n\tdomContainer.appendChild(domDiff);\n\t// Save our container\n\tthis.domNodes.push(domContainer);\n};\n\n/*\nCreate DOM elements representing a list of diffs\n*/\nDiffTextWidget.prototype.createDiffDom = function(diffs) {\n\tvar self = this;\n\t// Create the element and assign the attributes\n\tvar domPre = this.document.createElement(\"pre\"),\n\t\tdomCode = this.document.createElement(\"code\");\n\t$tw.utils.each(diffs,function(diff) {\n\t\tvar tag = diff[0] === dmp.DIFF_INSERT ? \"ins\" : (diff[0] === dmp.DIFF_DELETE ? \"del\" : \"span\"),\n\t\t\tclassName = diff[0] === dmp.DIFF_INSERT ? \"tc-diff-insert\" : (diff[0] === dmp.DIFF_DELETE ? \"tc-diff-delete\" : \"tc-diff-equal\"),\n\t\t\tdom = self.document.createElement(tag),\n\t\t\ttext = diff[1],\n\t\t\tcurrPos = 0,\n\t\t\tre = /([\\x00-\\x1F])/mg,\n\t\t\tmatch = re.exec(text),\n\t\t\tspan,\n\t\t\tprintable;\n\t\tdom.className = className;\n\t\twhile(match) {\n\t\t\tif(currPos < match.index) {\n\t\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\n\t\t\t}\n\t\t\tspan = self.document.createElement(\"span\");\n\t\t\tspan.className = \"tc-diff-invisible\";\n\t\t\tprintable = self.invisibleCharacters[match[0]] || (\"[0x\" + match[0].charCodeAt(0).toString(16) + \"]\");\n\t\t\tspan.appendChild(self.document.createTextNode(printable));\n\t\t\tdom.appendChild(span);\n\t\t\tcurrPos = match.index + match[0].length;\n\t\t\tmatch = re.exec(text);\n\t\t}\n\t\tif(currPos < text.length) {\n\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\n\t\t}\n\t\tdomCode.appendChild(dom);\n\t});\n\tdomPre.appendChild(domCode);\n\treturn domPre;\n};\n\n/*\nCompute the internal state of the widget\n*/\nDiffTextWidget.prototype.execute = function() {\n\t// Make child widgets\n\tvar parseTreeNodes;\n\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: \"$:/language/Diffs/CountMessage\"}\n\t\t\t}\n\t\t}];\n\t}\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDiffTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"diff-text\"] = DiffTextWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/draggable.js": {
"title": "$:/core/modules/widgets/draggable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\tstartActions: self.startActions,\n\t\tendActions: self.endActions,\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\tthis.startActions = this.getAttribute(\"startactions\");\n\tthis.endActions = this.getAttribute(\"endactions\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/droppable.js": {
"title": "$:/core/modules/widgets/droppable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tvar domNode = this.document.createElement(tag),\n\t\tclasses = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tdomNode.className = classes.join(\" \");\n\t// Add event handlers\n\tif(this.droppableEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t\t]);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tvar modifierKey = event.ctrlKey && ! event.shiftKey ? \"ctrl\" : event.shiftKey && !event.ctrlKey ? \"shift\" : \n\t\t\t\tevent.ctrlKey && event.shiftKey ? \"ctrl-shift\" : \"normal\" ;\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableClass = this.getAttribute(\"class\");\n\tthis.droppableEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"] || changedAttributes.tag || changedAttributes.enable) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/dropzone.js": {
"title": "$:/core/modules/widgets/dropzone.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = this.dropzoneClass || \"tc-dropzone\";\n\t// Add event handlers\n\tif(this.dropzoneEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t\t]);\t\t\n\t}\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent = function(event) {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDragEndEvent = function(event) {\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\t$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle(\"Untitled\"),readFileCallback);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1 && !event.target.isContentEditable) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneClass = this.getAttribute(\"class\");\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\tthis.dropzoneEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.enable) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-binary.js": {
"title": "$:/core/modules/widgets/edit-binary.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Get our parameters\n\tvar editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tvar tiddler = this.wiki.getTiddler(editTitle);\n\tvar type = tiddler.fields.type;\n\tvar text = tiddler.fields.text;\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on draft tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!draft.title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!draft.title\"}\n\t\t},\n\t\tchildren: [{\n\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to internal data URI (no external)\n\tif(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets([element]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-bitmap.js": {
"title": "$:/core/modules/widgets/edit-bitmap.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370,\n\tDEFAULT_IMAGE_TYPE = \"image/png\";\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tif(tiddler && tiddler.fields.type && tiddler.fields.text) {\n\t\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\t\t\n\t} else {\n\t\tcurrImage.width = DEFAULT_IMAGE_WIDTH;\n\t\tcurrImage.height = DEFAULT_IMAGE_HEIGHT;\n\t\tcurrImage.onerror();\n\t}\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\n/*\n** Rotate the canvas left by 90 degrees\n*/\nEditBitmapWidget.prototype.rotateCanvasLeft = function() {\n\t// Get the current size of the image\n\tvar origWidth = this.currCanvas.width,\n\t\torigHeight = this.currCanvas.height;\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\"),\n\t\tnewWidth = origHeight,\n\t\tnewHeight = origWidth;\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.save();\n\tctx.translate(newWidth / 2,newHeight / 2);\n\tctx.rotate(-Math.PI / 2);\n\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\n\tctx.restore();\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle) || new $tw.Tiddler({title: this.editTitle,type: DEFAULT_IMAGE_TYPE});\n\t// data URIs look like \"data:<type>;base64,<text>\"\n\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\tposColon = dataURL.indexOf(\":\"),\n\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\tposComma = dataURL.indexOf(\",\"),\n\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\ttext = dataURL.substring(posComma+1);\n\tvar update = {type: type, text: text};\n\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-shortcut.js": {
"title": "$:/core/modules/widgets/edit-shortcut.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n\t// Focus the input Node if focus === \"yes\" or focus === \"true\"\n\tif(this.shortcutFocus === \"yes\" || this.shortcutFocus === \"true\") {\n\t\tthis.focus();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n\tthis.shortcutFocus = this.getAttribute(\"focus\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nfocus the input node\n*/\nEditShortcutWidget.prototype.focus = function() {\n\tif(this.inputNode.focus && this.inputNode.select) {\n\t\tthis.inputNode.focus();\n\t\tthis.inputNode.select();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"] || changedAttributes.focus) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-text.js": {
"title": "$:/core/modules/widgets/edit-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit.js": {
"title": "$:/core/modules/widgets/edit.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\tthis.editFocus = this.getAttribute(\"focus\",\"\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder},\n\t\t\t\"tabindex\": {type: \"string\", value: this.editTabIndex},\n\t\t\t\"focus\": {type: \"string\", value: this.editFocus}\n\t\t},\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/element.js": {
"title": "$:/core/modules/widgets/element.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\t// Adjust headings by the current base level\n\tvar headingLevel = [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"].indexOf(tag);\n\tif(headingLevel !== -1) {\n\t\tvar baseLevel = parseInt(this.getVariable(\"tv-adjust-heading-level\",\"0\"),10) || 0;\n\t\theadingLevel = Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\n\t\ttag = \"h\" + headingLevel;\n\t}\n\t// Create the DOM node\n\tvar domNode = this.document.createElementNS(this.namespace,tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/encrypt.js": {
"title": "$:/core/modules/widgets/encrypt.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/entity.js": {
"title": "$:/core/modules/widgets/entity.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fieldmangler.js": {
"title": "$:/core/modules/widgets/fieldmangler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fields.js": {
"title": "$:/core/modules/widgets/fields.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.sort = this.getAttribute(\"sort\",\"yes\") === \"yes\";\n\tthis.sortReverse = this.getAttribute(\"sortReverse\",\"no\") === \"yes\";\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.include = this.getAttribute(\"include\",null);\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\n\t// Get the inclusion and exclusion list\n\tvar excludeArr = (this.exclude) ? this.exclude.split(\" \") : [\"text\"];\n\t// Include takes precedence\n\tvar includeArr = (this.include) ? this.include.split(\" \") : null;\n\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tif (includeArr) { // Include takes precedence\n\t\t\tfor(var i=0; i<includeArr.length; i++) {\n\t\t\t\tif(tiddler.fields[includeArr[i]]) {\n\t\t\t\t\tfields.push(includeArr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\tif(excludeArr.indexOf(fieldName) === -1) {\n\t\t\t\t\tfields.push(fieldName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.sort) fields.sort();\n\t\tif (this.sortReverse) fields.reverse();\n\t\tfor(var f=0, fmax=fields.length; f<fmax; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tvar row = this.template,\n\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\tif(reMatch) {\n\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\ttext.push(row);\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif( changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude ||\n\t\tchangedAttributes.include || changedAttributes.sort || changedAttributes.sortReverse ||\n\t\tchangedTiddlers[this.tiddlerTitle] || changedAttributes.stripTitlePrefix) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/image.js": {
"title": "$:/core/modules/widgets/image.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/importvariables.js": {
"title": "$:/core/modules/widgets/importvariables.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar widgetPointer = this;\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = widgetPointer.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\tvar node = {\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params,\n\t\t\t\t\tisMacroDefinition: parseTreeNode.isMacroDefinition\n\t\t\t\t};\n\t\t\t\tif (parseTreeNode.isMacroDefinition) {\n\t\t\t\t\t// Macro definitions can be folded into\n\t\t\t\t\t// current widget instead of adding\n\t\t\t\t\t// another link to the chain.\n\t\t\t\t\tvar widget = widgetPointer.makeChildWidget(node);\n\t\t\t\t\twidget.computeAttributes();\n\t\t\t\t\twidget.execute();\n\t\t\t\t\t// We SHALLOW copy over all variables\n\t\t\t\t\t// in widget. We can't use\n\t\t\t\t\t// $tw.utils.assign, because that copies\n\t\t\t\t\t// up the prototype chain, which we\n\t\t\t\t\t// don't want.\n\t\t\t\t\t$tw.utils.each(Object.keys(widget.variables), function(key) {\n\t\t\t\t\t\twidgetPointer.variables[key] = widget.variables[key];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\twidgetPointer.makeChildWidgets([node]);\n\t\t\t\t\twidgetPointer = widgetPointer.children[0];\n\t\t\t\t}\n\t\t\t\tparseTreeNode = parseTreeNode.children && parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\n\tif (widgetPointer != this) {\n\t\twidgetPointer.parseTreeNode.children = this.parseTreeNode.children;\n\t} else {\n\t\twidgetPointer.makeChildWidgets();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/keyboard.js": {
"title": "$:/core/modules/widgets/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tself.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\",\"\");\n\tthis.message = this.getAttribute(\"message\",\"\");\n\tthis.param = this.getAttribute(\"param\",\"\");\n\tthis.key = this.getAttribute(\"key\",\"\");\n\tthis.tag = this.getAttribute(\"tag\",\"\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tif(this.key.substr(0,2) === \"((\" && this.key.substr(-2,2) === \"))\") {\n\t\tthis.shortcutTiddlers = [];\n\t\tvar name = this.key.substring(2,this.key.length -2);\n\t\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\n\t\t\tself.shortcutTiddlers.push(\"$:/config/\" + platformDescriptor + \"/\" + name);\n\t\t});\n\t}\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\n\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) {\n\t\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/link.js": {
"title": "$:/core/modules/widgets/link.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.overrideClasses === undefined) {\n\t\tclasses.push(\"tc-tiddlylink\");\n\t\tif(this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t\t}\n\t\tif(this.isMissing && !this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t\t} else {\n\t\t\tif(!this.isMissing) {\n\t\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t\t}\n\t\t}\n\t\tif(this.linkClasses) {\n\t\t\tclasses.push(this.linkClasses);\t\t\t\n\t\t}\n\t} else if(this.overrideClasses !== \"\") {\n\t\tclasses.push(this.overrideClasses)\n\t}\n\tif(classes.length > 0) {\n\t\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t}\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.overrideClasses = this.getAttribute(\"overrideClass\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = (this.getVariable(\"tv-show-missing-links\") || \"yes\") === \"no\";\n\t// Make the child widgets\n\tvar templateTree;\n\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\ttemplateTree = this.parseTreeNode.children;\n\t} else {\n\t\t// Default template is a link to the title\n\t\ttemplateTree = [{type: \"text\", text: this.to}];\n\t}\n\tthis.makeChildWidgets(templateTree);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/linkcatcher.js": {
"title": "$:/core/modules/widgets/linkcatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/list.js": {
"title": "$:/core/modules/widgets/list.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/macrocall.js": {
"title": "$:/core/modules/widgets/macrocall.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar macroName = this.parseTreeNode.name || this.getAttribute(\"$name\"),\n\t\tvariableInfo = this.getVariableInfo(macroName,{params: params}),\n\t\ttext = variableInfo.text,\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t\t// Wrap the parse tree in a vars widget assigning the parameters to variables named \"__paramname__\"\n\t\tvar attributes = {};\n\t\t$tw.utils.each(variableInfo.params,function(param) {\n\t\t\tvar name = \"__\" + param.name + \"__\";\n\t\t\tattributes[name] = {\n\t\t\t\tname: name,\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: param.value\n\t\t\t};\n\t\t});\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"vars\",\n\t\t\tattributes: attributes,\n\t\t\tchildren: parseTreeNodes\n\t\t}];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/navigator.js": {
"title": "$:/core/modules/widgets/navigator.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tif(this.storyTitle) {\n\t\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\t{title: this.storyTitle},\n\t\t\tstoryTiddler,\n\t\t\t{list: storyList}\n\t\t));\t\t\n\t}\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tif(storyList) {\n\t\tvar p = storyList.indexOf(title);\n\t\twhile(p !== -1) {\n\t\t\tstoryList.splice(p,1);\n\t\t\tp = storyList.indexOf(title);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tif(storyList) {\n\t\tvar pos = storyList.indexOf(oldTitle);\n\t\tif(pos !== -1) {\n\t\t\tstoryList[pos] = newTitle;\n\t\t\tdo {\n\t\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\t\tif(pos !== -1) {\n\t\t\t\t\tstoryList.splice(pos,1);\n\t\t\t\t}\n\t\t\t} while(pos !== -1);\n\t\t} else {\n\t\t\tstoryList.splice(0,0,newTitle);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tif(this.storyTitle) {\n\t\tthis.wiki.addToStory(title,fromTitle,this.storyTitle,{\n\t\t\topenLinkFromInsideRiver: this.getAttribute(\"openLinkFromInsideRiver\",\"top\"),\n\t\t\topenLinkFromOutsideRiver: this.getAttribute(\"openLinkFromOutsideRiver\",\"top\")\n\t\t});\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\treturn this.wiki.generateDraftTitle(title);\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\nconsole.log(\"Relinking '\" + draftOf + \"' to '\" + draftTitle + \"'\");\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-cancelling-tiddler\", event);\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-new-tiddler\", event);\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList && storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tif(slot === -1) {\n\t\t\tslot = this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\" ? storyList.length - 1 : slot;\n\t\t}\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList && storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList && storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix || \"$:/state/folded/\";\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\tthis.wiki.renameTiddler(from,to);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/password.js": {
"title": "$:/core/modules/widgets/password.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/qualify.js": {
"title": "$:/core/modules/widgets/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/qualify.js\ntype: application/javascript\nmodule-type: widget\n\nQualify text to a variable \n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar QualifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nQualifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nQualifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nQualifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.qualifyName = this.getAttribute(\"name\");\n\tthis.qualifyTitle = this.getAttribute(\"title\");\n\t// Set context variable\n\tif(this.qualifyName) {\n\t\tthis.setVariable(this.qualifyName,this.qualifyTitle + \"-\" + this.getStateQualifier());\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nQualifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.title) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.qualify = QualifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/radio.js": {
"title": "$:/core/modules/widgets/radio.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tvar isChecked = this.getValue() === this.radioValue;\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",\n \t\t\"tc-radio \" + this.radioClass + (isChecked ? \" tc-radio-selected\" : \"\")\n \t);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(isChecked) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif (this.radioIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t} else {\n\t\tvalue = tiddler && tiddler.getFieldString(this.radioField);\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/range.js": {
"title": "$:/core/modules/widgets/range.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/range.js\ntype: application/javascript\nmodule-type: widget\n\nRange widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RangeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRangeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRangeWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"range\");\n\tthis.inputDomNode.setAttribute(\"class\",this.elementClass);\n\tif(this.minValue){\n\t\tthis.inputDomNode.setAttribute(\"min\", this.minValue);\n\t}\n\tif(this.maxValue){\n\t\tthis.inputDomNode.setAttribute(\"max\", this.maxValue);\n\t}\n\tif(this.increment){\n\t\tthis.inputDomNode.setAttribute(\"step\", this.increment);\n\t}\n\tthis.inputDomNode.value = this.getValue();\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\t\t\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.inputDomNode,nextSibling);\n\tthis.domNodes.push(this.inputDomNode);\n};\n\nRangeWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle),\n\t\tfieldName = this.tiddlerField || \"text\",\n\t\tvalue = this.defaultValue;\n\tif(tiddler) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(tiddler,this.tiddlerIndex,this.defaultValue || \"\");\n\t\t} else {\n\t\t\tif($tw.utils.hop(tiddler.fields,fieldName)) {\n\t\t\t\tvalue = tiddler.fields[fieldName] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.defaultValue || \"\";\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nRangeWidget.prototype.handleInputEvent = function(event) {\n\tif(this.getValue() !== this.inputDomNode.value) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,\"\",this.tiddlerIndex,this.inputDomNode.value);\n\t\t} else {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,this.tiddlerField,null,this.inputDomNode.value);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRangeWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.tiddlerField = this.getAttribute(\"field\");\n\tthis.tiddlerIndex = this.getAttribute(\"index\");\n\tthis.minValue = this.getAttribute(\"min\");\n\tthis.maxValue = this.getAttribute(\"max\");\n\tthis.increment = this.getAttribute(\"increment\");\n\tthis.defaultValue = this.getAttribute(\"default\");\n\tthis.elementClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRangeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes['min'] || changedAttributes['max'] || changedAttributes['increment'] || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.tiddlerTitle]) {\n\t\t\tvar value = this.getValue();\n\t\t\tif(this.inputDomNode.value !== value) {\n\t\t\t\tthis.inputDomNode.value = value;\t\t\t\t\n\t\t\t}\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.range = RangeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/raw.js": {
"title": "$:/core/modules/widgets/raw.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/reveal.js": {
"title": "$:/core/modules/widgets/reveal.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tvar left,top;\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tleft = this.popup.left + this.popup.width - domNode.offsetWidth;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t}\n\tif(!this.positionAllowNegative) {\n\t\tleft = Math.max(0,left);\n\t\ttop = Math.max(0,top);\n\t}\n\tdomNode.style.left = left + \"px\";\n\tdomNode.style.top = top + \"px\";\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis.positionAllowNegative = this.getAttribute(\"positionAllowNegative\") === \"yes\";\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTiddlerTitle = this.state;\n\tthis.stateTitle = this.getAttribute(\"stateTitle\");\n\tthis.stateField = this.getAttribute(\"stateField\");\n\tthis.stateIndex = this.getAttribute(\"stateIndex\");\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state,\n\t defaultState = this[\"default\"];\n\tif(this.stateTitle) {\n\t\tvar stateTitleTiddler = this.wiki.getTiddler(this.stateTitle);\n\t\tif(this.stateField) {\n\t\t\tstate = stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) || defaultState : defaultState;\n\t\t} else if(this.stateIndex) {\n\t\t\tstate = stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) || defaultState : defaultState;\n\t\t} else if(stateTitleTiddler) {\n\t\t\tstate = this.wiki.getTiddlerText(this.stateTitle) || defaultState;\n\t\t} else {\n\t\t\tstate = defaultState;\n\t\t}\n\t} else {\n\t\tstate = this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\t}\n\tif(state === null) {\n\t\tstate = this[\"default\"];\n\t}\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.isOpen = this.text === state;\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.isOpen = this.text !== state;\n\t\t\tbreak;\n\t\tcase \"lt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t\tcase \"gt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"lteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"gteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.compareStateText = function(state) {\n\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \"case\"});\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes.positionAllowNegative || changedAttributes[\"default\"] || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar currentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\tvar self = this;\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\t//make sure that the state hasn't changed during the close animation\n\t\t\tself.readState()\n\t\t\tif(!self.isOpen) {\n\t\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t\t\t}\n\t\t}});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/scrollable.js": {
"title": "$:/core/modules/widgets/scrollable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tthis.scrollIntoView(event.target);\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/select.js": {
"title": "$:/core/modules/widgets/select.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tselect.children[i].selected = values.indexOf(select.children[i].value) !== -1\n\t\t}\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\tthis.selectTooltip = this.getAttribute(\"tooltip\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tif(this.selectTooltip) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"title\",this.selectTooltip);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex || changedAttributes.selectTooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/set.js": {
"title": "$:/core/modules/widgets/set.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,!!this.parseTreeNode.isMacroDefinition);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler;\n\t\tif(this.setSubTiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.setTiddler);\t\t\t\n\t\t}\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(this.setValue == null) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\t\t\t\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/text.js": {
"title": "$:/core/modules/widgets/text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/tiddler.js": {
"title": "$:/core/modules/widgets/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/transclude.js": {
"title": "$:/core/modules/widgets/transclude.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/vars.js": {
"title": "$:/core/modules/widgets/vars.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/view.js": {
"title": "$:/core/modules/widgets/view.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/widget.js": {
"title": "$:/core/modules/widgets/widget.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\t// Bail if parseTreeNode is undefined, meaning that the widget constructor was called without any arguments so that it can be subclassed\n\tif(parseTreeNode === undefined) {\n\t\treturn;\n\t}\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\t// Get widget classes\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t\t// Process any subclasses\n\t\t$tw.modules.forEachModuleOfType(\"widget-subclass\",function(title,module) {\n\t\t\tif(module.baseClass) {\n\t\t\t\tvar baseClass = Widget.prototype.widgetClasses[module.baseClass];\n\t\t\t\tif(!baseClass) {\n\t\t\t\t\tthrow \"Module '\" + title + \"' is attemping to extend a non-existent base class '\" + module.baseClass + \"'\";\n\t\t\t\t}\n\t\t\t\tvar subClass = module.constructor;\n\t\t\t\tsubClass.prototype = new baseClass();\n\t\t\t\t$tw.utils.extend(subClass.prototype,module.prototype);\n\t\t\t\tWidget.prototype.widgetClasses[module.name || module.baseClass] = subClass;\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\nisMacroDefinition: true if the variable is set via a \\define macro pragma (and hence should have variable substitution performed)\n*/\nWidget.prototype.setVariable = function(name,value,params,isMacroDefinition) {\n\tthis.variables[name] = {value: value, params: params, isMacroDefinition: !!isMacroDefinition};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n\nReturns an object with the following fields:\n\nparams: array of {name:,value:} of parameters passed to wikitext variables\ntext: text of variable, with parameters properly substituted\n*/\nWidget.prototype.getVariableInfo = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\tvalue = variable.value,\n\t\t\tparams = this.resolveVariableParameters(variable.params,actualParams);\n\t\t// Substitute any parameters specified in the definition\n\t\t$tw.utils.each(params,function(param) {\n\t\t\tvalue = $tw.utils.replaceString(value,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(param.name) + \"\\\\$\",\"mg\"),param.value);\n\t\t});\n\t\t// Only substitute variable references if this variable was defined with the \\define pragma\n\t\tif(variable.isMacroDefinition) {\n\t\t\tvalue = this.substituteVariableReferences(value);\t\t\t\n\t\t}\n\t\treturn {\n\t\t\ttext: value,\n\t\t\tparams: params\n\t\t};\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn {\n\t\ttext: this.evaluateMacroModule(name,actualParams,options.defaultValue)\n\t};\n};\n\n/*\nSimplified version of getVariableInfo() that just returns the text\n*/\nWidget.prototype.getVariable = function(name,options) {\n\treturn this.getVariableInfo(name,options).text;\n};\n\nWidget.prototype.resolveVariableParameters = function(formalParams,actualParams) {\n\tformalParams = formalParams || [];\n\tactualParams = actualParams || [];\n\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\tparamInfo, paramValue,\n\t\tresults = [];\n\t// Step through each of the parameters in the macro definition\n\tfor(var p=0; p<formalParams.length; p++) {\n\t\t// Check if we've got a macro call parameter with the same name\n\t\tparamInfo = formalParams[p];\n\t\tparamValue = undefined;\n\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t}\n\t\t}\n\t\t// If not, use the next available anonymous macro call parameter\n\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\tnextAnonParameter++;\n\t\t}\n\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t}\n\t\t// If we've still not got a value, use the default, if any\n\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t// Store the parameter name and value\n\t\tresults.push({name: paramInfo.name, value: paramValue});\n\t}\n\treturn results;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\tvar children = this.children;\n\tfor(var i = 0; i < children.length; i++) {\n\t\tchildren[i].render(parent,nextSibling);\n\t};\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar children = this.children,\n\t\trefreshed = false;\n\tfor (var i = 0; i < children.length; i++) {\n\t\trefreshed = children[i].refresh(changedTiddlers) || refreshed;\n\t}\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/wikify.js": {
"title": "$:/core/modules/widgets/wikify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki-bulkops.js": {
"title": "$:/core/modules/wiki-bulkops.js",
"text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.slice(0) : undefined,\n\t\t\t\t\tlist = tiddler.fields.list ? tiddler.fields.list.slice(0) : undefined,\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/wiki.js": {
"title": "$:/core/modules/wiki.js",
"text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nAdd available indexers to this wiki\n*/\nexports.addIndexersToWiki = function() {\n\tvar self = this;\n\t$tw.utils.each($tw.modules.applyMethods(\"indexer\"),function(Indexer,name) {\n\t\tself.addIndexer(new Indexer(self),name);\n\t});\n};\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.isBinaryTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.encoding === \"base64\";\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x : x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if(isAlphaNumeric) {\n\t\t\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked within the given parse tree\n */\nexports.extractLinks = function(parseTreeRoot) {\n\t// Count up the links\n\tvar links = [],\n\t\tcheckParseTree = function(parseTree) {\n\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcheckParseTree(parseTreeRoot);\n\treturn links;\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\tif(parser) {\n\t\t\treturn self.extractLinks(parser.tree);\n\t\t}\n\t\treturn [];\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinksIndexer = this.getIndexer(\"BacklinksIndexer\"),\n\t\tbacklinks = backlinksIndexer && backlinksIndexer.lookup(targetTitle);\n\n\tif(!backlinks) {\n\t\tbacklinks = [];\n\t\tthis.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self.getTiddlerLinks(title);\n\t\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\t\tbacklinks.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\t// Try to use the indexer\n\tvar self = this,\n\t\ttagIndexer = this.getIndexer(\"TagIndexer\"),\n\t\tresults = tagIndexer && tagIndexer.subIndexers[3].lookup(tag);\n\tif(!results) {\n\t\t// If not available, perform a manual scan\n\t\tresults = this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\t\tvar tagmap = self.getTagMap();\n\t\t\treturn self.sortByList(tagmap[tag],tag);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar self = this,\n\t\treplacedTitles = Object.create(null);\n\t// Given a title, this function will place it in the correct location\n\t// within titles.\n\tfunction moveItemInList(title) {\n\t\tif(!$tw.utils.hop(replacedTitles, title)) {\n\t\t\treplacedTitles[title] = true;\n\t\t\tvar newPos = -1,\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(afterTitle === \"\") {\n\t\t\t\t\tnewPos = titles.length;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\t// if this title is placed relative\n\t\t\t\t\t// to another title, make sure that\n\t\t\t\t\t// title is placed before we place\n\t\t\t\t\t// this one.\n\t\t\t\t\tmoveItemInList(beforeTitle);\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\t// Same deal\n\t\t\t\t\tmoveItemInList(afterTitle);\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If a new position is specified, let's move it\n\t\t\t\tif (newPos !== -1) {\n\t\t\t\t\t// get its current Pos, and make sure\n\t\t\t\t\t// sure that it's _actually_ in the list\n\t\t\t\t\t// and that it would _actually_ move\n\t\t\t\t\t// (#4275) We don't bother calling\n\t\t\t\t\t// indexOf unless we have a new\n\t\t\t\t\t// position to work with\n\t\t\t\t\tvar currPos = titles.indexOf(title);\n\t\t\t\t\tif(currPos >= 0 && newPos !== currPos) {\n\t\t\t\t\t\t// move it!\n\t\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tmoveItemInList(title);\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\nexports.getTiddlersAsJson = function(filter,spaces) {\n\tvar tiddlers = this.filterTiddlers(filter),\n\t\tspaces = (spaces === undefined) ? $tw.config.preferences.jsonSpaces : spaces,\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,spaces);\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n\t// Use the generic binary parser for any binary types not registered so far\n\tif($tw.Wiki.parsers[\"application/octet-stream\"]) {\n\t\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\n\t\t\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfo[type].encoding === \"base64\") {\n\t\t\t\t$tw.Wiki.parsers[type] = $tw.Wiki.parsers[\"application/octet-stream\"];\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type,tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title}},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tfield: If specified, restricts the search to the specified field, or an array of field names\n\tanchored: If true, forces all but regexp searches to be anchored to the start of text\n\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\n\tThe search mode is determined by the first of these boolean flags to be true\n\t\tliteral: searches for literal string\n\t\twhitespace: same as literal except runs of whitespace are treated as a single space\n\t\tregexp: treats the search term as a regular expression\n\t\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\",\n\t\tanchor = options.anchored ? \"^\" : \"\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else if(options.whitespace) {\n\t\tterms = [];\n\t\t$tw.utils.each(text.split(/\\s+/g),function(term) {\n\t\t\tif(term) {\n\t\t\t\tterms.push($tw.utils.escapeRegExp(term));\n\t\t\t}\n\t\t});\n\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + terms.join(\"\\\\s+\") + \")\",flags)];\n\t} else if(options.regexp) {\n\t\ttry {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + text + \")\",flags)];\t\t\t\n\t\t} catch(e) {\n\t\t\tsearchTermsRegExps = null;\n\t\t\tconsole.log(\"Regexp error parsing /(\" + text + \")/\" + flags + \": \",e);\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Accumulate the array of fields to be searched or excluded from the search\n\tvar fields = [];\n\tif(options.field) {\n\t\tif($tw.utils.isArray(options.field)) {\n\t\t\t$tw.utils.each(options.field,function(fieldName) {\n\t\t\t\tif(fieldName) {\n\t\t\t\t\tfields.push(fieldName);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tfields.push(options.field);\n\t\t}\n\t}\n\t// Use default fields if none specified and we're not excluding fields (excluding fields with an empty field array is the same as searching all fields)\n\tif(fields.length === 0 && !options.excludeField) {\n\t\tfields.push(\"title\");\n\t\tfields.push(\"tags\");\n\t\tfields.push(\"text\");\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar notYetFound = searchTermsRegExps.slice();\n\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tsearchFields;\n\t\t// Get the list of fields we're searching\n\t\tif(options.excludeField) {\n\t\t\tsearchFields = Object.keys(tiddler.fields);\n\t\t\t$tw.utils.each(fields,function(fieldName) {\n\t\t\t\tvar p = searchFields.indexOf(fieldName);\n\t\t\t\tif(p !== -1) {\n\t\t\t\t\tsearchFields.splice(p,1);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchFields = fields;\n\t\t}\n\t\tfor(var fieldIndex=0; notYetFound.length>0 && fieldIndex<searchFields.length; fieldIndex++) {\n\t\t\t// Don't search the text field if the content type is binary\n\t\t\tvar fieldName = searchFields[fieldIndex];\n\t\t\tif(fieldName === \"text\" && contentTypeInfo.encoding !== \"utf8\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar str = tiddler.fields[fieldName],\n\t\t\t\tt;\n\t\t\tif(str) {\n\t\t\t\tif($tw.utils.isArray(str)) {\n\t\t\t\t\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesn't match at least one field array entry\n\t\t\t\t\tfor(var s=0; s<str.length; s++) {\n\t\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\t\tif(notYetFound[t].test(str[s])) {\n\t\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If the field isn't an array, force it to a string and test each regexp against it and fail if any do not match\n\t\t\t\t\tstr = tiddler.getFieldString(fieldName);\n\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\tif(notYetFound[t].test(str)) {\n\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn notYetFound.length == 0;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(!tiddler.hasField(\"_is_skinny\")) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text || \"\";\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],$tw.utils.extend({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\t\t\n};\n\n/*\nAdd a new tiddler to the story river\ntitle: a title string or an array of title strings\nfromTitle: the title of the tiddler from which the navigation originated\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\noptions: see story.js\n*/\nexports.addToStory = function(title,fromTitle,storyTitle,options) {\n\tvar story = new $tw.Story({wiki: this, storyTitle: storyTitle});\n\tstory.addToStory(title,fromTitle,options);\t\t\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nexports.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle,\n\t\tusername = this.getTiddlerText(\"$:/status/UserName\"),\n\t\tattribution = username ? \" by \" + username : \"\";\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\" + attribution;\n\t\tc++;\n\t} while(this.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n// Determine whether a plugin by title is dynamically loadable\nexports.doesPluginRequireReload = function(title) {\n\treturn this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));\n};\n\n// Determine whether a plugin info structure is dynamically loadable\nexports.doesPluginInfoRequireReload = function(pluginInfo) {\n\tif(pluginInfo) {\n\t\tvar foundModule = false;\n\t\t$tw.utils.each(pluginInfo.tiddlers,function(tiddler) {\n\t\t\tif(tiddler.type === \"application/javascript\" && $tw.utils.hop(tiddler,\"module-type\")) {\n\t\t\t\tfoundModule = true;\n\t\t\t}\n\t\t});\n\t\treturn foundModule;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n})();\n\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/palettes/Blanca": {
"title": "$:/palettes/Blanca",
"name": "Blanca",
"description": "A clean white palette to let you focus",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Blue": {
"title": "$:/palettes/Blue",
"name": "Blue",
"description": "A blue theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Muted": {
"title": "$:/palettes/Muted",
"name": "Muted",
"description": "Bright tiddlers on a muted background",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastLight": {
"title": "$:/palettes/ContrastLight",
"name": "Contrast (Light)",
"description": "High contrast and unambiguous (light version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastDark": {
"title": "$:/palettes/ContrastDark",
"name": "Contrast (Dark)",
"description": "High contrast and unambiguous (dark version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/DarkPhotos": {
"title": "$:/palettes/DarkPhotos",
"created": "20150402111612188",
"description": "Good with dark photo backgrounds",
"modified": "20150402112344080",
"name": "DarkPhotos",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/GruvboxDark": {
"title": "$:/palettes/GruvboxDark",
"name": "Gruvbox Dark",
"description": "Retro groove color scheme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "https://github.com/morhetz/gruvbox",
"text": "alert-background: #cc241d\nalert-border: #cc241d\nalert-highlight: #d79921\nalert-muted-foreground: #504945\nbackground: #3c3836\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #504945\nbutton-foreground: #fbf1c7\nbutton-border: transparent\ncode-background: #504945\ncode-border: #504945\ncode-foreground: #fb4934\ndiff-delete-background: #fb4934\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #b8bb26\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #fb4934\ndownload-background: #b8bb26\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #665c54\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ebdbb2\ndropdown-tab-background: #665c54\ndropzone-background: #98971a\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #d3869b\nexternal-link-foreground: #8ec07c\nforeground: #fbf1c7\nmenubar-background: #504945\nmenubar-foreground: <<colour foreground>>\nmessage-background: #83a598\nmessage-border: #83a598\nmessage-foreground: #3c3836\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #504945\nmodal-footer-background: #3c3836\nmodal-footer-border: #3c3836\nmodal-header-border: #3c3836\nmuted-foreground: #d5c4a1\nnotification-background: <<colour primary>>\nnotification-border: <<colour primary>>\npage-background: #282828\npre-background: #504945\npre-border: #504945\nprimary: #d79921\nselect-tag-background: #665c54\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #7c6f64\nsidebar-controls-foreground: #504945\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #fbf1c7\nsidebar-muted-foreground-hover: #7c6f64\nsidebar-muted-foreground: #504945\nsidebar-tab-background-selected: #bdae93\nsidebar-tab-background: #3c3836\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #bdae93\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #282828\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #458588\nsidebar-tiddler-link-foreground: #98971a\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ebdbb2\ntab-background: #665c54\ntab-border-selected: #665c54\ntab-border: #665c54\ntab-divider: #bdae93\ntab-foreground-selected: #282828\ntab-foreground: #ebdbb2\ntable-border: #7c6f64\ntable-footer-background: #665c54\ntable-header-background: #504945\ntag-background: #d3869b\ntag-foreground: #282828\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #7c6f64\ntiddler-controls-foreground-selected: #7c6f64\ntiddler-controls-foreground: #665c54\ntiddler-editor-background: #282828\ntiddler-editor-border-image: #282828\ntiddler-editor-border: #282828\ntiddler-editor-fields-even: #504945\ntiddler-editor-fields-odd: #7c6f64\ntiddler-info-background: #32302f\ntiddler-info-border: #ebdbb2\ntiddler-info-tab-background: #ebdbb2\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #7c6f64\ntiddler-title-foreground: #a89984\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #504945\nvery-muted-foreground: #bdae93\nwikilist-background: <<colour page-background>>\nwikilist-button-background: <<colour button-background>>\nwikilist-button-foreground: <<colour button-foreground>>\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: <<colour muted-foreground>>\nwikilist-button-open-hover: <<colour primary>>\nwikilist-button-open: <<colour dropzone-background>>\nwikilist-button-remove: <<colour dirty-indicator>>\nwikilist-button-remove-hover: <<colour alert-background>>\nwikilist-droplink-dragover: <<colour dropzone-background>>\nwikilist-button-reveal: <<colour sidebar-tiddler-link-foreground-hover>>\nwikilist-button-reveal-hover: <<colour message-background>>"
},
"$:/palettes/Nord": {
"title": "$:/palettes/Nord",
"name": "Nord",
"description": "An arctic, north-bluish color palette.",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md",
"text": "alert-background: #D08770\nalert-border: #D08770\nalert-highlight: #B48EAD\nalert-muted-foreground: #4C566A\nbackground: #3b4252\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #4C566A\nbutton-foreground: #D8DEE9\nbutton-border: transparent\ncode-background: #2E3440\ncode-border: #2E3440\ncode-foreground: #BF616A\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #A3BE8C\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #BF616A\ndownload-background: #A3BE8C\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ECEFF4\ndropdown-tab-background: #4C566A\ndropzone-background: #A3BE8C\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #5E81AC\nexternal-link-foreground: #8FBCBB\nforeground: #d8dee9\nmenubar-background: #2E3440\nmenubar-foreground: #d8dee9\nmessage-background: #2E3440\nmessage-border: #2E3440\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #3b4252\nmodal-footer-background: #3b4252\nmodal-footer-border: #3b4252\nmodal-header-border: #3b4252\nmuted-foreground: #4C566A\nnotification-background: <<colour primary>>\nnotification-border: #EBCB8B\npage-background: #2e3440\npre-background: #2E3440\npre-border: #2E3440\nprimary: #5E81AC\nselect-tag-background: #3b4252\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #D8DEE9\nsidebar-controls-foreground: #4C566A\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #D8DEE9\nsidebar-muted-foreground-hover: #4C566A\nsidebar-muted-foreground: #4C566A\nsidebar-tab-background-selected: #ECEFF4\nsidebar-tab-background: #4C566A\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #4C566A\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #4C566A\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #A3BE8C\nsidebar-tiddler-link-foreground: #81A1C1\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ECEFF4\ntab-background: #4C566A\ntab-border-selected: #4C566A\ntab-border: #4C566A\ntab-divider: #4C566A\ntab-foreground-selected: #4C566A\ntab-foreground: #D8DEE9\ntable-border: #4C566A\ntable-footer-background: #2e3440\ntable-header-background: #2e3440\ntag-background: #A3BE8C\ntag-foreground: #4C566A\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: \ntiddler-controls-foreground-selected: #EBCB8B\ntiddler-controls-foreground: #4C566A\ntiddler-editor-background: #2e3440\ntiddler-editor-border-image: #2e3440\ntiddler-editor-border: #2e3440\ntiddler-editor-fields-even: #2e3440\ntiddler-editor-fields-odd: #2e3440\ntiddler-info-background: #2e3440\ntiddler-info-border: #2e3440\ntiddler-info-tab-background: #2e3440\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #4C566A\ntiddler-title-foreground: #81A1C1\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #2d3038\nvery-muted-foreground: #2d3038\n"
},
"$:/palettes/Rocker": {
"title": "$:/palettes/Rocker",
"name": "Rocker",
"description": "A dark theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarFlare": {
"title": "$:/palettes/SolarFlare",
"name": "Solar Flare",
"description": "Warm, relaxing earth colours",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n download-foreground: <<colour background>>\n dragger-foreground: <<colour background>>\n dropdown-background: <<colour background>>\n modal-background: <<colour background>>\n sidebar-foreground-shadow: <<colour background>>\n tiddler-background: <<colour background>>\n tiddler-border: <<colour background>>\n tiddler-link-background: <<colour background>>\n tab-background-selected: <<colour background>>\n dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n dragger-background: <<colour foreground>>\n tab-foreground: <<colour foreground>>\n tab-foreground-selected: <<colour tab-foreground>>\n sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n sidebar-tab-foreground: <<colour tab-foreground>>\n sidebar-button-foreground: <<colour foreground>>\n sidebar-controls-foreground: <<colour foreground>>\n sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n alert-muted-foreground: <<colour base01>>\n: base00\n code-foreground: <<colour base00>>\n message-foreground: <<colour base00>>\n tag-foreground: <<colour base00>>\n: base0\n sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n muted-foreground: <<colour base1>>\n blockquote-bar: <<colour muted-foreground>>\n dropdown-border: <<colour muted-foreground>>\n sidebar-muted-foreground: <<colour muted-foreground>>\n tiddler-title-foreground: <<colour muted-foreground>>\n site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n modal-footer-background: <<colour base2>>\n page-background: <<colour base2>>\n modal-backdrop: <<colour page-background>>\n notification-background: <<colour page-background>>\n code-background: <<colour page-background>>\n code-border: <<colour code-background>>\n pre-background: <<colour page-background>>\n pre-border: <<colour pre-background>>\n sidebar-tab-background-selected: <<colour page-background>>\n table-header-background: <<colour base2>>\n tag-background: <<colour base2>>\n tiddler-editor-background: <<colour base2>>\n tiddler-info-background: <<colour base2>>\n tiddler-info-tab-background: <<colour base2>>\n tab-background: <<colour base2>>\n dropdown-tab-background: <<colour tab-background>>\n: base3\n alert-background: <<colour base3>>\n message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n alert-highlight: <<colour magenta>>\n: violet\n external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n primary: <<colour blue-muted>>\n download-background: <<colour primary>>\n tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nselect-tag-background:\nselect-tag-foreground:\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n modal-footer-border: <<colour tab-border>>\n modal-header-border: <<colour tab-border>>\n notification-border: <<colour tab-border>>\n sidebar-tab-border: <<colour tab-border>>\n tab-border-selected: <<colour tab-border>>\n sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarizedLight": {
"title": "$:/palettes/SolarizedLight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Precision colors for machines and people",
"license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
"name": "SolarizedLight",
"text": "alert-background: #eee8d5\nalert-border: #073642\nalert-highlight: #cb4b16\nalert-muted-foreground: #586e75\nbackground: #fdf6e3\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #cb4b16\nbutton-foreground: #fdf6e3\nbutton-border: transparent\ncode-background: #eee8d5\ncode-border: #93a1a1\ncode-foreground: #d33682\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #859900\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #D08770\ndownload-background: #859900\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #fdf6e3\ndropdown-tab-background: #93a1a1\ndropzone-background: #859900\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: #d33682\nexternal-link-foreground-visited: #b58900\nexternal-link-foreground: #cb4b16\nforeground: #839496\nmessage-background: #586e75\nmessage-border: #586e75\nmessage-foreground: #eee8d5\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #eee8d5\nmodal-footer-background: #eee8d5\nmodal-footer-border: #eee8d5\nmodal-header-border: #eee8d5\nmuted-foreground: #93a1a1\nnotification-background: #EBCB8B\nnotification-border: #D08770\npage-background: #eee8d5\npre-background: #eee8d5\npre-border: #93a1a1\nprimary: #2aa198\nselect-tag-background: #eee8d5\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: #eee8d5\nsidebar-controls-foreground-hover: #268bd2\nsidebar-controls-foreground: #586e75\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #839496\nsidebar-muted-foreground-hover: #657b83\nsidebar-muted-foreground: #93a1a1\nsidebar-tab-background-selected: #eee8d5\nsidebar-tab-background: #839496\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #657b83\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #839496\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #859900\nsidebar-tiddler-link-foreground: #268bd2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #dc322f\ntab-background-selected: #fdf6e3\ntab-background: #839496\ntab-border-selected: #93a1a1\ntab-border: #93a1a1\ntab-divider: #fdf6e3\ntab-foreground-selected: #839496\ntab-foreground: #eee8d5\ntable-border: #657b83\ntable-footer-background: #657b83\ntable-header-background: #93a1a1\ntag-background: #6c71c4\ntag-foreground: #eee8d5\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #b58900\ntiddler-controls-foreground-selected: #b58900\ntiddler-controls-foreground: #073642\ntiddler-editor-background: #eee8d5\ntiddler-editor-border-image: #eee8d5\ntiddler-editor-border: #eee8d5\ntiddler-editor-fields-even: #eee8d5\ntiddler-editor-fields-odd: #fdf6e3\ntiddler-info-background: #eee8d5\ntiddler-info-border: #eee8d5\ntiddler-info-tab-background: #586e75\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #586e75\ntiddler-title-foreground: #073642\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #839496\nvery-muted-foreground: #93a1a1\n"
},
"$:/palettes/SpartanDay": {
"title": "$:/palettes/SpartanDay",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Cold, spartan day colors",
"name": "Spartan Day",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #FAFAFA\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: #ececec\ncode-border: #ececec\ncode-foreground: \ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #FFFFFF\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #F5F5F5\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: \nexternal-link-foreground: \nforeground: rgba(0, 0, 0, 0.87)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(0, 0, 0, 0.54)\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour very-muted-foreground>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(0, 0, 0, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #f4f4f4\npre-background: #ececec\npre-border: #ececec\nprimary: #3949ab\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #aeaeae\nsidebar-controls-foreground: #c6c6c6\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground-hover: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground: rgba(0, 0, 0, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(0, 0, 0, 0.87)\nsidebar-tab-foreground: rgba(0, 0, 0, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(0, 0, 0, 0.87)\nsidebar-tiddler-link-foreground: rgba(0, 0, 0, 0.54)\nsite-title-foreground: rgba(0, 0, 0, 0.87)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(0, 0, 0, 0.87)\ntab-foreground: rgba(0, 0, 0, 0.54)\ntable-border: #d8d8d8\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: #f9f9f9\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: #e8e7e7\ntiddler-editor-fields-even: rgba(0, 0, 0, 0.1)\ntiddler-editor-fields-odd: rgba(0, 0, 0, 0.04)\ntiddler-info-background: #F5F5F5\ntiddler-info-border: #F5F5F5\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #000000\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(0, 0, 0, 0.12)\n"
},
"$:/palettes/SpartanNight": {
"title": "$:/palettes/SpartanNight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Dark spartan colors",
"name": "Spartan Night",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #303030\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #424242\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #050505\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #7c318c\nexternal-link-foreground: #9e3eb3\nforeground: rgba(255, 255, 255, 0.7)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(255, 255, 255, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #212121\npre-background: #2a2a2a\npre-border: transparent\nprimary: #5656f3\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #494949\nsidebar-controls-foreground: #5d5d5d\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: rgba(255, 255, 255, 0.7)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #3a3a3a\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: rgb(55,55,55)\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #454545\ntiddler-info-border: #454545\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(255, 255, 255, 0.12)\n"
},
"$:/palettes/Twilight": {
"title": "$:/palettes/Twilight",
"tags": "$:/tags/Palette",
"author": "Thomas Elmiger",
"type": "application/x-tiddler-dictionary",
"name": "Twilight",
"description": "Delightful, soft darkness.",
"text": "alert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(38, 38, 38)\nblockquote-bar: rgba(240, 196, 117, 0.7)\nbutton-background: rgb(63, 63, 63)\nbutton-border: rgb(127, 127, 127)\nbutton-foreground: rgb(179, 179, 179)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: rgb(255, 94, 94)\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: rgb(255, 94, 94)\ndownload-background: #19a974\ndownload-foreground: rgb(38, 38, 38)\ndragger-background: rgb(179, 179, 179)\ndragger-foreground: rgb(38, 38, 38)\ndropdown-background: rgb(38, 38, 38)\ndropdown-border: rgb(255, 255, 255)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: rgb(179, 179, 255)\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: rgb(153, 153, 255)\nforeground: rgb(179, 179, 179)\nmessage-background: <<colour tag-foreground>>\nmessage-border: #96ccff\nmessage-foreground: <<colour tag-background>>\nmodal-backdrop: rgb(179, 179, 179)\nmodal-background: rgb(38, 38, 38)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(255, 255, 255)\nnotification-background: <<colour tag-foreground>>\nnotification-border: <<colour tag-background>>\npage-background: rgb(26, 26, 26)\npre-background: rgb(25, 25, 25)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(255, 201, 102)\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: rgb(179, 179, 179)\nsidebar-controls-foreground: rgb(153, 153, 153)\nsidebar-controls-foreground-hover: <<colour tiddler-controls-foreground-hover>>\nsidebar-foreground: rgb(141, 141, 141)\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\nsidebar-tab-background-selected: rgb(26, 26, 26)\nsidebar-tab-border: rgb(127, 127, 127)\nsidebar-tab-border-selected: rgb(127, 127, 127)\nsidebar-tab-divider: rgb(127, 127, 127)\nsidebar-tab-foreground: rgb(179, 179, 179)\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\nsite-title-foreground: rgb(255, 201, 102)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgba(0,0,0,0.125)\ntab-background-selected: rgb(38, 38, 38)\ntab-border: rgb(255, 201, 102)\ntab-border-selected: rgb(255, 201, 102)\ntab-divider: rgb(255, 201, 102)\ntab-foreground: rgb(179, 179, 179)\ntab-foreground-selected: rgb(179, 179, 179)\ntable-border: rgba(255,255,255,.3)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(255, 201, 102)\ntag-foreground: rgb(25, 25, 25)\ntiddler-background: rgb(38, 38, 38)\ntiddler-border: rgba(240, 196, 117, 0.7)\ntiddler-controls-foreground: rgb(128, 128, 128)\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\ntiddler-editor-background: rgb(33, 33, 33)\ntiddler-editor-border: rgb(63, 63, 63)\ntiddler-editor-border-image: rgb(25, 25, 25)\ntiddler-editor-fields-even: rgb(33, 33, 33)\ntiddler-editor-fields-odd: rgb(28, 28, 28)\ntiddler-info-background: rgb(43, 43, 43)\ntiddler-info-border: rgb(25, 25, 25)\ntiddler-info-tab-background: rgb(43, 43, 43)\ntiddler-link-background: rgb(38, 38, 38)\ntiddler-link-foreground: rgb(204, 204, 255)\ntiddler-subtitle-foreground: rgb(255, 255, 255)\ntiddler-title-foreground: rgb(255, 192, 76)\ntoolbar-cancel-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-done-button: \ntoolbar-edit-button: \ntoolbar-info-button: \ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \nuntagged-background: rgb(255, 255, 255)\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\n"
},
"$:/palettes/Vanilla": {
"title": "$:/palettes/Vanilla",
"name": "Vanilla",
"description": "Pale and unobtrusive",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\nwikilist-background: #e5e5e5\nwikilist-item: #fff\nwikilist-info: #000\nwikilist-title: #666\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #aaa\nwikilist-button-open: #4fb82b\nwikilist-button-open-hover: green\nwikilist-button-reveal: #5778d8\nwikilist-button-reveal-hover: blue\nwikilist-button-remove: #d85778\nwikilist-button-remove-hover: red\nwikilist-toolbar-background: #d3d3d3\nwikilist-toolbar-foreground: #888\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #acacac\nwikilist-button-foreground: #000\n"
},
"$:/core/readme": {
"title": "$:/core/readme",
"text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
},
"$:/library/sjcl.js/license": {
"title": "$:/library/sjcl.js/license",
"type": "text/plain",
"text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
},
"$:/core/templates/MOTW.html": {
"title": "$:/core/templates/MOTW.html",
"text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com --> "
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
},
"$:/core/templates/canonical-uri-external-image": {
"title": "$:/core/templates/canonical-uri-external-image",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-raw": {
"title": "$:/core/templates/canonical-uri-external-raw",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-text": {
"title": "$:/core/templates/canonical-uri-external-text",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
},
"$:/core/templates/css-tiddler": {
"title": "$:/core/templates/css-tiddler",
"text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
},
"$:/core/templates/exporters/CsvFile": {
"title": "$:/core/templates/exporters/CsvFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/CsvFile}}",
"extension": ".csv",
"text": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n"
},
"$:/core/templates/exporters/JsonFile": {
"title": "$:/core/templates/exporters/JsonFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/JsonFile}}",
"extension": ".json",
"text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\n"
},
"$:/core/templates/exporters/StaticRiver": {
"title": "$:/core/templates/exporters/StaticRiver",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/StaticRiver}}",
"extension": ".html",
"text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
},
"$:/core/templates/exporters/StaticRiver/Content": {
"title": "$:/core/templates/exporters/StaticRiver/Content",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>\n"
},
"$:/core/templates/exporters/TidFile": {
"title": "$:/core/templates/exporters/TidFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/TidFile}}",
"extension": ".tid",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>"
},
"$:/core/save/all-external-js": {
"title": "$:/core/save/all-external-js",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5-external-js.html}}\n"
},
"$:/core/templates/tiddlywiki5.js": {
"title": "$:/core/templates/tiddlywiki5.js",
"text": "\\rules only filteredtranscludeinline transcludeinline codeinline\n\n/*\n{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}\n`*/\n`<!--~~ Library modules ~~-->\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/plain-text-tiddler}}}\n<!--~~ Boot prefix ~~-->\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\n<!--~~ Core plugin ~~-->\n{{$:/core/templates/tiddlywiki5.js/tiddlers}}\n<!--~~ Boot kernel ~~-->\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\n"
},
"$:/core/templates/tiddlywiki5.js/tiddlers": {
"title": "$:/core/templates/tiddlywiki5.js/tiddlers",
"text": "`\n$tw.preloadTiddlerArray(`<$text text=<<jsontiddlers \"[[$:/core]]\">>/>`);\n$tw.preloadTiddlerArray([{\n\ttitle: \"$:/config/SaveWikiButton/Template\",\n\ttext: \"$:/core/save/all-external-js\"\n}]);\n`\n"
},
"$:/core/templates/tiddlywiki5-external-js.html": {
"title": "$:/core/templates/tiddlywiki5-external-js.html",
"text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Raw markup for the bottom of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}\n</body>\n<script src=\"%24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\" onerror=\"alert('Error: Cannot load tiddlywiki.js');\"></script>\n</html>\n"
},
"$:/core/templates/html-div-skinny-tiddler": {
"title": "$:/core/templates/html-div-skinny-tiddler",
"text": "<!--\n\nThis template is a variant of $:/core/templates/html-div-tiddler used for saving skinny tiddlers (with no text field)\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre></pre>\n</div>`\n"
},
"$:/core/templates/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
},
"$:/core/templates/html-tiddler": {
"title": "$:/core/templates/html-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
},
"$:/core/templates/javascript-tiddler": {
"title": "$:/core/templates/javascript-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
},
"$:/core/templates/json-tiddler": {
"title": "$:/core/templates/json-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw JSON\n\n--><$text text=<<jsontiddler>>/>"
},
"$:/core/templates/module-tiddler": {
"title": "$:/core/templates/module-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
},
"$:/core/templates/plain-text-tiddler": {
"title": "$:/core/templates/plain-text-tiddler",
"text": "<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/raw-static-tiddler": {
"title": "$:/core/templates/raw-static-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-all": {
"title": "$:/core/save/lazy-all",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[!is[system]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-images": {
"title": "$:/core/save/lazy-images",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[is[image]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/templates/server/static.sidebar.wikitext": {
"title": "$:/core/templates/server/static.sidebar.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-sidebar-scrollable\" style=\"overflow: auto;\">\n<div class=\"tc-sidebar-header\">\n<h1 class=\"tc-site-title\">\n<$transclude tiddler=\"$:/SiteTitle\"/>\n</h1>\n<div class=\"tc-site-subtitle\">\n<$transclude tiddler=\"$:/SiteSubtitle\"/>\n</div>\n<h2>\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$list filter={{$:/DefaultTiddlers}}>\n<div class=\"tc-menu-list-subitem\">\n<$link><$text text=<<currentTiddler>>/></$link>\n</div>\n</$list>\n</div>\n<!-- Currently disabled the recent list as it is unweildy when the responsive narrow view kicks in\n<h2>\n{{$:/language/SideBar/Recent/Caption}}\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n</div>\n</div>\n</div>\n-->\n"
},
"$:/core/templates/server/static.tiddler.html": {
"title": "$:/core/templates/server/static.tiddler.html",
"text": "\\whitespace trim\n\\define tv-wikilink-template() $uri_encoded$\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content={{$:/core/templates/version}} />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"%24%3A%2Fcore%2Ftemplates%2Fstatic.template.css\">\n<title><$view field=\"caption\" format=\"plainwikified\"><$view field=\"title\"/></$view>: <$view tiddler=\"$:/core/wiki/title\" format=\"plainwikified\"/></title>\n</head>\n<body class=\"tc-body\">\n<$transclude tiddler=\"$:/core/templates/server/static.sidebar.wikitext\" mode=\"inline\"/>\n<section class=\"tc-story-river\">\n<div class=\"tc-tiddler-frame\">\n<$transclude tiddler=\"$:/core/templates/server/static.tiddler.wikitext\" mode=\"inline\"/>\n</div>\n</section>\n</body>\n</html>"
},
"$:/core/templates/server/static.tiddler.wikitext": {
"title": "$:/core/templates/server/static.tiddler.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<h2><$text text=<<currentTiddler>>/></h2>\n</div>\n</div>\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n<div class=\"tc-tags-wrapper\">\n<$list filter=\"[all[current]tags[]sort[title]]\">\n<a href={{{ [<currentTiddler>encodeuricomponent[]] }}}>\n<$macrocall $name=\"tag-pill\" tag=<<currentTiddler>>/>\n</a>\n</$list>\n</div>\n<div class=\"tc-tiddler-body\">\n<$transclude mode=\"block\"/>\n</div>\n"
},
"$:/core/templates/single.tiddler.window": {
"title": "$:/core/templates/single.tiddler.window",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"tv-show-missing-links\" value={{$:/config/MissingLinks}}>\n\n<$set name=\"storyviewTitle\" value={{$:/view}}>\n\n<$set name=\"languageTitle\" value={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/templates/split-recipe": {
"title": "$:/core/templates/split-recipe",
"text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
},
"$:/core/templates/static-tiddler": {
"title": "$:/core/templates/static-tiddler",
"text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
},
"$:/core/templates/static.area": {
"title": "$:/core/templates/static.area",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n<!-- ensure splash screen isn't shown when JS is disabled -->\n`<style>\n.tc-remove-when-wiki-loaded {display: none;}\n</style>`\n"
},
"$:/core/templates/static.content": {
"title": "$:/core/templates/static.content",
"text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
},
"$:/core/templates/static.template.css": {
"title": "$:/core/templates/static.template.css",
"text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
},
"$:/core/templates/static.template.html": {
"title": "$:/core/templates/static.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`"
},
"$:/core/templates/store.area.template.html": {
"title": "$:/core/templates/store.area.template.html",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n<$list filter={{{ [<skinnySaveTiddlerFilter>] }}} template=\"$:/core/templates/html-div-skinny-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
},
"$:/core/templates/tid-tiddler": {
"title": "$:/core/templates/tid-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/tiddler-metadata": {
"title": "$:/core/templates/tiddler-metadata",
"text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
},
"$:/core/templates/tiddlywiki5.html": {
"title": "$:/core/templates/tiddlywiki5.html",
"text": "<$set name=\"saveTiddlerAndShadowsFilter\" filter=\"[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]\">\n`<!doctype html>\n`{{$:/core/templates/MOTW.html}}`<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n`{{{ [<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"`{{$:/core/copyright.txt}}`\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>`{{$:/core/wiki/title}}`</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n`{{$:/core/templates/static.area}}`\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n`{{$:/core/templates/store.area.template.html}}`\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Raw markup for the bottom of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`\n</body>\n</html>`\n"
},
"$:/core/templates/version": {
"title": "$:/core/templates/version",
"text": "<<version>>"
},
"$:/core/templates/wikified-tiddler": {
"title": "$:/core/templates/wikified-tiddler",
"text": "<$transclude />"
},
"$:/core/ui/AboveStory/tw2-plugin-check": {
"title": "$:/core/ui/AboveStory/tw2-plugin-check",
"tags": "$:/tags/AboveStory",
"text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/Actions/new-image": {
"title": "$:/core/ui/Actions/new-image",
"tags": "$:/tags/Actions",
"description": "create a new image tiddler",
"text": "\\define get-type()\nimage/$(imageType)$\n\\end\n<$vars imageType={{$:/config/NewImageType}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=<<get-type>> tags={{$:/config/NewTiddler/Tags!!tags}}/>\n</$vars>\n"
},
"$:/core/ui/Actions/new-journal": {
"title": "$:/core/ui/Actions/new-journal",
"tags": "$:/tags/Actions",
"description": "create a new journal tiddler",
"text": "<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} journalTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$reveal type=\"nomatch\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalTags>> text={{{ [<journalTitle>get[]] }}}/>\n</$reveal>\n<$reveal type=\"match\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalTags>> text=<<journalText>>/>\n</$reveal>\n</$wikify>\n</$vars>\n"
},
"$:/core/ui/Actions/new-tiddler": {
"title": "$:/core/ui/Actions/new-tiddler",
"tags": "$:/tags/Actions",
"description": "create a new empty tiddler",
"text": "<$action-sendmessage $message=\"tm-new-tiddler\" tags={{$:/config/NewTiddler/Tags!!tags}}/>\n"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Shadows": {
"title": "$:/core/ui/AdvancedSearch/Shadows",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Shadows/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Standard": {
"title": "$:/core/ui/AdvancedSearch/Standard",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Standard/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/System": {
"title": "$:/core/ui/AdvancedSearch/System",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/System/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/AdvancedSearch": {
"title": "$:/AdvancedSearch",
"icon": "$:/core/images/advanced-search-button",
"color": "#bbb",
"text": "<div class=\"tc-advanced-search\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
},
"$:/core/ui/AlertTemplate": {
"title": "$:/core/ui/AlertTemplate",
"text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/cancel-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$wikify name=\"format\" text=<<lingo Tiddler/DateFormat>>>\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=<<format>>/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</$wikify>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
},
"$:/core/ui/BinaryWarning": {
"title": "$:/core/ui/BinaryWarning",
"text": "\\define lingo-base() $:/language/BinaryWarning/\n<<lingo Prompt>>\n"
},
"$:/core/ui/Components/plugin-info": {
"title": "$:/core/ui/Components/plugin-info",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1>\n''<$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}}/>'': <$view field=\"description\"><$view field=\"title\"/></$view> $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>> default=\"\"\"$default-popup-state$\"\"\">\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$set name=\"tabsList\" filter=\"[<currentTiddler>list[]] contents\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template=\"$:/core/ui/PluginInfo\"/>\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<<plugin-type>> default-popup-state=<<default-popup-state>>/>\n"
},
"$:/core/ui/Components/tag-link": {
"title": "$:/core/ui/Components/tag-link",
"text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
},
"$:/core/ui/ControlPanel/Advanced": {
"title": "$:/core/ui/ControlPanel/Advanced",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
"text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" \"$:/core/ui/ControlPanel/TiddlerFields\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/Appearance": {
"title": "$:/core/ui/ControlPanel/Appearance",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
"text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Theme\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/Basics": {
"title": "$:/core/ui/ControlPanel/Basics",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Basics/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/language/DefaultNewTiddlerTitle\"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/language/DefaultNewTiddlerTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewTiddler/Tags\"><<lingo NewTiddler/Tags/Prompt>></$link> |<$list filter=\"[[$:/config/NewTiddler/Tags]]\" template=\"$:/core/ui/EditTemplate/tags\"/> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$list filter=\"[[$:/config/NewJournal/Tags]]\" template=\"$:/core/ui/EditTemplate/tags\"/> |\n|<$link to=\"$:/config/AutoFocus\"><<lingo AutoFocus/Prompt>></$link> |{{$:/snippets/minifocusswitcher}} |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
},
"$:/core/ui/ControlPanel/EditorTypes": {
"title": "$:/core/ui/ControlPanel/EditorTypes",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/Info": {
"title": "$:/core/ui/ControlPanel/Info",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Info/Caption}}",
"text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Basics\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/KeyboardShortcuts": {
"title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} focus=\"true\" style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint}}>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n<small>{{$:/core/images/close-button}}</small>\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[[$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>match[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/LoadedModules": {
"title": "$:/core/ui/ControlPanel/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Modals/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
"subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
"text": "\\define install-plugin-actions()\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$set name=\"url\" value={{!!url}}>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[title]]\" variable=\"dependency\">\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url=<<url>> title=<<dependency>>/>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define install-plugin-button()\n<div>\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$set name=\"reinstall-type\" value={{{ [<libraryVersion>compare:version:eq<installedVersion>then[tc-reinstall]] [<libraryVersion>compare:version:gt<installedVersion>then[tc-reinstall-upgrade]] [<libraryVersion>compare:version:lt<installedVersion>then[tc-reinstall-downgrade]] }}}>\n<$button actions=<<install-plugin-actions>> class={{{ [<assetInfo>get[original-title]has[version]then<reinstall-type>] tc-btn-invisible tc-install-plugin +[join[ ]] }}}>\n{{$:/core/images/download-button}}\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\">\n<$list filter=\"[<libraryVersion>compare:version:gt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[<libraryVersion>compare:version:lt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\">\n{{$:/language/ControlPanel/Plugins/Downgrade/Caption}}\n</$list>\n\"\"\">\n{{$:/language/ControlPanel/Plugins/Update/Caption}}\n</$list>\n</$list>\n</$button>\n<div>\n</div>\n<$reveal stateTitle=<<assetInfo>> stateField=\"requires-reload\" type=\"match\" text=\"yes\">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>\n</$set>\n</$set>\n</$set>\n</div>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1><strong><$text text={{{ [<assetInfo>get[name]] ~[<assetInfo>get[original-title]split[/]last[1]] }}}/></strong>: <$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\"><div><em>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}</em></div></$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-buttons\">\n<<install-plugin-button>>\n</div>\n</div>\n<$set name=\"original-title\" value={{{ [<assetInfo>get[original-title]] }}}>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]] ~[<assetInfo>get[original-title]!is[tiddler]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]!is[tiddler]]\">\n{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\n</$list>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]]\" variable=\"ignore\">\n<div>\n{{$:/language/ControlPanel/Plugins/AlsoRequires}}\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[title]]\" variable=\"dependency\">\n<$text text=<<dependency>>/>\n</$list>\n</div>\n</$list>\n</$set>\n</div>\n</$list>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-sub-plugins\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>sort[title]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n</$list>\n</div>\n</$reveal>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<$reveal type=\"nomatch\" text=\"yes\" state=<<popup-state>> tag=\"div\" class=\"tc-plugin-info-sub-plugin-indicator\">\n<$wikify name=\"count\" text=\"\"\"<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>]\"/>\"\"\">\n<$button class=\"tc-btn-invisible\" set=<<popup-state>> setTo=\"yes\">\n{{$:/language/ControlPanel/Plugins/SubPluginPrompt}}\n</$button>\n</$wikify>\n</$reveal>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[title]]\" variable=\"assetInfo\">\n<$list filter=\"[[$:/temp/RemoteAssetSearch/$(currentTiddler)$]has[text]] ~[<assetInfo>!has[parent-plugin]]\" variable=\"ignore\"><!-- Hide sub-plugins if we're not searching -->\n<<display-plugin-info \"$type$\">>\n</$list>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<$set name=\"transclusion\" value=<<connectionTiddler>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Updates]] [[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$set>\n\n</$list>\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n</$button>\n</$reveal>\n\\end\n\n\\define plugin-library-listing()\n<div class=\"tc-tab-set\">\n<$set name=\"defaultTab\" value={{{ [all[tiddlers+shadows]tag[$:/tags/PluginLibrary]] }}}>\n<div class=\"tc-tab-buttons\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$button set=<<qualify \"$:/state/addplugins/tab\">> setTo=<<currentTiddler>> default=<<defaultTab>> selectedClass=\"tc-tab-selected\">\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\"/>\n</$set>\n</$button>\n</$list>\n</div>\n<div class=\"tc-tab-divider\"/>\n<div class=\"tc-tab-content\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$reveal type=\"match\" state=<<qualify \"$:/state/addplugins/tab\">> text=<<currentTiddler>> default=<<defaultTab>>>\n<h2><$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link></h2>\n//<$view field=\"url\"/>//\n<$transclude mode=\"block\"/>\n<$set name=PluginLibraryURL value={{!!url}}>\n<<close-library-button>>\n</$set>\n<<display-server-connection>>\n</$reveal>\n</$list>\n</div>\n</$set>\n</div>\n\\end\n\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<div>\n<<plugin-library-listing>>\n</div>\n"
},
"$:/core/ui/ControlPanel/Palette": {
"title": "$:/core/ui/ControlPanel/Palette",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Palette/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/PaletteManager}}\n\n</$reveal>\n\n"
},
"$:/core/ui/ControlPanel/Parsing": {
"title": "$:/core/ui/ControlPanel/Parsing",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<<rule>>\n</$checkbox>\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n<dd><<toggle $Type$>></dd>\n</$list>\n\\end\n\n<<lingo Hint>>\n\n<dl>\n<dt><<lingo Pragma/Caption>></dt>\n<<rules pragma Pragma>>\n<dt><<lingo Inline/Caption>></dt>\n<<rules inline Inline>>\n<dt><<lingo Block/Caption>></dt>\n<<rules block Block>>\n</dl>"
},
"$:/core/ui/ControlPanel/Plugins/Add/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
"text": "<<display-server-assets language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
"text": "<<display-server-assets plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
"text": "<<display-server-assets theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Updates": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Updates",
"caption": "<$importvariables filter=\"$:/core/ui/ControlPanel/Plugins/Add/Updates\">{{$:/language/ControlPanel/Plugins/Updates/Caption}} (<<update-count>>)</$importvariables>",
"text": "\\define each-updateable-plugin(body)\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}sort[title]]\" variable=\"assetInfo\">\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$list filter=\"[<assetInfo>get[original-title]has[version]!version<libraryVersion>]\" variable=\"ignore\">\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$list filter=\"[<installedversion>!match<libraryVersion>]\" variable=\"ignore\">\n$body$\n</$list>\n</$set>\n</$list>\n</$set>\n</$list>\n\\end\n\n\\define update-all-actions()\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<<install-plugin-actions>>\n\"\"\"/>\n\\end\n\n\\define update-count()\n<$wikify name=\"count-filter\" text=<<each-updateable-plugin \"[[<$text text=<<assetInfo>>/>]]\">>><$count filter=<<count-filter>>/></$wikify>\n\\end\n\n<$button actions=<<update-all-actions>> class=\"tc-btn-invisible tc-install-plugin tc-reinstall-upgrade\">\n{{$:/core/images/download-button}} {{||$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption}}\n</$button>\n\n<div class=\"tc-plugin-library-listing\">\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<$macrocall $name=\"display-plugin-info\" type={{{ [<assetInfo>get[original-plugin-type]] }}}/>\n\"\"\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Plugins/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green tc-primary-btn\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
"text": "<<plugin-table language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
"text": "<<plugin-table plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
"text": "<<plugin-table theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[title]]\" emptyMessage=<<lingo \"Empty/Hint\">> template=\"$:/core/ui/Components/plugin-info\"/>\n</$set>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\">>\n"
},
"$:/core/ui/ControlPanel/Saving/DownloadSaver": {
"title": "$:/core/ui/ControlPanel/Saving/DownloadSaver",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<<lingo Hint>>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><<lingo AutoSave/Hint>></$link>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <<lingo AutoSave/Description>> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Saving/General": {
"title": "$:/core/ui/ControlPanel/Saving/General",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
"list-before": "",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Saving/GitHub": {
"title": "$:/core/ui/ControlPanel/Saving/GitHub",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitHub\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitHub/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitHub/Password>> |<$password name=\"github\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitHub/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitHub/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitHub/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitHub/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitHub/ServerURL\" default=\"https://api.github.com\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/GitLab": {
"title": "$:/core/ui/ControlPanel/Saving/GitLab",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitLab\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitLab/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitLab/Password>> |<$password name=\"gitlab\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitLab/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitLab/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitLab/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitLab/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitLab/ServerURL\" default=\"https://gitlab.com/api/v4\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/TiddlySpot": {
"title": "$:/core/ui/ControlPanel/Saving/TiddlySpot",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<backupURL>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo Password>> |<$password name=\"upload\"/> |\n|<<lingo Backups>> |<<backupLink>> |\n\n''<<lingo Advanced/Heading>>''\n\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>"
},
"$:/core/ui/ControlPanel/Saving/Gitea": {
"title": "$:/core/ui/ControlPanel/Saving/Gitea",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~Gitea\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/Gitea/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo Gitea/Password>> |<$password name=\"Gitea\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/Gitea/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/Gitea/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/Gitea/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/Gitea/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/Gitea/ServerURL\" default=\"https://gitea/api/v1\" tag=\"input\"/> |\n"
},
"$:/core/ui/ControlPanel/Saving": {
"title": "$:/core/ui/ControlPanel/Saving",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Saving/Caption}}",
"text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Saving]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Saving/General\">>\n</div>\n"
},
"$:/core/buttonstyles/Borderless": {
"title": "$:/core/buttonstyles/Borderless",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
"text": "tc-btn-invisible"
},
"$:/core/buttonstyles/Boxed": {
"title": "$:/core/buttonstyles/Boxed",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
"text": "tc-btn-boxed"
},
"$:/core/buttonstyles/Rounded": {
"title": "$:/core/buttonstyles/Rounded",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
"text": "tc-btn-rounded"
},
"$:/core/ui/ControlPanel/Settings/CamelCase": {
"title": "$:/core/ui/ControlPanel/Settings/CamelCase",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\n\n<$link to=\"$:/config/DefaultMoreSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultMoreSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/InfoPanelMode": {
"title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <<lingo Popup/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <<lingo Sticky/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
"title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n <option value=\"above\"><<lingo \"OpenAbove\">></option>\n <option value=\"below\"><<lingo \"OpenBelow\">></option>\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/MissingLinks": {
"title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationHistory": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/CopyToClipboard\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/CopyToClipboard\"><<lingo CopyToClipboard/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\"><<lingo UpdateAddressBar/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
"title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/TitleLinks": {
"title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/StoryView": {
"title": "$:/core/ui/ControlPanel/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/Stylesheets": {
"title": "$:/core/ui/ControlPanel/Stylesheets",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Stylesheets/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo Stylesheets/Hint>>\n\n{{$:/snippets/peek-stylesheets}}\n"
},
"$:/core/ui/ControlPanel/Theme": {
"title": "$:/core/ui/ControlPanel/Theme",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Theme/Caption}}",
"text": "{{$:/snippets/themeswitcher}}\n"
},
"$:/core/ui/ControlPanel/TiddlerFields": {
"title": "$:/core/ui/ControlPanel/TiddlerFields",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
},
"$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>"
},
"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"><$transclude tiddler={{!!icon}}/></span> <$transclude field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude field=\"description\"/></i>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/PageControls": {
"title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars": {
"title": "$:/core/ui/ControlPanel/Toolbars",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
"text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>\n"
},
"$:/ControlPanel": {
"title": "$:/ControlPanel",
"icon": "$:/core/images/options-button",
"color": "#bbb",
"text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Info\">>\n</div>\n"
},
"$:/core/ui/DefaultSearchResultList": {
"title": "$:/core/ui/DefaultSearchResultList",
"tags": "$:/tags/SearchResults",
"caption": "{{$:/language/Search/DefaultResults/Caption}}",
"text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n\\end\n<<searchResultList>>\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-current": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-current",
"tags": "$:/tags/EditPreview",
"caption": "differences from current",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-shadow": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-shadow",
"tags": "$:/tags/EditPreview",
"caption": "differences from shadow (if any)",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{{ [{!!draft.of}shadowsource[]] }}} sourceSubTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/output": {
"title": "$:/core/ui/EditTemplate/body/preview/output",
"tags": "$:/tags/EditPreview",
"caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
"text": "\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
},
"$:/state/showeditpreview": {
"title": "$:/state/showeditpreview",
"text": "no"
},
"$:/core/ui/EditTemplate/body/editor": {
"title": "$:/core/ui/EditTemplate/body/editor",
"text": "<$edit\n\n field=\"text\"\n class=\"tc-edit-texteditor tc-edit-texteditor-body\"\n placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n tabindex={{$:/config/EditTabIndex}}\n focus={{{ [{$:/config/AutoFocus}match[text]then[true]] ~[[false]] }}}\n\n><$set\n\n name=\"targetTiddler\"\n value=<<currentTiddler>>\n\n><$list\n\n filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n type=\"nomatch\"\n state=<<config-visibility-title>>\n text=\"hide\"\n class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
},
"$:/core/ui/EditTemplate/body/toolbar/button": {
"title": "$:/core/ui/EditTemplate/body/toolbar/button",
"text": "\\define toolbar-button-icon()\n<$list\n\n filter=\"[all[current]!has[custom-icon]]\"\n variable=\"no-custom-icon\"\n\n><$transclude\n\n tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n filter={{!!condition}}\n variable=\"list-condition\"\n\n><$wikify\n\n name=\"tooltip-text\"\n text=<<toolbar-button-tooltip>>\n mode=\"inline\"\n output=\"text\"\n\n><$list\n\n filter=\"[all[current]!has[dropdown]]\"\n variable=\"no-dropdown\"\n\n><$button\n\n class=\"tc-btn-invisible $(buttonClasses)$\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button></$list><$list\n\n filter=\"[all[current]has[dropdown]]\"\n variable=\"dropdown\"\n\n><$set\n\n name=\"dropdown-state\"\n value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n popup=<<dropdown-state>>\n class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n selectedClass=\"tc-selected\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button><$reveal\n\n state=<<dropdown-state>>\n type=\"popup\"\n position=\"below\"\n animate=\"yes\"\n tag=\"span\"\n\n><div\n\n class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n tiddler={{!!dropdown}}\n mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n name=\"buttonClasses\"\n value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\" tabindex={{$:/config/EditTabIndex}}></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define current-tiddler-new-field-selector()\n[data-tiddler-title=\"$(currentTiddlerCSSescaped)$\"] .tc-edit-field-add-name input\n\\end\n\n\\define new-field-actions()\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/>\n\\end\n\n\\define new-field()\n<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button tooltip=<<lingo Fields/Add/Button/Hint>>>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>> \n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=<<newFieldNameTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}}/>\n</span> \n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> \n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=<<newFieldNameTiddler>>>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$set name=\"newFieldName\" value={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$set>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}>\n<$keyboard key=\"((add-field))\" actions=<<new-field-actions>>>\n<$edit-text tiddler=<<newFieldValueTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}}/>\n</$keyboard>\n</$set>\n</span> \n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>\n"
},
"$:/core/ui/EditTemplate/shadow": {
"title": "$:/core/ui/EditTemplate/shadow",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\whitespace trim\n\n\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon)\n\\whitespace trim\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label tc-tag-list-item\">\n<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">{{$:/core/images/close-button}}</$button>\n</span>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette,icon)\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon=\"\"\"$icon$\"\"\"/>\n\\end\n\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}}/>\n</$list>\n<$set name=\"tabIndex\" value={{$:/config/EditTabIndex}}>\n<$macrocall $name=\"tag-picker\"/>\n</$set>\n</$fieldmangler>\n</div>\n"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus={{{ [{$:/config/AutoFocus}match[title]then[true]] ~[[false]] }}} tabindex={{$:/config/EditTabIndex}}/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[all[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<$list filter=\"[title<fromTitle>backlinks[]limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/references\">> >\n\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$tiddler tiddler=<<fromTitle>> >\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo/References\"/>\n</$tiddler>\n</$reveal>\n\n</$vars>\n\n</$list>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/EditTemplate/type": {
"title": "$:/core/ui/EditTemplate/type",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\whitespace trim\n<div class=\"tc-type-selector\"><$fieldmangler>\n<em class=\"tc-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}}/> <$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</$set>\n</div>\n"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"text": "\\define save-tiddler-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>\n<$fieldmangler>\n<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify \"$:/temp/NewTagName\">> newFieldNameTiddler=<<qualify \"$:/temp/NewFieldName\">> newFieldValueTiddler=<<qualify \"$:/temp/NewFieldValue\">>>\n<$keyboard key=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" actions=<<save-tiddler-actions>>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$vars>\n</$fieldmangler>\n</div>\n"
},
"$:/core/ui/Buttons/cancel": {
"title": "$:/core/ui/Buttons/cancel",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
"description": "{{$:/language/Buttons/Cancel/Hint}}",
"text": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/delete": {
"title": "$:/core/ui/Buttons/delete",
"tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
"caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
"description": "{{$:/language/Buttons/Delete/Hint}}",
"text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save": {
"title": "$:/core/ui/Buttons/save",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
"description": "{{$:/language/Buttons/Save/Hint}}",
"text": "\\define save-tiddler-button()\n<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<<save-tiddler-actions>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n\\end\n<<save-tiddler-button>>\n"
},
"$:/core/ui/EditorToolbar/bold": {
"title": "$:/core/ui/EditorToolbar/bold",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/bold",
"caption": "{{$:/language/Buttons/Bold/Caption}}",
"description": "{{$:/language/Buttons/Bold/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((bold))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
},
"$:/core/ui/EditorToolbar/clear-dropdown": {
"title": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
},
"$:/core/ui/EditorToolbar/clear": {
"title": "$:/core/ui/EditorToolbar/clear",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/erase",
"caption": "{{$:/language/Buttons/Clear/Caption}}",
"description": "{{$:/language/Buttons/Clear/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/editor-height-dropdown": {
"title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
},
"$:/core/ui/EditorToolbar/editor-height": {
"title": "$:/core/ui/EditorToolbar/editor-height",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/fixed-height",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
"description": "{{$:/language/Buttons/EditorHeight/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] +[first[]]",
"dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/excise-dropdown": {
"title": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
},
"$:/core/ui/EditorToolbar/excise": {
"title": "$:/core/ui/EditorToolbar/excise",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/excise",
"caption": "{{$:/language/Buttons/Excise/Caption}}",
"description": "{{$:/language/Buttons/Excise/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]]",
"shortcuts": "((excise))",
"dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/heading-1": {
"title": "$:/core/ui/EditorToolbar/heading-1",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-1",
"caption": "{{$:/language/Buttons/Heading1/Caption}}",
"description": "{{$:/language/Buttons/Heading1/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((heading-1))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-2": {
"title": "$:/core/ui/EditorToolbar/heading-2",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-2",
"caption": "{{$:/language/Buttons/Heading2/Caption}}",
"description": "{{$:/language/Buttons/Heading2/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-2))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-3": {
"title": "$:/core/ui/EditorToolbar/heading-3",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-3",
"caption": "{{$:/language/Buttons/Heading3/Caption}}",
"description": "{{$:/language/Buttons/Heading3/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-3))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/core/ui/EditorToolbar/heading-4",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-4",
"caption": "{{$:/language/Buttons/Heading4/Caption}}",
"description": "{{$:/language/Buttons/Heading4/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-4))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/core/ui/EditorToolbar/heading-5",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-5",
"caption": "{{$:/language/Buttons/Heading5/Caption}}",
"description": "{{$:/language/Buttons/Heading5/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-5))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/core/ui/EditorToolbar/heading-6",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-6",
"caption": "{{$:/language/Buttons/Heading6/Caption}}",
"description": "{{$:/language/Buttons/Heading6/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-6))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
},
"$:/core/ui/EditorToolbar/italic": {
"title": "$:/core/ui/EditorToolbar/italic",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/italic",
"caption": "{{$:/language/Buttons/Italic/Caption}}",
"description": "{{$:/language/Buttons/Italic/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((italic))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
},
"$:/core/ui/EditorToolbar/line-width-dropdown": {
"title": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/line-width": {
"title": "$:/core/ui/EditorToolbar/line-width",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/line-width",
"caption": "{{$:/language/Buttons/LineWidth/Caption}}",
"description": "{{$:/language/Buttons/LineWidth/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>"
},
"$:/core/ui/EditorToolbar/link-dropdown": {
"title": "$:/core/ui/EditorToolbar/link-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define add-link-actions()\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(linkTiddler)$}} />\n<$action-deletetiddler $tiddler=<<dropdown-state>> />\n<$action-deletetiddler $tiddler=<<searchTiddler>> />\n<$action-deletetiddler $tiddler=<<linkTiddler>> />\n\\end\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\" actions=<<add-link-actions>>>\n{{$:/core/images/chevron-right}}\n</$button>\n\\end\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" >\n\n<$vars linkTiddler=<<searchTiddler>>>\n<$keyboard key=\"ENTER\" actions=<<add-link-actions>>>\n<$edit-text tiddler=<<searchTiddler>> type=\"search\" tag=\"input\" focus=\"true\" placeholder={{$:/language/Search/Search}} default=\"\"/>\n<$reveal tag=\"span\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<<external-link>>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<$action-setfield $tiddler=<<searchTiddler>> text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$keyboard>\n</$vars>\n\n<$reveal tag=\"div\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<add-link-actions>> to=<<linkTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>"
},
"$:/core/ui/EditorToolbar/link": {
"title": "$:/core/ui/EditorToolbar/link",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/link",
"caption": "{{$:/language/Buttons/Link/Caption}}",
"description": "{{$:/language/Buttons/Link/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((link))",
"dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/linkify": {
"title": "$:/core/ui/EditorToolbar/linkify",
"caption": "{{$:/language/Buttons/Linkify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Linkify/Hint}}",
"icon": "$:/core/images/linkify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((linkify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-bullet": {
"title": "$:/core/ui/EditorToolbar/list-bullet",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-bullet",
"caption": "{{$:/language/Buttons/ListBullet/Caption}}",
"description": "{{$:/language/Buttons/ListBullet/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-bullet))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-number": {
"title": "$:/core/ui/EditorToolbar/list-number",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-number",
"caption": "{{$:/language/Buttons/ListNumber/Caption}}",
"description": "{{$:/language/Buttons/ListNumber/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-number))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-block": {
"title": "$:/core/ui/EditorToolbar/mono-block",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-block",
"caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
"description": "{{$:/language/Buttons/MonoBlock/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((mono-block))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-line": {
"title": "$:/core/ui/EditorToolbar/mono-line",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-line",
"caption": "{{$:/language/Buttons/MonoLine/Caption}}",
"description": "{{$:/language/Buttons/MonoLine/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((mono-line))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
},
"$:/core/ui/EditorToolbar/more-dropdown": {
"title": "$:/core/ui/EditorToolbar/more-dropdown",
"text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
},
"$:/core/ui/EditorToolbar/more": {
"title": "$:/core/ui/EditorToolbar/more",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/down-arrow",
"caption": "{{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"condition": "[<targetTiddler>]",
"dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/opacity-dropdown": {
"title": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/EditorToolbar/opacity": {
"title": "$:/core/ui/EditorToolbar/opacity",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/opacity",
"caption": "{{$:/language/Buttons/Opacity/Caption}}",
"description": "{{$:/language/Buttons/Opacity/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
},
"$:/core/ui/EditorToolbar/paint-dropdown": {
"title": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/paint": {
"title": "$:/core/ui/EditorToolbar/paint",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/paint",
"caption": "{{$:/language/Buttons/Paint/Caption}}",
"description": "{{$:/language/Buttons/Paint/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
},
"$:/core/ui/EditorToolbar/picture-dropdown": {
"title": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/picture": {
"title": "$:/core/ui/EditorToolbar/picture",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/picture",
"caption": "{{$:/language/Buttons/Picture/Caption}}",
"description": "{{$:/language/Buttons/Picture/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((picture))",
"dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/preview-type-dropdown": {
"title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
"text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/preview-type": {
"title": "$:/core/ui/EditorToolbar/preview-type",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/chevron-down",
"caption": "{{$:/language/Buttons/PreviewType/Caption}}",
"description": "{{$:/language/Buttons/PreviewType/Hint}}",
"condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
"button-classes": "tc-text-editor-toolbar-item-adjunct",
"dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
},
"$:/core/ui/EditorToolbar/preview": {
"title": "$:/core/ui/EditorToolbar/preview",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/preview-open",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/Preview/Caption}}",
"description": "{{$:/language/Buttons/Preview/Hint}}",
"condition": "[<targetTiddler>]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((preview))",
"text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/quote": {
"title": "$:/core/ui/EditorToolbar/quote",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/quote",
"caption": "{{$:/language/Buttons/Quote/Caption}}",
"description": "{{$:/language/Buttons/Quote/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((quote))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
},
"$:/core/ui/EditorToolbar/rotate-left": {
"title": "$:/core/ui/EditorToolbar/rotate-left",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/rotate-left",
"caption": "{{$:/language/Buttons/RotateLeft/Caption}}",
"description": "{{$:/language/Buttons/RotateLeft/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"rotate-left\"\n/>\n"
},
"$:/core/ui/EditorToolbar/size-dropdown": {
"title": "$:/core/ui/EditorToolbar/size-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> × <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
},
"$:/core/ui/EditorToolbar/size": {
"title": "$:/core/ui/EditorToolbar/size",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/size",
"caption": "{{$:/language/Buttons/Size/Caption}}",
"description": "{{$:/language/Buttons/Size/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/stamp-dropdown": {
"title": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n</$list>\n\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix={{{ [[$(snippetTitle)$]addsuffix[/prefix]get[text]] }}}\nsuffix={{{ [[$(snippetTitle)$]addsuffix[/suffix]get[text]] }}}\n/>\n\n</$list>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" />\n\n</$transclude>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
},
"$:/core/ui/EditorToolbar/stamp": {
"title": "$:/core/ui/EditorToolbar/stamp",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/stamp",
"caption": "{{$:/language/Buttons/Stamp/Caption}}",
"description": "{{$:/language/Buttons/Stamp/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] +[first[]]",
"shortcuts": "((stamp))",
"dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/strikethrough": {
"title": "$:/core/ui/EditorToolbar/strikethrough",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/strikethrough",
"caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
"description": "{{$:/language/Buttons/Strikethrough/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((strikethrough))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
},
"$:/core/ui/EditorToolbar/subscript": {
"title": "$:/core/ui/EditorToolbar/subscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/subscript",
"caption": "{{$:/language/Buttons/Subscript/Caption}}",
"description": "{{$:/language/Buttons/Subscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((subscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
},
"$:/core/ui/EditorToolbar/superscript": {
"title": "$:/core/ui/EditorToolbar/superscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/superscript",
"caption": "{{$:/language/Buttons/Superscript/Caption}}",
"description": "{{$:/language/Buttons/Superscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((superscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
},
"$:/core/ui/EditorToolbar/transcludify": {
"title": "$:/core/ui/EditorToolbar/transcludify",
"caption": "{{$:/language/Buttons/Transcludify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Transcludify/Hint}}",
"icon": "$:/core/images/transcludify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((transcludify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n"
},
"$:/core/ui/EditorToolbar/underline": {
"title": "$:/core/ui/EditorToolbar/underline",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/underline",
"caption": "{{$:/language/Buttons/Underline/Caption}}",
"description": "{{$:/language/Buttons/Underline/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((underline))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
},
"$:/core/Filters/AllTags": {
"title": "$:/core/Filters/AllTags",
"tags": "$:/tags/Filter",
"filter": "[tags[]!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTags}}",
"text": ""
},
"$:/core/Filters/AllTiddlers": {
"title": "$:/core/Filters/AllTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTiddlers}}",
"text": ""
},
"$:/core/Filters/Drafts": {
"title": "$:/core/Filters/Drafts",
"tags": "$:/tags/Filter",
"filter": "[has[draft.of]sort[title]]",
"description": "{{$:/language/Filters/Drafts}}",
"text": ""
},
"$:/core/Filters/Missing": {
"title": "$:/core/Filters/Missing",
"tags": "$:/tags/Filter",
"filter": "[all[missing]sort[title]]",
"description": "{{$:/language/Filters/Missing}}",
"text": ""
},
"$:/core/Filters/Orphans": {
"title": "$:/core/Filters/Orphans",
"tags": "$:/tags/Filter",
"filter": "[all[orphans]sort[title]]",
"description": "{{$:/language/Filters/Orphans}}",
"text": ""
},
"$:/core/Filters/OverriddenShadowTiddlers": {
"title": "$:/core/Filters/OverriddenShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[shadow]]",
"description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentSystemTiddlers": {
"title": "$:/core/Filters/RecentSystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentSystemTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentTiddlers": {
"title": "$:/core/Filters/RecentTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentTiddlers}}",
"text": ""
},
"$:/core/Filters/SessionTiddlers": {
"title": "$:/core/Filters/SessionTiddlers",
"tags": "$:/tags/Filter",
"filter": "[haschanged[]]",
"description": "{{$:/language/Filters/SessionTiddlers}}",
"text": ""
},
"$:/core/Filters/ShadowTiddlers": {
"title": "$:/core/Filters/ShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[all[shadows]sort[title]]",
"description": "{{$:/language/Filters/ShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/StoryList": {
"title": "$:/core/Filters/StoryList",
"tags": "$:/tags/Filter",
"filter": "[list[$:/StoryList]] -$:/AdvancedSearch",
"description": "{{$:/language/Filters/StoryList}}",
"text": ""
},
"$:/core/Filters/SystemTags": {
"title": "$:/core/Filters/SystemTags",
"tags": "$:/tags/Filter",
"filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTags}}",
"text": ""
},
"$:/core/Filters/SystemTiddlers": {
"title": "$:/core/Filters/SystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTiddlers}}",
"text": ""
},
"$:/core/Filters/TypedTiddlers": {
"title": "$:/core/Filters/TypedTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Filters/TypedTiddlers}}",
"text": ""
},
"$:/core/ui/ImportListing": {
"title": "$:/core/ui/ImportListing",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [<payloadTiddler>addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n</$list>\n\\end\n\n<table>\n<tbody>\n<tr>\n<th>\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<<select-all-actions>>>\n<<lingo Listing/Select/Caption>>\n</$checkbox>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n</td>\n<td>\n<$reveal type=\"nomatch\" stateTitle=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<<previewPopupState>> setTo=\"yes\">\n{{$:/core/images/right-arrow}} <$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<<previewPopupState>> setTo=\"no\">\n{{$:/core/images/down-arrow}} <$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" stateTitle=<<previewPopupState>> tag=\"div\">\n<$list filter=\"[{$:/state/importpreviewtype}has[text]]\" variable=\"listItem\" emptyMessage={{$:/core/ui/ImportPreviews/Text}}>\n<$transclude tiddler={{$:/state/importpreviewtype}}/>\n</$list>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Diff": {
"title": "$:/core/ui/ImportPreviews/Diff",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Diff}}",
"text": "<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>>/>\n"
},
"$:/core/ui/ImportPreviews/DiffFields": {
"title": "$:/core/ui/ImportPreviews/DiffFields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/DiffFields}}",
"text": "<$macrocall $name=\"compareTiddlers\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>> exclude=\"text\"/>\n"
},
"$:/core/ui/ImportPreviews/Fields": {
"title": "$:/core/ui/ImportPreviews/Fields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Fields}}",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[<payloadTiddler>subtiddlerfields<currentTiddler>sort[]] -text\" variable=\"fieldName\">\n<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<fieldName>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<fieldName>> tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>>/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Text": {
"title": "$:/core/ui/ImportPreviews/Text",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Text}}",
"text": "<$transclude tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> mode=\"block\"/>\n"
},
"$:/core/ui/ImportPreviews/TextRaw": {
"title": "$:/core/ui/ImportPreviews/TextRaw",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/TextRaw}}",
"text": "<pre><code><$view tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> /></code></pre>"
},
"$:/core/ui/KeyboardShortcuts/advanced-search": {
"title": "$:/core/ui/KeyboardShortcuts/advanced-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((advanced-search))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\"/>\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-image": {
"title": "$:/core/ui/KeyboardShortcuts/new-image",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-image))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-image}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-journal": {
"title": "$:/core/ui/KeyboardShortcuts/new-journal",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-journal))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-journal}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-tiddler": {
"title": "$:/core/ui/KeyboardShortcuts/new-tiddler",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-tiddler))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-tiddler}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/sidebar-search": {
"title": "$:/core/ui/KeyboardShortcuts/sidebar-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((sidebar-search))",
"text": "<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n"
},
"$:/core/ui/KeyboardShortcut/toggle-sidebar": {
"title": "$:/core/ui/KeyboardShortcut/toggle-sidebar",
"tags": "$:/tags/KeyboardShortcut",
"key": "((toggle-sidebar))",
"text": "<$list filter=\"[[$:/state/sidebar]is[missing]] [{$:/state/sidebar}removeprefix[yes]]\" emptyMessage=\"\"\"\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"yes\"/>\n\"\"\">\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"no\"/>\n</$list>\n"
},
"$:/core/ui/ListItemTemplate": {
"title": "$:/core/ui/ListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link />\n</div>"
},
"$:/Manager/ItemMain/Fields": {
"title": "$:/Manager/ItemMain/Fields",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/Fields}}",
"text": "<table>\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/Manager/ItemMain/RawText": {
"title": "$:/Manager/ItemMain/RawText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/RawText}}",
"text": "<pre><code><$view/></code></pre>\n"
},
"$:/Manager/ItemMain/WikifiedText": {
"title": "$:/Manager/ItemMain/WikifiedText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/WikifiedText}}",
"text": "<$transclude mode=\"block\"/>\n"
},
"$:/Manager/ItemSidebar/Colour": {
"title": "$:/Manager/ItemSidebar/Colour",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Colour}}",
"text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n<p style=<<swatch-styles>>/>\n</$vars>\n<p>\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n</p>\n"
},
"$:/Manager/ItemSidebar/Icon": {
"title": "$:/Manager/ItemSidebar/Icon",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Icon}}",
"text": "<p>\n<div class=\"tc-manager-icon-editor\">\n<$button popup=<<qualify \"$:/state/popup/image-picker\">> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n</$transclude>\n</$button>\n<div class=\"tc-block-dropdown-wrapper\" style=\"position: static;\">\n<$reveal state=<<qualify \"$:/state/popup/image-picker\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n<div class=\"tc-block-dropdown tc-popup-keep\" style=\"width: 80%; left: 10%; right: 10%; padding: 0.5em;\">\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<<imageTitle>>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/image-picker\">>/>\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n</div>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tags": {
"title": "$:/Manager/ItemSidebar/Tags",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tags}}",
"text": "\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[<tag>] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<<tag-checkbox-actions>>\n<$action-listops\n\t$tiddler=<<currentTiddler>>\n\t$field=\"tags\"\n\t$subfilter=\"[<tag>] [all[current]tags[]]\"\n/>\n\\end\n\n<p>\n<$list filter=\"[all[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\">\n<div>\n<$checkbox tiddler=<<currentTiddler>> tag=<<tag>> actions=<<tag-checkbox-actions>>>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$checkbox>\n</div>\n</$list>\n</p>\n<p>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tools": {
"title": "$:/Manager/ItemSidebar/Tools",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tools}}",
"text": "<p>\n<$button to=<<currentTiddler>>>{{$:/core/images/link}} open</$button>\n</p>\n<p>\n<$button message=\"tm-edit-tiddler\" param=<<currentTiddler>>>{{$:/core/images/edit-button}} edit</$button>\n</p>\n"
},
"$:/Manager": {
"title": "$:/Manager",
"icon": "$:/core/images/list",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n<div class=\"tc-manager-list-item-content-item\">\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<<listItem>>/>\n\t\t</$reveal>\n\t</$vars>\n</div>\n\\end\n\n<div class=\"tc-manager-wrapper\">\n\t<div class=\"tc-manager-controls\">\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Show/Prompt>> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t<option value=\"tiddlers\"><<lingo Controls/Show/Option/Tiddlers>></option>\n\t\t\t\t<option value=\"tags\"><<lingo Controls/Show/Option/Tags>></option>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Search/Prompt>> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/FilterByTag/Prompt>> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t<option value=\"\"><<lingo Controls/FilterByTag/None>></option>\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t<option value=<<tag>>><$text text=<<tag>>/></option>\n\t\t\t\t</$list>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Sort/Prompt>> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t<optgroup label=\"Common\">\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t\t<optgroup label=\"All\">\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t</$select>\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<<lingo Controls/Order/Prompt>>\n\t\t\t</$checkbox>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t</$checkbox>\n\t\t</div>\n\t</div>\n\t<div class=\"tc-manager-list\">\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<<currentTiddler>>>\n\t\t\t\t<div style=\"tc-manager-list-item\">\n\t\t\t\t\t<$button popup=<<qualify \"$:/state/manager/popup\">> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<<currentTiddler>>/>\n\t\t\t\t\t</$button>\n\t\t\t\t\t<$reveal state=<<qualify \"$:/state/manager/popup\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-tiddler\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-sidebar\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemSidebar]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</$reveal>\n\t\t\t\t</div>\n\t\t\t</$vars>\n\t\t</$list>\n\t</div>\n</div>\n"
},
"$:/core/ui/MissingTemplate": {
"title": "$:/core/ui/MissingTemplate",
"text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
},
"$:/core/ui/MoreSideBar/All": {
"title": "$:/core/ui/MoreSideBar/All",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/All/Caption}}",
"text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Drafts": {
"title": "$:/core/ui/MoreSideBar/Drafts",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Drafts/Caption}}",
"text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Explorer": {
"title": "$:/core/ui/MoreSideBar/Explorer",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Explorer/Caption}}",
"text": "<<tree \"$:/\">>\n"
},
"$:/core/ui/MoreSideBar/Missing": {
"title": "$:/core/ui/MoreSideBar/Missing",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Missing/Caption}}",
"text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Orphans": {
"title": "$:/core/ui/MoreSideBar/Orphans",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Orphans/Caption}}",
"text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar/Plugins]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Plugins/Plugins\">>\n"
},
"$:/core/ui/MoreSideBar/Recent": {
"title": "$:/core/ui/MoreSideBar/Recent",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/MoreSideBar/Shadows": {
"title": "$:/core/ui/MoreSideBar/Shadows",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Shadows/Caption}}",
"text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/System": {
"title": "$:/core/ui/MoreSideBar/System",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/System/Caption}}",
"text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Tags": {
"title": "$:/core/ui/MoreSideBar/Tags",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Tags/Caption}}",
"text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
},
"$:/core/ui/MoreSideBar/Types": {
"title": "$:/core/ui/MoreSideBar/Types",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Types/Caption}}",
"text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Languages": {
"title": "$:/core/ui/MoreSideBar/Plugins/Languages",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins/Plugins",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Theme": {
"title": "$:/core/ui/MoreSideBar/Plugins/Theme",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/Buttons/advanced-search": {
"title": "$:/core/ui/Buttons/advanced-search",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
"description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/close-all": {
"title": "$:/core/ui/Buttons/close-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
"description": "{{$:/language/Buttons/CloseAll/Hint}}",
"text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/control-panel": {
"title": "$:/core/ui/Buttons/control-panel",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
"description": "{{$:/language/Buttons/ControlPanel/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/encryption": {
"title": "$:/core/ui/Buttons/encryption",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
"description": "{{$:/language/Buttons/Encryption/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/export-page": {
"title": "$:/core/ui/Buttons/export-page",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
"description": "{{$:/language/Buttons/ExportPage/Hint}}",
"text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
},
"$:/core/ui/Buttons/fold-all": {
"title": "$:/core/ui/Buttons/fold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
"description": "{{$:/language/Buttons/FoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/full-screen": {
"title": "$:/core/ui/Buttons/full-screen",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
"description": "{{$:/language/Buttons/FullScreen/Hint}}",
"text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/home": {
"title": "$:/core/ui/Buttons/home",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
"description": "{{$:/language/Buttons/Home/Hint}}",
"text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/import": {
"title": "$:/core/ui/Buttons/import",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
"description": "{{$:/language/Buttons/Import/Hint}}",
"text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
},
"$:/core/ui/Buttons/language": {
"title": "$:/core/ui/Buttons/language",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
"description": "{{$:/language/Buttons/Language/Hint}}",
"text": "\\whitespace trim\n\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/languageswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/manager": {
"title": "$:/core/ui/Buttons/manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}",
"description": "{{$:/language/Buttons/Manager/Hint}}",
"text": "\\whitespace trim\n\\define manager-button(class)\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/list}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Manager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<<manager-button>>>\n<<manager-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/more-page-actions": {
"title": "$:/core/ui/Buttons/more-page-actions",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-image": {
"title": "$:/core/ui/Buttons/new-image",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
"description": "{{$:/language/Buttons/NewImage/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/new-journal": {
"title": "$:/core/ui/Buttons/new-journal",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
"description": "{{$:/language/Buttons/NewJournal/Hint}}",
"text": "\\whitespace trim\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<journalButton>>\n"
},
"$:/core/ui/Buttons/new-tiddler": {
"title": "$:/core/ui/Buttons/new-tiddler",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
"description": "{{$:/language/Buttons/NewTiddler/Hint}}",
"text": "\\whitespace trim\n<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/palette": {
"title": "$:/core/ui/Buttons/palette",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
"description": "{{$:/language/Buttons/Palette/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/print": {
"title": "$:/core/ui/Buttons/print",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}",
"description": "{{$:/language/Buttons/Print/Hint}}",
"text": "<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/print-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Print/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/refresh": {
"title": "$:/core/ui/Buttons/refresh",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
"description": "{{$:/language/Buttons/Refresh/Hint}}",
"text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save-wiki": {
"title": "$:/core/ui/Buttons/save-wiki",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
"description": "{{$:/language/Buttons/SaveWiki/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
},
"$:/core/ui/Buttons/storyview": {
"title": "$:/core/ui/Buttons/storyview",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
"description": "{{$:/language/Buttons/StoryView/Hint}}",
"text": "\\whitespace trim\n\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/viewswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/tag-manager": {
"title": "$:/core/ui/Buttons/tag-manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
"description": "{{$:/language/Buttons/TagManager/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/theme": {
"title": "$:/core/ui/Buttons/theme",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
"description": "{{$:/language/Buttons/Theme/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n{{$:/snippets/themeswitcher}}\n</$linkcatcher>\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/timestamp": {
"title": "$:/core/ui/Buttons/timestamp",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}",
"description": "{{$:/language/Buttons/Timestamp/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-on}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/On/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-off}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/unfold-all": {
"title": "$:/core/ui/Buttons/unfold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
"description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/PageTemplate/pagecontrols": {
"title": "$:/core/ui/PageTemplate/pagecontrols",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n</div>\n"
},
"$:/core/ui/PageStylesheet": {
"title": "$:/core/ui/PageStylesheet",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/PageTemplate/alerts": {
"title": "$:/core/ui/PageTemplate/alerts",
"tags": "$:/tags/PageTemplate",
"text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
},
"$:/core/ui/PageTemplate/drafts": {
"title": "$:/core/ui/PageTemplate/drafts",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<$reveal state=\"$:/status/IsReadOnly\" type=\"nomatch\" text=\"yes\" tag=\"div\" class=\"tc-drafts-list\">\n<$list filter=\"[has[draft.of]!sort[modified]] -[list[$:/StoryList]]\">\n<$link>\n{{$:/core/images/edit-button}} <$text text=<<currentTiddler>>/>\n</$link>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/PageTemplate/pluginreloadwarning": {
"title": "$:/core/ui/PageTemplate/pluginreloadwarning",
"tags": "$:/tags/PageTemplate",
"text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[{$:/status/RequireReloadDueToPluginChange}match[yes]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/PageTemplate/sidebar": {
"title": "$:/core/ui/PageTemplate/sidebar",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/SideBarSegments/Visibility/$(listItem)$\n\\end\n\n<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBarSegment]!has[draft.of]]\" variable=\"listItem\">\n\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\" tag=\"div\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n\n</$reveal>\n\n</$list>\n\n</$reveal>\n\n</div>\n\n</$scrollable>\n"
},
"$:/core/ui/PageTemplate/story": {
"title": "$:/core/ui/PageTemplate/story",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template={{$:/config/ui/ViewTemplate}} editTemplate={{$:/config/ui/EditTemplate}} storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate": {
"title": "$:/core/ui/PageTemplate",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"tv-enable-drag-and-drop\" value={{$:/config/DragAndDrop/Enable}}>\n\n<$set name=\"tv-show-missing-links\" value={{$:/config/MissingLinks}}>\n\n<$set name=\"storyviewTitle\" value={{$:/view}}>\n\n<$set name=\"languageTitle\" value={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone enable=<<tv-enable-drag-and-drop>>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/PaletteManager": {
"title": "$:/PaletteManager",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n\\define edit-colour-placeholder()\n edit $(colourName)$\n\\end\n\\define colour-tooltip(showhide) $showhide$ editor for $(newColourName)$ \n\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define delete-colour-index-actions() <$action-setfield $index=<<colourName>>/>\n\\define palette-manager-colour-row-segment()\n\\whitespace trim\n<$edit-text index=<<colourName>> tag=\"input\" placeholder=<<edit-colour-placeholder>> default=\"\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\" class=\"tc-palette-manager-colour-input\"/>\n<$list filter=\"[<currentTiddler>getindex<colourName>removeprefix[<<]removesuffix[>>]] [<currentTiddler>getindex<colourName>removeprefix[<$]removesuffix[/>]]\" variable=\"ignore\">\n<$set name=\"state\" value={{{ [[$:/state/palettemanager/]addsuffix<currentTiddler>addsuffix[/]addsuffix<colourName>] }}}>\n<$wikify name=\"newColourName\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall={{{ [<currentTiddler>getindex<colourName>] }}}/>\"\"\">\n<$reveal state=<<state>> type=\"nomatch\" text=\"show\">\n<$button tooltip=<<colour-tooltip show>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" set=<<state>> setTo=\"show\">{{$:/core/images/down-arrow}} <$text text=<<newColourName>>/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$button tooltip=<<colour-tooltip hide>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" actions=\"\"\"<$action-deletetiddler $tiddler=<<state>>/>\"\"\">{{$:/core/images/up-arrow}} <$text text=<<newColourName>>/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$set name=\"colourName\" value=<<newColourName>>>\n<br>\n<<palette-manager-colour-row-segment>>\n<br><br>\n</$set>\n</$reveal>\n</$wikify>\n</$set>\n</$list>\n\\end\n\\define palette-manager-colour-row()\n\\whitespace trim\n<tr>\n<td>\n<span style=\"float:right;\">\n<$button tooltip=<<lingo Delete/Hint>> aria-label=<<lingo Delete/Hint>> class=\"tc-btn-invisible\" actions=<<delete-colour-index-actions>>>\n{{$:/core/images/delete-button}}</$button>\n</span>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<<palette-manager-colour-row-segment>>\n</td>\n</tr>\n\\end\n\\define palette-manager-table()\n\\whitespace trim\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]indexes[]]\" variable=\"colourName\">\n<$list filter=\"[<currentTiddler>indexes[]removeprefix<colourName>suffix[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[{$:/state/palettemanager/showexternal}removeprefix[yes]suffix[]]\" variable=\"ignore\">\n<<palette-manager-colour-row>>\n</$list>\n\"\"\">\n<<palette-manager-colour-row>>\n</$list>\n</$list>\n</tbody>\n</table>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<$checkbox tiddler=\"$:/state/palettemanager/showexternal\" field=\"text\" checked=\"yes\" unchecked=\"no\"> <<lingo Names/External/Show>></$checkbox>\n\n<<palette-manager-table>>\n"
},
"$:/core/ui/PluginInfo": {
"title": "$:/core/ui/PluginInfo",
"text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<default-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n</$transclude>\n"
},
"$:/core/ui/PluginInfo/Default/contents": {
"title": "$:/core/ui/PluginInfo/Default/contents",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link />\n</li>\n</$list>\n</ul>\n"
},
"$:/core/ui/PluginListItemTemplate": {
"title": "$:/core/ui/PluginListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}><$view field=\"description\"><$view field=\"title\"/></$view></$link>\n</div>"
},
"$:/core/ui/SearchResults": {
"title": "$:/core/ui/SearchResults",
"text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n</$list>\n\n</div>\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tc-more-sidebar\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical tc-sidebar-tabs-more\" />\n</div>"
},
"$:/core/ui/SideBar/Open": {
"title": "$:/core/ui/SideBar/Open",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Open/Caption}}",
"text": "\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=<<tv-story-list>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n<div class=\"tc-sidebar-tab-open\">\n<$list filter=\"[list<tv-story-list>]\" history=<<tv-history-list>> storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">{{$:/core/images/close-button}}</$button> <$link to={{!!title}}><$view field=\"title\"/></$link>\"\"\"/>\n</div>\n</$list>\n<$tiddler tiddler=\"\">\n<div>\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\"\"\"/>\n</div>\n</$tiddler>\n</div>\n"
},
"$:/core/ui/SideBar/Recent": {
"title": "$:/core/ui/SideBar/Recent",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/SideBarLists": {
"title": "$:/core/ui/SideBarLists",
"text": "<$transclude tiddler=\"$:/core/ui/SideBarSegments/search\"/>\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\"/>\n\n"
},
"$:/core/ui/SideBarSegments/page-controls": {
"title": "$:/core/ui/SideBarSegments/page-controls",
"tags": "$:/tags/SideBarSegment",
"text": "{{||$:/core/ui/PageTemplate/pagecontrols}}\n"
},
"$:/core/ui/SideBarSegments/search": {
"title": "$:/core/ui/SideBarSegments/search",
"tags": "$:/tags/SideBarSegment",
"text": "\\whitespace trim\n<div class=\"tc-sidebar-lists tc-sidebar-search\">\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-popup-handle\"/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$set name=\"searchTerm\" value={{{ [<searchTiddler>get[text]] }}}>\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search<searchTerm>]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n</$set>\n</$set>\n</$list>\n</$button>\n</$reveal>\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n{{$:/core/ui/SearchResults}}\n\n</$list>\n\n</$reveal>\n\n</$reveal>\n\n</$set>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-subtitle": {
"title": "$:/core/ui/SideBarSegments/site-subtitle",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-title": {
"title": "$:/core/ui/SideBarSegments/site-title",
"tags": "$:/tags/SideBarSegment",
"text": "<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n"
},
"$:/core/ui/SideBarSegments/tabs": {
"title": "$:/core/ui/SideBarSegments/tabs",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-sidebar-lists tc-sidebar-tabs\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" class=\"tc-sidebar-tabs-main\"/>\n\n</div>\n"
},
"$:/TagManager": {
"title": "$:/TagManager",
"icon": "$:/core/images/tag-button",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n\\whitespace trim\n<$link to=\"\"><<lingo Icons/None>></$link>\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n\\whitespace trim\n<div class=\"tc-drop-down-wrapper\">\n<$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<__title__>> icon=<<navigateTo>>/>\"\"\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define toggleButton(state)\n\\whitespace trim\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"open\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n\\whitespace trim\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td>{{||$:/core/ui/TagTemplate}}</td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td style=\"position:relative;\">\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
},
"$:/core/ui/TagTemplate": {
"title": "$:/core/ui/TagTemplate",
"text": "\\whitespace trim\n<span class=\"tc-tag-list-item\">\n<$set name=\"transclusion\" value=<<currentTiddler>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<<qualify \"$:/state/popup/tag\">> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list>\n<hr>\n<$macrocall $name=\"list-tagged-draggable\" tag=<<currentTiddler>>/>\n</$reveal>\n</$set>\n</span>\n"
},
"$:/core/ui/TiddlerFieldTemplate": {
"title": "$:/core/ui/TiddlerFieldTemplate",
"text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
},
"$:/core/ui/TiddlerFields": {
"title": "$:/core/ui/TiddlerFields",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
},
"$:/core/ui/TiddlerInfo/Advanced": {
"title": "$:/core/ui/TiddlerInfo/Advanced",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Fields": {
"title": "$:/core/ui/TiddlerInfo/Fields",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
"text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
},
"$:/core/ui/TiddlerInfo/List": {
"title": "$:/core/ui/TiddlerInfo/List",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/List/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Listed": {
"title": "$:/core/ui/TiddlerInfo/Listed",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/References": {
"title": "$:/core/ui/TiddlerInfo/References",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/References/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>"
},
"$:/core/ui/TiddlerInfo/Tagging": {
"title": "$:/core/ui/TiddlerInfo/Tagging",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Tools": {
"title": "$:/core/ui/TiddlerInfo/Tools",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/TiddlerInfo": {
"title": "$:/core/ui/TiddlerInfo",
"text": "<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n</div>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>"
},
"$:/core/ui/TopBar/menu": {
"title": "$:/core/ui/TopBar/menu",
"tags": "$:/tags/TopRightBar",
"text": "<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]!match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}</$button>\n</$list>\n<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}</$button>\n</$list>\n"
},
"$:/core/ui/UntaggedTemplate": {
"title": "$:/core/ui/UntaggedTemplate",
"text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/body": {
"title": "$:/core/ui/ViewTemplate/body",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/classic": {
"title": "$:/core/ui/ViewTemplate/classic",
"tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/import": {
"title": "$:/core/ui/ViewTemplate/import",
"tags": "$:/tags/ViewTemplate",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define buttons()\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n<<lingo Listing/Preview>> <$select tiddler=\"$:/state/importpreviewtype\" default=\"$:/core/ui/ImportPreviews/Text\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ImportPreview]!has[draft.of]]\">\n<option value=<<currentTiddler>>>{{!!caption}}</option>\n</$list>\n</$select>\n\\end\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<<buttons>>\n\n{{||$:/core/ui/ImportListing}}\n\n<<buttons>>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ViewTemplate/plugin": {
"title": "$:/core/ui/ViewTemplate/plugin",
"tags": "$:/tags/ViewTemplate",
"text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n{{||$:/core/ui/Components/plugin-info}}\n</$set>\n</$set>\n</$set>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/subtitle": {
"title": "$:/core/ui/ViewTemplate/subtitle",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}} />\n<$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/title": {
"title": "$:/core/ui/ViewTemplate/title",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}>\n<$transclude tiddler={{$:/config/DefaultTiddlerIcon}}/>\n</$transclude>\n</span>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>> mode=\"block\"/></$list>\n\n</$reveal>\n</div>"
},
"$:/core/ui/ViewTemplate/unfold": {
"title": "$:/core/ui/ViewTemplate/unfold",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$vars storyTiddler=<<currentTiddler>> tiddlerInfoState=<<qualify \"$:/state/popup/tiddler-info\">>><div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[shadow]is[tiddler]then[tc-tiddler-overridden-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$vars>\n"
},
"$:/core/ui/Buttons/clone": {
"title": "$:/core/ui/Buttons/clone",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
"description": "{{$:/language/Buttons/Clone/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close-others": {
"title": "$:/core/ui/Buttons/close-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
"description": "{{$:/language/Buttons/CloseOthers/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close": {
"title": "$:/core/ui/Buttons/close",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
"description": "{{$:/language/Buttons/Close/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/edit": {
"title": "$:/core/ui/Buttons/edit",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
"description": "{{$:/language/Buttons/Edit/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/export-tiddler": {
"title": "$:/core/ui/Buttons/export-tiddler",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
"description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
"text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
},
"$:/core/ui/Buttons/fold-bar": {
"title": "$:/core/ui/Buttons/fold-bar",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}",
"description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
"text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
},
"$:/core/ui/Buttons/fold-others": {
"title": "$:/core/ui/Buttons/fold-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
"description": "{{$:/language/Buttons/FoldOthers/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/fold": {
"title": "$:/core/ui/Buttons/fold",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
"description": "{{$:/language/Buttons/Fold/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/info": {
"title": "$:/core/ui/Buttons/info",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
"description": "{{$:/language/Buttons/Info/Hint}}",
"text": "\\whitespace trim\n\\define button-content()\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n</span>\n</$list>\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<<tiddlerInfoState>> type=\"match\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=<<tiddlerInfoState>> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n</$reveal>"
},
"$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/core/ui/Buttons/more-tiddler-actions",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-here": {
"title": "$:/core/ui/Buttons/new-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
"description": "{{$:/language/Buttons/NewHere/Hint}}",
"text": "\\whitespace trim\n\\define newHereActions()\n<$set name=\"tags\" filter=\"[<currentTiddler>] [{$:/config/NewTiddler/Tags!!tags}]\">\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<tags>>/>\n</$set>\n\\end\n\\define newHereButton()\n<$button actions=<<newHereActions>> tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>\n"
},
"$:/core/ui/Buttons/new-journal-here": {
"title": "$:/core/ui/Buttons/new-journal-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
"description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
"text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n</span>\n</$list>\n</$wikify>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags!!tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set>\n</$set>\n</$set>\n"
},
"$:/core/ui/Buttons/open-window": {
"title": "$:/core/ui/Buttons/open-window",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
"description": "{{$:/language/Buttons/OpenWindow/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permalink": {
"title": "$:/core/ui/Buttons/permalink",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
"description": "{{$:/language/Buttons/Permalink/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permaview": {
"title": "$:/core/ui/Buttons/permaview",
"tags": "$:/tags/ViewToolbar $:/tags/PageControls",
"caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
"description": "{{$:/language/Buttons/Permaview/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/DefaultTiddlers": {
"title": "$:/DefaultTiddlers",
"text": "GettingStarted\n"
},
"$:/temp/advancedsearch": {
"title": "$:/temp/advancedsearch",
"text": ""
},
"$:/snippets/allfields": {
"title": "$:/snippets/allfields",
"text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
},
"$:/config/AnimationDuration": {
"title": "$:/config/AnimationDuration",
"text": "400"
},
"$:/config/AutoFocus": {
"title": "$:/config/AutoFocus",
"text": "title"
},
"$:/config/AutoSave": {
"title": "$:/config/AutoSave",
"text": "yes"
},
"$:/config/BitmapEditor/Colour": {
"title": "$:/config/BitmapEditor/Colour",
"text": "#444"
},
"$:/config/BitmapEditor/ImageSizes": {
"title": "$:/config/BitmapEditor/ImageSizes",
"text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3px"
},
"$:/config/BitmapEditor/LineWidths": {
"title": "$:/config/BitmapEditor/LineWidths",
"text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
},
"$:/config/BitmapEditor/Opacities": {
"title": "$:/config/BitmapEditor/Opacities",
"text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
},
"$:/config/BitmapEditor/Opacity": {
"title": "$:/config/BitmapEditor/Opacity",
"text": "1.0"
},
"$:/config/DefaultMoreSidebarTab": {
"title": "$:/config/DefaultMoreSidebarTab",
"text": "$:/core/ui/MoreSideBar/Tags"
},
"$:/config/DefaultSidebarTab": {
"title": "$:/config/DefaultSidebarTab",
"text": "$:/core/ui/SideBar/Open"
},
"$:/config/DownloadSaver/AutoSave": {
"title": "$:/config/DownloadSaver/AutoSave",
"text": "no"
},
"$:/config/Drafts/TypingTimeout": {
"title": "$:/config/Drafts/TypingTimeout",
"text": "400"
},
"$:/config/EditTemplateFields/Visibility/title": {
"title": "$:/config/EditTemplateFields/Visibility/title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/tags": {
"title": "$:/config/EditTemplateFields/Visibility/tags",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/text": {
"title": "$:/config/EditTemplateFields/Visibility/text",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/creator": {
"title": "$:/config/EditTemplateFields/Visibility/creator",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/created": {
"title": "$:/config/EditTemplateFields/Visibility/created",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modified": {
"title": "$:/config/EditTemplateFields/Visibility/modified",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modifier": {
"title": "$:/config/EditTemplateFields/Visibility/modifier",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/type": {
"title": "$:/config/EditTemplateFields/Visibility/type",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.title": {
"title": "$:/config/EditTemplateFields/Visibility/draft.title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.of": {
"title": "$:/config/EditTemplateFields/Visibility/draft.of",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/revision": {
"title": "$:/config/EditTemplateFields/Visibility/revision",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/bag": {
"title": "$:/config/EditTemplateFields/Visibility/bag",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
"text": "hide"
},
"$:/config/EditorTypeMappings/image/gif": {
"title": "$:/config/EditorTypeMappings/image/gif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/webp": {
"title": "$:/config/EditorTypeMappings/image/webp",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heic": {
"title": "$:/config/EditorTypeMappings/image/heic",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heif": {
"title": "$:/config/EditorTypeMappings/image/heif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpeg": {
"title": "$:/config/EditorTypeMappings/image/jpeg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpg": {
"title": "$:/config/EditorTypeMappings/image/jpg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/png": {
"title": "$:/config/EditorTypeMappings/image/png",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/x-icon": {
"title": "$:/config/EditorTypeMappings/image/x-icon",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "text"
},
"$:/config/Manager/Show": {
"title": "$:/config/Manager/Show",
"text": "tiddlers"
},
"$:/config/Manager/Filter": {
"title": "$:/config/Manager/Filter",
"text": ""
},
"$:/config/Manager/Order": {
"title": "$:/config/Manager/Order",
"text": "forward"
},
"$:/config/Manager/Sort": {
"title": "$:/config/Manager/Sort",
"text": "title"
},
"$:/config/Manager/System": {
"title": "$:/config/Manager/System",
"text": "system"
},
"$:/config/Manager/Tag": {
"title": "$:/config/Manager/Tag",
"text": ""
},
"$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": {
"title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText",
"text": "hide"
},
"$:/config/MissingLinks": {
"title": "$:/config/MissingLinks",
"text": "yes"
},
"$:/config/Navigation/UpdateAddressBar": {
"title": "$:/config/Navigation/UpdateAddressBar",
"text": "no"
},
"$:/config/Navigation/UpdateHistory": {
"title": "$:/config/Navigation/UpdateHistory",
"text": "no"
},
"$:/config/NewImageType": {
"title": "$:/config/NewImageType",
"text": "jpeg"
},
"$:/config/OfficialPluginLibrary": {
"title": "$:/config/OfficialPluginLibrary",
"tags": "$:/tags/PluginLibrary",
"url": "https://tiddlywiki.com/library/v5.1.22/index.html",
"caption": "{{$:/language/OfficialPluginLibrary}}",
"text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
},
"$:/config/Navigation/openLinkFromInsideRiver": {
"title": "$:/config/Navigation/openLinkFromInsideRiver",
"text": "below"
},
"$:/config/Navigation/openLinkFromOutsideRiver": {
"title": "$:/config/Navigation/openLinkFromOutsideRiver",
"text": "top"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
"text": "hide"
},
"$:/config/Performance/Instrumentation": {
"title": "$:/config/Performance/Instrumentation",
"text": "no"
},
"$:/config/RegisterPluginType/plugin": {
"title": "$:/config/RegisterPluginType/plugin",
"text": "yes"
},
"$:/config/RegisterPluginType/theme": {
"title": "$:/config/RegisterPluginType/theme",
"text": "no"
},
"$:/config/RegisterPluginType/language": {
"title": "$:/config/RegisterPluginType/language",
"text": "no"
},
"$:/config/RegisterPluginType/info": {
"title": "$:/config/RegisterPluginType/info",
"text": "no"
},
"$:/config/RegisterPluginType/import": {
"title": "$:/config/RegisterPluginType/import",
"text": "no"
},
"$:/config/SaveWikiButton/Template": {
"title": "$:/config/SaveWikiButton/Template",
"text": "$:/core/save/all"
},
"$:/config/SaverFilter": {
"title": "$:/config/SaverFilter",
"text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
},
"$:/config/Search/AutoFocus": {
"title": "$:/config/Search/AutoFocus",
"text": "true"
},
"$:/config/Search/MinLength": {
"title": "$:/config/Search/MinLength",
"text": "3"
},
"$:/config/SearchResults/Default": {
"title": "$:/config/SearchResults/Default",
"text": "$:/core/ui/DefaultSearchResultList"
},
"$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]": {
"title": "$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]",
"text": "yes"
},
"$:/config/ShortcutInfo/add-field": {
"title": "$:/config/ShortcutInfo/add-field",
"text": "{{$:/language/EditTemplate/Fields/Add/Button/Hint}}"
},
"$:/config/ShortcutInfo/advanced-search": {
"title": "$:/config/ShortcutInfo/advanced-search",
"text": "{{$:/language/Buttons/AdvancedSearch/Hint}}"
},
"$:/config/ShortcutInfo/bold": {
"title": "$:/config/ShortcutInfo/bold",
"text": "{{$:/language/Buttons/Bold/Hint}}"
},
"$:/config/ShortcutInfo/cancel-edit-tiddler": {
"title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
"text": "{{$:/language/Buttons/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/excise": {
"title": "$:/config/ShortcutInfo/excise",
"text": "{{$:/language/Buttons/Excise/Hint}}"
},
"$:/config/ShortcutInfo/heading-1": {
"title": "$:/config/ShortcutInfo/heading-1",
"text": "{{$:/language/Buttons/Heading1/Hint}}"
},
"$:/config/ShortcutInfo/heading-2": {
"title": "$:/config/ShortcutInfo/heading-2",
"text": "{{$:/language/Buttons/Heading2/Hint}}"
},
"$:/config/ShortcutInfo/heading-3": {
"title": "$:/config/ShortcutInfo/heading-3",
"text": "{{$:/language/Buttons/Heading3/Hint}}"
},
"$:/config/ShortcutInfo/heading-4": {
"title": "$:/config/ShortcutInfo/heading-4",
"text": "{{$:/language/Buttons/Heading4/Hint}}"
},
"$:/config/ShortcutInfo/heading-5": {
"title": "$:/config/ShortcutInfo/heading-5",
"text": "{{$:/language/Buttons/Heading5/Hint}}"
},
"$:/config/ShortcutInfo/heading-6": {
"title": "$:/config/ShortcutInfo/heading-6",
"text": "{{$:/language/Buttons/Heading6/Hint}}"
},
"$:/config/ShortcutInfo/italic": {
"title": "$:/config/ShortcutInfo/italic",
"text": "{{$:/language/Buttons/Italic/Hint}}"
},
"$:/config/ShortcutInfo/link": {
"title": "$:/config/ShortcutInfo/link",
"text": "{{$:/language/Buttons/Link/Hint}}"
},
"$:/config/ShortcutInfo/list-bullet": {
"title": "$:/config/ShortcutInfo/list-bullet",
"text": "{{$:/language/Buttons/ListBullet/Hint}}"
},
"$:/config/ShortcutInfo/list-number": {
"title": "$:/config/ShortcutInfo/list-number",
"text": "{{$:/language/Buttons/ListNumber/Hint}}"
},
"$:/config/ShortcutInfo/mono-block": {
"title": "$:/config/ShortcutInfo/mono-block",
"text": "{{$:/language/Buttons/MonoBlock/Hint}}"
},
"$:/config/ShortcutInfo/mono-line": {
"title": "$:/config/ShortcutInfo/mono-line",
"text": "{{$:/language/Buttons/MonoLine/Hint}}"
},
"$:/config/ShortcutInfo/new-image": {
"title": "$:/config/ShortcutInfo/new-image",
"text": "{{$:/language/Buttons/NewImage/Hint}}"
},
"$:/config/ShortcutInfo/new-journal": {
"title": "$:/config/ShortcutInfo/new-journal",
"text": "{{$:/language/Buttons/NewJournal/Hint}}"
},
"$:/config/ShortcutInfo/new-tiddler": {
"title": "$:/config/ShortcutInfo/new-tiddler",
"text": "{{$:/language/Buttons/NewTiddler/Hint}}"
},
"$:/config/ShortcutInfo/picture": {
"title": "$:/config/ShortcutInfo/picture",
"text": "{{$:/language/Buttons/Picture/Hint}}"
},
"$:/config/ShortcutInfo/preview": {
"title": "$:/config/ShortcutInfo/preview",
"text": "{{$:/language/Buttons/Preview/Hint}}"
},
"$:/config/ShortcutInfo/quote": {
"title": "$:/config/ShortcutInfo/quote",
"text": "{{$:/language/Buttons/Quote/Hint}}"
},
"$:/config/ShortcutInfo/save-tiddler": {
"title": "$:/config/ShortcutInfo/save-tiddler",
"text": "{{$:/language/Buttons/Save/Hint}}"
},
"$:/config/ShortcutInfo/sidebar-search": {
"title": "$:/config/ShortcutInfo/sidebar-search",
"text": "{{$:/language/Buttons/SidebarSearch/Hint}}"
},
"$:/config/ShortcutInfo/stamp": {
"title": "$:/config/ShortcutInfo/stamp",
"text": "{{$:/language/Buttons/Stamp/Hint}}"
},
"$:/config/ShortcutInfo/strikethrough": {
"title": "$:/config/ShortcutInfo/strikethrough",
"text": "{{$:/language/Buttons/Strikethrough/Hint}}"
},
"$:/config/ShortcutInfo/subscript": {
"title": "$:/config/ShortcutInfo/subscript",
"text": "{{$:/language/Buttons/Subscript/Hint}}"
},
"$:/config/ShortcutInfo/superscript": {
"title": "$:/config/ShortcutInfo/superscript",
"text": "{{$:/language/Buttons/Superscript/Hint}}"
},
"$:/config/ShortcutInfo/toggle-sidebar": {
"title": "$:/config/ShortcutInfo/toggle-sidebar",
"text": "{{$:/language/Buttons/ToggleSidebar/Hint}}"
},
"$:/config/ShortcutInfo/underline": {
"title": "$:/config/ShortcutInfo/underline",
"text": "{{$:/language/Buttons/Underline/Hint}}"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
},
"$:/config/Tags/MinLength": {
"title": "$:/config/Tags/MinLength",
"text": "0"
},
"$:/config/TextEditor/EditorHeight/Height": {
"title": "$:/config/TextEditor/EditorHeight/Height",
"text": "400px"
},
"$:/config/TextEditor/EditorHeight/Mode": {
"title": "$:/config/TextEditor/EditorHeight/Mode",
"text": "auto"
},
"$:/config/TiddlerInfo/Default": {
"title": "$:/config/TiddlerInfo/Default",
"text": "$:/core/ui/TiddlerInfo/Fields"
},
"$:/config/TiddlerInfo/Mode": {
"title": "$:/config/TiddlerInfo/Mode",
"text": "popup"
},
"$:/config/Tiddlers/TitleLinks": {
"title": "$:/config/Tiddlers/TitleLinks",
"text": "no"
},
"$:/config/Toolbar/ButtonClass": {
"title": "$:/config/Toolbar/ButtonClass",
"text": "tc-btn-invisible"
},
"$:/config/Toolbar/Icons": {
"title": "$:/config/Toolbar/Icons",
"text": "yes"
},
"$:/config/Toolbar/Text": {
"title": "$:/config/Toolbar/Text",
"text": "no"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
"text": "show"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
"text": "hide"
},
"$:/config/shortcuts-mac/bold": {
"title": "$:/config/shortcuts-mac/bold",
"text": "meta-B"
},
"$:/config/shortcuts-mac/italic": {
"title": "$:/config/shortcuts-mac/italic",
"text": "meta-I"
},
"$:/config/shortcuts-mac/underline": {
"title": "$:/config/shortcuts-mac/underline",
"text": "meta-U"
},
"$:/config/shortcuts-mac/new-image": {
"title": "$:/config/shortcuts-mac/new-image",
"text": "ctrl-I"
},
"$:/config/shortcuts-mac/new-journal": {
"title": "$:/config/shortcuts-mac/new-journal",
"text": "ctrl-J"
},
"$:/config/shortcuts-mac/new-tiddler": {
"title": "$:/config/shortcuts-mac/new-tiddler",
"text": "ctrl-N"
},
"$:/config/shortcuts-not-mac/bold": {
"title": "$:/config/shortcuts-not-mac/bold",
"text": "ctrl-B"
},
"$:/config/shortcuts-not-mac/italic": {
"title": "$:/config/shortcuts-not-mac/italic",
"text": "ctrl-I"
},
"$:/config/shortcuts-not-mac/underline": {
"title": "$:/config/shortcuts-not-mac/underline",
"text": "ctrl-U"
},
"$:/config/shortcuts-not-mac/new-image": {
"title": "$:/config/shortcuts-not-mac/new-image",
"text": "alt-I"
},
"$:/config/shortcuts-not-mac/new-journal": {
"title": "$:/config/shortcuts-not-mac/new-journal",
"text": "alt-J"
},
"$:/config/shortcuts-not-mac/new-tiddler": {
"title": "$:/config/shortcuts-not-mac/new-tiddler",
"text": "alt-N"
},
"$:/config/shortcuts/add-field": {
"title": "$:/config/shortcuts/add-field",
"text": "enter"
},
"$:/config/shortcuts/advanced-search": {
"title": "$:/config/shortcuts/advanced-search",
"text": "ctrl-shift-A"
},
"$:/config/shortcuts/cancel-edit-tiddler": {
"title": "$:/config/shortcuts/cancel-edit-tiddler",
"text": "escape"
},
"$:/config/shortcuts/excise": {
"title": "$:/config/shortcuts/excise",
"text": "ctrl-E"
},
"$:/config/shortcuts/sidebar-search": {
"title": "$:/config/shortcuts/sidebar-search",
"text": "ctrl-shift-F"
},
"$:/config/shortcuts/heading-1": {
"title": "$:/config/shortcuts/heading-1",
"text": "ctrl-1"
},
"$:/config/shortcuts/heading-2": {
"title": "$:/config/shortcuts/heading-2",
"text": "ctrl-2"
},
"$:/config/shortcuts/heading-3": {
"title": "$:/config/shortcuts/heading-3",
"text": "ctrl-3"
},
"$:/config/shortcuts/heading-4": {
"title": "$:/config/shortcuts/heading-4",
"text": "ctrl-4"
},
"$:/config/shortcuts/heading-5": {
"title": "$:/config/shortcuts/heading-5",
"text": "ctrl-5"
},
"$:/config/shortcuts/heading-6": {
"title": "$:/config/shortcuts/heading-6",
"text": "ctrl-6"
},
"$:/config/shortcuts/link": {
"title": "$:/config/shortcuts/link",
"text": "ctrl-L"
},
"$:/config/shortcuts/linkify": {
"title": "$:/config/shortcuts/linkify",
"text": "alt-shift-L"
},
"$:/config/shortcuts/list-bullet": {
"title": "$:/config/shortcuts/list-bullet",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/list-number": {
"title": "$:/config/shortcuts/list-number",
"text": "ctrl-shift-N"
},
"$:/config/shortcuts/mono-block": {
"title": "$:/config/shortcuts/mono-block",
"text": "ctrl-shift-M"
},
"$:/config/shortcuts/mono-line": {
"title": "$:/config/shortcuts/mono-line",
"text": "ctrl-M"
},
"$:/config/shortcuts/picture": {
"title": "$:/config/shortcuts/picture",
"text": "ctrl-shift-I"
},
"$:/config/shortcuts/preview": {
"title": "$:/config/shortcuts/preview",
"text": "alt-P"
},
"$:/config/shortcuts/quote": {
"title": "$:/config/shortcuts/quote",
"text": "ctrl-Q"
},
"$:/config/shortcuts/save-tiddler": {
"title": "$:/config/shortcuts/save-tiddler",
"text": "ctrl+enter"
},
"$:/config/shortcuts/stamp": {
"title": "$:/config/shortcuts/stamp",
"text": "ctrl-S"
},
"$:/config/shortcuts/strikethrough": {
"title": "$:/config/shortcuts/strikethrough",
"text": "ctrl-T"
},
"$:/config/shortcuts/subscript": {
"title": "$:/config/shortcuts/subscript",
"text": "ctrl-shift-B"
},
"$:/config/shortcuts/superscript": {
"title": "$:/config/shortcuts/superscript",
"text": "ctrl-shift-P"
},
"$:/config/shortcuts/toggle-sidebar": {
"title": "$:/config/shortcuts/toggle-sidebar",
"text": "alt-shift-S"
},
"$:/config/shortcuts/transcludify": {
"title": "$:/config/shortcuts/transcludify",
"text": "alt-shift-T"
},
"$:/config/ui/EditTemplate": {
"title": "$:/config/ui/EditTemplate",
"text": "$:/core/ui/EditTemplate"
},
"$:/config/ui/ViewTemplate": {
"title": "$:/config/ui/ViewTemplate",
"text": "$:/core/ui/ViewTemplate"
},
"$:/config/WikiParserRules/Inline/wikilink": {
"title": "$:/config/WikiParserRules/Inline/wikilink",
"text": "enable"
},
"$:/snippets/currpalettepreview": {
"title": "$:/snippets/currpalettepreview",
"text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch()\n<$set name=\"swatchColour\" value={{##$(colour)$}}\n><div class=\"tc-swatch\" style=<<swatchStyle>> title=<<colour>>/></$set>\n\\end\n<div class=\"tc-swatches-horiz\"><$list filter=\"\nforeground\nbackground\nmuted-foreground\nprimary\npage-background\ntab-background\ntiddler-info-background\n\" variable=\"colour\"><<swatch>></$list></div>"
},
"$:/snippets/download-wiki-button": {
"title": "$:/snippets/download-wiki-button",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
},
"$:/language": {
"title": "$:/language",
"text": "$:/languages/en-GB"
},
"$:/snippets/languageswitcher": {
"title": "$:/snippets/languageswitcher",
"text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$linkcatcher to=\"$:/language\">\n<div class=\"tc-chooser tc-language-chooser\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/language}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/macros/CSS": {
"title": "$:/core/macros/CSS",
"tags": "$:/tags/Macro",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"><$transclude tiddler=\"$:/config/DefaultColourMappings/$name$\"/></$transclude></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}} _canonical_uri={{$title$!!_canonical_uri}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-background-attachment(text)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" type=\"nomatch\" text=\"\">$text$</$reveal>\n\\end\n"
},
"$:/core/macros/colour-picker": {
"title": "$:/core/macros/colour-picker",
"tags": "$:/tags/Macro",
"text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<span style=\"display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/>\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
},
"$:/core/macros/copy-to-clipboard": {
"title": "$:/core/macros/copy-to-clipboard",
"tags": "$:/tags/Macro",
"text": "\\define copy-to-clipboard(src,class:\"tc-btn-invisible\",style)\n<$button class=<<__class__>> style=<<__style__>> message=\"tm-copy-to-clipboard\" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>\n{{$:/core/images/copy-clipboard}} <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>\n</$button>\n\\end\n\n\\define copy-to-clipboard-above-right(src,class:\"tc-btn-invisible\",style)\n<div style=\"position: relative;\">\n<div style=\"position: absolute; bottom: 0; right: 0;\">\n<$macrocall $name=\"copy-to-clipboard\" src=<<__src__>> class=<<__class__>> style=<<__style__>>/>\n</div>\n</div>\n\\end\n\n"
},
"$:/core/macros/diff": {
"title": "$:/core/macros/diff",
"tags": "$:/tags/Macro",
"text": "\\define compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>>>\n<$diff-text source=<<source>> dest=<<dest>>/>\n</$set>\n</$set>\n\\end\n\n\\define compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\n<table class=\"tc-diff-tiddlers\">\n<tbody>\n<$set name=\"sourceFields\" filter=\"[<__sourceTiddlerTitle__>fields[]sort[]]\">\n<$set name=\"destFields\" filter=\"[<__destSubTiddlerTitle__>subtiddlerfields<__destTiddlerTitle__>sort[]]\">\n<$list filter=\"[enlist<sourceFields>] [enlist<destFields>] -[enlist<__exclude__>] +[sort[]]\" variable=\"fieldName\">\n<tr>\n<th>\n<$text text=<<fieldName>>/> \n</th>\n<td>\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>> field=<<fieldName>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>> field=<<fieldName>>>\n<$diff-text source=<<source>> dest=<<dest>>>\n</$diff-text>\n</$set>\n</$set>\n</td>\n</tr>\n</$list>\n</$set>\n</$set>\n</tbody>\n</table>\n\\end\n"
},
"$:/core/macros/dumpvariables": {
"title": "$:/core/macros/dumpvariables",
"tags": "$:/tags/Macro",
"text": "\\define dumpvariables()\n<ul>\n<$list filter=\"[variables[]]\" variable=\"varname\">\n<li>\n<strong><code><$text text=<<varname>>/></code></strong>:<br/>\n<$codeblock code={{{ [<varname>getvariable[]] }}}/>\n</li>\n</$list>\n</ul>\n\\end\n"
},
"$:/core/macros/export": {
"title": "$:/core/macros/export",
"tags": "$:/tags/Macro",
"text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\"><$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button></span><$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</div>\n</$reveal>\n\\end\n"
},
"$:/core/macros/image-picker": {
"title": "$:/core/macros/image-picker",
"created": "20170715180840889",
"modified": "20170715180914005",
"tags": "$:/tags/Macro",
"type": "text/vnd.tiddlywiki",
"text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<<imageTitle>>/>\n</$button>\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n<div class=\"tc-image-chooser\">\n<$vars state-system=<<qualify \"$:/state/image-picker/system\">>>\n<$checkbox tiddler=<<state-system>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n</$checkbox>\n<$reveal state=<<state-system>> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n<$reveal state=<<state-system>> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n</$vars>\n</div>\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n"
},
"$:/core/macros/lingo": {
"title": "$:/core/macros/lingo",
"tags": "$:/tags/Macro",
"text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
},
"$:/core/macros/list": {
"title": "$:/core/macros/list",
"tags": "$:/tags/Macro",
"text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\",emptyMessage)\n\\whitespace trim\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\" emptyMessage=<<__emptyMessage__>>>\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n\\whitespace trim\n<span class=\"tc-links-draggable-list\">\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\"/>\n<div>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$transclude>\n</div>\n</$droppable>\n</$list>\n</$type$>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"div\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\">\n \n</div>\n<div style=\"height:0.5em;\"/>\n</$droppable>\n</$tiddler>\n</$vars>\n</span>\n\\end\n\n\\define list-tagged-draggable-drop-actions(tag)\n<!-- Save the current ordering of the tiddlers with this tag -->\n<$set name=\"order\" filter=\"[<__tag__>tagging[]]\">\n<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\n<$list filter=\"[<__tag__>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n</$list>\n<!-- Save the new order to the Tag Tiddler -->\n<$action-listops $tiddler=<<__tag__>> $field=\"list\" $filter=\"+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]\"/>\n<!-- Make sure the newly added item has the right tag -->\n<!-- Removing this line makes dragging tags within the dropdown work as intended -->\n<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->\n<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->\n<$list filter=\"[<actionTiddler>!contains:tags<__tag__>]\">\n<$fieldmangler tiddler=<<actionTiddler>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__tag__>>/>\n</$fieldmangler>\n</$list>\n</$set>\n\\end\n\n\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\"div\",storyview:\"\")\n\\whitespace trim\n<span class=\"tc-tagged-draggable-list\">\n<$set name=\"tag\" value=<<__tag__>>>\n<$list filter=\"[<__tag__>tagging[]$subFilter$]\" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$elementTag$>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$set>\n</span>\n\\end\n"
},
"$:/core/macros/tabs": {
"title": "$:/core/macros/tabs",
"tags": "$:/tags/Macro",
"text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\" storyview=\"pop\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler></$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tag-picker": {
"title": "$:/core/macros/tag-picker",
"tags": "$:/tags/Macro",
"text": "\\define add-tag-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n\\end\n\n\\define tag-button()\n<$button class=\"tc-btn-invisible\" tag=\"a\" tooltip={{$:/language/EditTemplate/Tags/Add/Button/Hint}}>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<tag>>/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$button>\n\\end\n\n\\define tag-picker-inner()\n\\whitespace trim\n<div class=\"tc-edit-add-tag\">\n<span class=\"tc-add-tag-name\">\n<$keyboard key=\"ENTER\" actions=<<add-tag-actions>>>\n<$edit-text tiddler=<<newTagNameTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex=<<tabIndex>> focus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}}/>\n</$keyboard>\n</span> <$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <span class=\"tc-add-tag-button\">\n<$set name=\"tag\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$button set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n<<add-tag-actions>>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n</$button>\n</$set>\n</span>\n</div>\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown\">\n<$set name=\"newTagName\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$list filter=\"[<newTagName>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]!is[system]search:title<newTagName>sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list></$list>\n<hr>\n<$list filter=\"[<newTagName>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]is[system]search:title<newTagName>sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list></$list>\n</$set>\n</div>\n</$reveal>\n</div>\n\\end\n\\define tag-picker()\n\\whitespace trim\n<$list filter=\"[<newTagNameTiddler>match[]]\" emptyMessage=<<tag-picker-inner>>>\n<$set name=\"newTagNameTiddler\" value=<<qualify \"$:/temp/NewTagName\">>>\n<<tag-picker-inner>>\n</$set>\n</$list>\n\\end\n"
},
"$:/core/macros/tag": {
"title": "$:/core/macros/tag",
"tags": "$:/tags/Macro",
"text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view tiddler=<<__tag__>> field=\"title\" format=\"text\" />\n</$element-tag$>\n</$vars>\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=<<__tag__>> icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-pill-body\" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</span>\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
},
"$:/core/macros/thumbnails": {
"title": "$:/core/macros/thumbnails",
"tags": "$:/tags/Macro",
"text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
},
"$:/core/macros/timeline": {
"title": "$:/core/macros/timeline",
"created": "20141212105914482",
"modified": "20141212110330815",
"tags": "$:/tags/Macro",
"text": "\\define timeline-title()\n\\whitespace trim\n<!-- Override this macro with a global macro \n of the same name if you need to change \n how titles are displayed on the timeline \n -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><<timeline-title>></$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
},
"$:/core/macros/toc": {
"title": "$:/core/macros/toc",
"tags": "$:/tags/Macro",
"text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n <$transclude field=\"caption\">\n <$view field=\"title\"/>\n </$transclude>\n</$set>\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<ol class=\"tc-toc\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/></$view></$link>\">\n <<toc-caption>>\n </$list>\n <$macrocall $name=\"toc-body\" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </li>\n </$set>\n </$set>\n </$vars>\n </$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\"\")\n<$macrocall $name=\"toc-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$link>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-expandable-empty-message()\n<$macrocall $name=\"toc-linked-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\"\",exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<<excluded>> path=<<path>> />\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\" >\n <li class=<<toc-item-class>>>\n <$link>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n </$list>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n </$list>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<$macrocall $name=\"toc-linked-selective-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-selective-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-selective-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>\n <div class=\"tc-tabbed-table-of-contents\">\n <$linkcatcher to=<<__selectedTiddler__>>>\n <div class=\"tc-table-of-contents\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"[all[current]] -[<__selectedTiddler__>get[text]]\"/>\n </div>\n </$linkcatcher>\n <div class=\"tc-tabbed-table-of-contents-content\">\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"nomatch\" text=\"\">\n <$transclude mode=\"block\" tiddler=<<__template__>>>\n <h1><<toc-caption>></h1>\n <$transclude mode=\"block\">$missingText$</$transclude>\n </$transclude>\n </$reveal>\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"match\" text=\"\">\n $unselectedText$\n </$reveal>\n </div>\n </div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=<<__selectedTiddler__>>>\n <$macrocall $name=\"toc-tabbed-external-nav\" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>\n</$linkcatcher>\n\\end\n\n"
},
"$:/core/macros/translink": {
"title": "$:/core/macros/translink",
"tags": "$:/tags/Macro",
"text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tree": {
"title": "$:/core/macros/tree",
"tags": "$:/tags/Macro",
"text": "\\define leaf-link(full-title,chunk,separator: \"/\")\n<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>\n\\end\n\n\\define leaf-node(prefix,chunk)\n<li>\n<$list filter=\"[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]\" variable=\"full-title\">\n<$list filter=\"[<full-title>removeprefix<__prefix__>]\" variable=\"chunk\">\n<span>{{$:/core/images/file}}</span> <$macrocall $name=\"leaf-link\" full-title=<<full-title>> chunk=<<chunk>>/>\n</$list>\n</$list>\n</li>\n\\end\n\n\\define branch-node(prefix,chunk,separator: \"/\")\n<li>\n<$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>\n<$reveal type=\"nomatch\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<span>(<$count filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]\"/>)</span>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$macrocall $name=\"tree-node\" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>\n</$reveal>\n</$set>\n</li>\n\\end\n\n\\define tree-node(prefix,separator: \"/\")\n<ol>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"leaf-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"branch-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n</ol>\n\\end\n\n\\define tree(prefix: \"$:/\",separator: \"/\")\n<div class=\"tc-tree\">\n<span><$text text=<<__prefix__>>/></span>\n<div>\n<$macrocall $name=\"tree-node\" prefix=<<__prefix__>> separator=<<__separator__>>/>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/utils": {
"title": "$:/core/macros/utils",
"text": "\\define colour(colour)\n$colour$\n\\end\n"
},
"$:/snippets/minifocusswitcher": {
"title": "$:/snippets/minifocusswitcher",
"text": "<$select tiddler=\"$:/config/AutoFocus\">\n<$list filter=\"title tags text type fields\">\n<option value=<<currentTiddler>>><<currentTiddler>></option>\n</$list>\n</$select>\n"
},
"$:/snippets/minilanguageswitcher": {
"title": "$:/snippets/minilanguageswitcher",
"text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/minithemeswitcher": {
"title": "$:/snippets/minithemeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/modules": {
"title": "$:/snippets/modules",
"text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
},
"$:/palette": {
"title": "$:/palette",
"text": "$:/palettes/Vanilla"
},
"$:/snippets/paletteeditor": {
"title": "$:/snippets/paletteeditor",
"text": "<$transclude tiddler=\"$:/PaletteManager\"/>\n"
},
"$:/snippets/palettepreview": {
"title": "$:/snippets/palettepreview",
"text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n{{||$:/snippets/currpalettepreview}}\n</$set>\n"
},
"$:/snippets/paletteswitcher": {
"title": "$:/snippets/paletteswitcher",
"text": "<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[name]]\"><$set name=\"cls\" filter=\"[all[current]prefix{$:/palette}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/>{{||$:/snippets/currpalettepreview}}</$link>\n</div></$set>\n</$list>\n</div>\n</$linkcatcher>\n"
},
"$:/snippets/peek-stylesheets": {
"title": "$:/snippets/peek-stylesheets",
"text": "\\define expandable-stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$vars state=<<qualify \"$:/state/peek-stylesheets/open/\">>>\n<$set name=\"state\" value={{{ [<state>addsuffix<currentTiddler>] }}}>\n<li>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"no\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"div\">\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</$reveal>\n</li>\n</$set>\n</$vars>\n</$list>\n</ol>\n\\end\n\n\\define stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<li>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</li>\n</$list>\n</ol>\n\\end\n\n<$vars modeState=<<qualify \"$:/state/peek-stylesheets/mode/\">>>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"expanded\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"restored\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}</$button>\n</$reveal>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<expandable-stylesheets-list>>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<stylesheets-list>>\n</$reveal>\n\n</$vars>\n"
},
"$:/temp/search": {
"title": "$:/temp/search",
"text": ""
},
"$:/tags/AdvancedSearch": {
"title": "$:/tags/AdvancedSearch",
"list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
},
"$:/tags/AdvancedSearch/FilterButton": {
"title": "$:/tags/AdvancedSearch/FilterButton",
"list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
},
"$:/tags/ControlPanel/Info": {
"title": "$:/tags/ControlPanel/Info",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
},
"$:/tags/ControlPanel/Plugins": {
"title": "$:/tags/ControlPanel/Plugins",
"list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
},
"$:/tags/EditorToolbar": {
"title": "$:/tags/EditorToolbar",
"list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
},
"$:/tags/Manager/ItemMain": {
"title": "$:/tags/Manager/ItemMain",
"list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields"
},
"$:/tags/Manager/ItemSidebar": {
"title": "$:/tags/Manager/ItemSidebar",
"list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools"
},
"$:/tags/MoreSideBar": {
"title": "$:/tags/MoreSideBar",
"list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]",
"text": ""
},
"$:/tags/PageControls": {
"title": "$:/tags/PageControls",
"list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
},
"$:/tags/PageTemplate": {
"title": "$:/tags/PageTemplate",
"list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
"text": ""
},
"$:/tags/PluginLibrary": {
"title": "$:/tags/PluginLibrary",
"list": "$:/config/OfficialPluginLibrary"
},
"$:/tags/SideBar": {
"title": "$:/tags/SideBar",
"list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
"text": ""
},
"$:/tags/SideBarSegment": {
"title": "$:/tags/SideBarSegment",
"list": "[[$:/core/ui/SideBarSegments/site-title]] [[$:/core/ui/SideBarSegments/site-subtitle]] [[$:/core/ui/SideBarSegments/page-controls]] [[$:/core/ui/SideBarSegments/search]] [[$:/core/ui/SideBarSegments/tabs]]"
},
"$:/tags/TiddlerInfo": {
"title": "$:/tags/TiddlerInfo",
"list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
"text": ""
},
"$:/tags/TiddlerInfo/Advanced": {
"title": "$:/tags/TiddlerInfo/Advanced",
"list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
},
"$:/tags/ViewTemplate": {
"title": "$:/tags/ViewTemplate",
"list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "<$linkcatcher to=\"$:/theme\">\n<div class=\"tc-chooser\"><$list filter=\"[plugin-type[theme]sort[title]]\"><$set name=\"cls\" filter=\"[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/wiki/title": {
"title": "$:/core/wiki/title",
"text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
},
"$:/view": {
"title": "$:/view",
"text": "classic"
},
"$:/snippets/viewswitcher": {
"title": "$:/snippets/viewswitcher",
"text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<$linkcatcher to=\"$:/view\">\n<div class=\"tc-chooser tc-viewswitcher\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$set name=\"cls\" filter=\"[<storyview>prefix{$:/view}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link to=<<storyview>>><$transclude tiddler=<<icon>>/><$text text=<<storyview>>/></$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
}
}
}
{
"tiddlers": {
"$:/images/fa5/solid/user-cog": {
"title": "$:/images/fa5/solid/user-cog",
"caption": "user-cog (Solid)",
"modified": "20200606040451692",
"tags": "$:/tags/Image [[Font Awesome 5]] Solid $:/ipfs/documentation $:/isAttachment $:/isEmbedded",
"source": "http://fa5-free-svg.tiddlyspot.com/",
"original": "https://fontawesome.com/",
"license": "https://creativecommons.org/licenses/by/4.0",
"text": "\n<svg class=\"tc-image-user-cog tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 640 512\">\n <path d=\"M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z\"/>\n</svg>"
},
"$:/ipfs/image/bluelight": {
"title": "$:/ipfs/image/bluelight",
"_canonical_uri": "/ipfs/bafybeibi5ldguonidlwomjxwjehodpmypgex5qd2fe6f6yuka4dqvbzvpq",
"_import_uri": "/ipfs/bafybeiejplubmcgpkaqwjc23ebo6vorv2p4cwlr7kkhm4cakgtneefjuc4",
"modified": "20200526065100279",
"tags": "$:/ipfs/documentation $:/isAttachment $:/isIpfs",
"type": "image/jpg",
"text": ""
},
"$:/core/images/ens": {
"title": "$:/core/images/ens",
"modified": "20200528044634920",
"source": "https://github.com/ensdomains/ens-app/blob/dev/public/safari-pinned-tab.svg",
"license": "https://github.com/ensdomains/ens-app/blob/dev/LICENSE",
"tags": "$:/tags/Image $:/ipfs/core $:/isAttachment $:/isEmbedded",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:cc=\"http://creativecommons.org/ns#\"\n xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n xmlns:svg=\"http://www.w3.org/2000/svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n version=\"1.0\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 128 128\"\n class=\"tc-image-button\"\n preserveAspectRatio=\"xMidYMid meet\"\n id=\"svg14\"\n sodipodi:docname=\"ens-small.svg\"\n inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"\n>\n <defs\n id=\"defs18\" />\n <sodipodi:namedview\n pagecolor=\"#ffffff\"\n bordercolor=\"#666666\"\n borderopacity=\"1\"\n objecttolerance=\"10\"\n gridtolerance=\"10\"\n guidetolerance=\"10\"\n inkscape:pageopacity=\"0\"\n inkscape:pageshadow=\"2\"\n inkscape:window-width=\"1920\"\n inkscape:window-height=\"1020\"\n id=\"namedview16\"\n showgrid=\"false\"\n inkscape:zoom=\"12.361274\"\n inkscape:cx=\"41.295086\"\n inkscape:cy=\"21.734019\"\n inkscape:window-x=\"0\"\n inkscape:window-y=\"31\"\n inkscape:window-maximized=\"1\"\n inkscape:current-layer=\"svg14\" />\n <metadata\n id=\"metadata2\">\nCreated by potrace 1.11, written by Peter Selinger 2001-2013\n<rdf:RDF>\n <cc:Work\n rdf:about=\"\">\n <dc:format>image/svg+xml</dc:format>\n <dc:type\n rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n <dc:title></dc:title>\n </cc:Work>\n</rdf:RDF>\n</metadata>\n <g\n transform=\"matrix(0.08837363,0,0,-0.07925696,-8.0787259,127.6037)\"\n id=\"g12\"\n style=\"fill:#000000;stroke:none\">\n <path\n d=\"m 640,1519 c -69,-48 -173,-122 -231,-163 -94,-65 -110,-82 -134,-129 -30,-63 -37,-155 -15,-222 15,-49 61,-135 71,-135 6,0 437,704 447,731 7,19 -17,4 -138,-82 z\"\n id=\"path4\"\n inkscape:connector-curvature=\"0\" />\n <path\n d=\"m 856,1598 c 4,-7 44,-67 89,-133 118,-175 286,-437 393,-615 93,-154 122,-224 125,-300 2,-55 17,-35 52,75 26,80 28,92 22,217 -7,185 -45,284 -149,387 -35,36 -520,381 -534,381 -3,0 -2,-6 2,-12 z\"\n id=\"path6\"\n inkscape:connector-curvature=\"0\" />\n <path\n d=\"M 141,1068 C 97,969 87,913 93,776 98,649 106,607 146,523 163,485 224,403 254,378 291,346 772,9 776,12 c 2,2 -57,95 -131,206 -132,199 -320,496 -404,639 -48,81 -70,145 -73,210 -1,23 -3,43 -4,43 -2,0 -12,-19 -23,-42 z\"\n id=\"path8\"\n inkscape:connector-curvature=\"0\" />\n <path\n d=\"M 1079,398 C 962,204 859,34 851,20 l -16,-25 30,21 c 306,211 436,304 461,331 51,53 72,165 49,254 -14,51 -63,149 -76,149 -4,0 -103,-159 -220,-352 z\"\n id=\"path10\"\n inkscape:connector-curvature=\"0\" />\n </g>\n</svg>"
},
"$:/ipfs/logo/vector/ice/text": {
"title": "$:/ipfs/logo/vector/ice/text",
"modified": "20200528040053586",
"source": "https://github.com/ipfs/logo/blob/master/vector/ipfs-logo-vector-ice-text.svg",
"license": "https://github.com/ipfs/logo/blob/master/LICENSE",
"tags": "$:/isAttachment $:/isEmbedded",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg\n xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n style=\"enable-background:new\" xmlns=\"http://www.w3.org/2000/svg\"\n height=\"512\"\n width=\"512\"\n version=\"1.1\"\n xmlns:cc=\"http://creativecommons.org/ns#\"\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n viewBox=\"0 0 512 512\"\n>\n <defs>\n <linearGradient id=\"c\" y2=\"771.51\" gradientUnits=\"userSpaceOnUse\" y1=\"771.51\" x2=\"527.72\" x1=\"84.315\">\n <stop stop-color=\"#4a9ea1\" offset=\"0\"/>\n </linearGradient>\n <linearGradient id=\"d\" y2=\"771.48\" gradientUnits=\"userSpaceOnUse\" y1=\"771.48\" x2=\"512.36\" x1=\"99.675\">\n <stop stop-color=\"#63d3d7\" offset=\"0\"/>\n </linearGradient>\n </defs>\n <g>\n <g style=\"enable-background:new\" transform=\"translate(-50.017,-515.51)\">\n <path fill=\"url(#c)\" d=\"m84.315 899.51 221.7 128 221.7-128v-256l-221.7-127.99-221.7 128z\"/>\n <path fill=\"url(#d)\" d=\"m283.13 546.35-160.74 92.806c0.32126 2.8543 0.32125 5.7352 0 8.5894l160.75 92.806c13.554-10.001 32.043-10.001 45.597 0l160.75-92.807c-0.32126-2.8543-0.32293-5.7338-0.001-8.588l-160.74-92.806c-13.554 10.001-32.044 10.001-45.599 0zm221.79 127.03-160.92 93.84c1.884 16.739-7.3611 32.751-22.799 39.489l0.18062 184.58c2.6325 1.1489 5.1267 2.5886 7.438 4.294l160.75-92.805c-1.884-16.739 7.3611-32.752 22.799-39.49v-185.61c-2.6325-1.1489-5.1281-2.5886-7.4394-4.294zm-397.81 1.0315c-2.3112 1.7054-4.8054 3.1465-7.438 4.2954v185.61c15.438 6.7378 24.683 22.75 22.799 39.489l160.74 92.806c2.3112-1.7054 4.8069-3.1465 7.4394-4.2954v-185.61c-15.438-6.7378-24.683-22.75-22.799-39.489l-160.74-92.81z\"/>\n </g>\n <g style=\"enable-background:new\" transform=\"translate(0,-196.66)\">\n <path fill-opacity=\".25098\" d=\"m256 708.66 221.7-128v-256l-221.7 128v256z\"/>\n <path fill-opacity=\".039216\" d=\"m256 708.66v-256l-221.7-128v256l221.7 128z\"/>\n <path fill-opacity=\".13018\" d=\"m34.298 324.66 221.7 128 221.7-128-221.7-128-221.7 128z\"/>\n </g>\n </g>\n <g style=\"enable-background:new\" fill=\"#fff\">\n <path d=\"m103.09 186h-29.2v141.2h29.2v-141.2z\"/>\n <path d=\"m153.97 327.2v-51.8c7.2 0.6 14.4 0.6 20.4 0.6 41.6 0 53.6-20.6 53.6-46 0-30.8-22-44-56-44h-47.2v141.2h29.2zm15.8-71.8c-5.4 0-13.4 0-15.8-0.2v-48h18.2c17.6 0 27.6 8.4 27.6 23.8v0.4c0 12-4.4 24-30 24z\"/>\n <path d=\"m327.95 186h-88.6v141.2h29.2v-62.2h55.4v-21.2h-55.6v-36.4h57.6l2-21.4z\"/>\n <path d=\"m423.51 213.6 7.6-19.6c-11.4-8.2-26.8-11.2-46.2-11.2-28.2 0-51.4 13.2-51.4 40.2 0 24.2 17.8 33.8 35.6 39.6l17.8 6c12.2 4.2 22.2 8.2 22.2 21.4 0 12-10.4 16.8-26.2 16.8-16 0-33.2-4.8-43-11l-7.6 21.2c12.8 8.2 29 12.2 50.8 12.2 31 0 55-13.6 55-42.6 0-27-20.6-35.6-41.4-42.6l-19.4-6.4c-8.4-2.8-14.8-6.6-14.8-17.4 0-11 9-15.4 22.4-15.4 16.4 0 29.2 3 38.6 8.8z\"/>\n </g>\n</svg>"
},
"$:/core/images/ipfs": {
"title": "$:/core/images/ipfs",
"modified": "20200528044634920",
"source": "https://github.com/ipfs/logo/blob/master/vector/ipfs-logo-vector-black.svg",
"license": "https://github.com/ipfs/logo/blob/master/LICENSE",
"tags": "$:/tags/Image $:/ipfs/core $:/isAttachment $:/isEmbedded",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:cc=\"http://creativecommons.org/ns#\"\n xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n xmlns:svg=\"http://www.w3.org/2000/svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n style=\"enable-background:new\"\n height=\"22\"\n width=\"22\"\n version=\"1.1\"\n viewBox=\"0 0 128 128\"\n class=\"tc-image-button\"\n id=\"svg24\"\n sodipodi:docname=\"ipfs-small.svg\"\n inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"\n>\n <metadata\n id=\"metadata28\">\n <rdf:RDF>\n <cc:Work\n rdf:about=\"\">\n <dc:format>image/svg+xml</dc:format>\n <dc:type\n rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n <dc:title></dc:title>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <sodipodi:namedview\n pagecolor=\"#ffffff\"\n bordercolor=\"#666666\"\n borderopacity=\"1\"\n objecttolerance=\"10\"\n gridtolerance=\"10\"\n guidetolerance=\"10\"\n inkscape:pageopacity=\"0\"\n inkscape:pageshadow=\"2\"\n inkscape:window-width=\"1920\"\n inkscape:window-height=\"1020\"\n id=\"namedview26\"\n showgrid=\"false\"\n units=\"pt\"\n inkscape:zoom=\"5.2149125\"\n inkscape:cx=\"133.61143\"\n inkscape:cy=\"41.576599\"\n inkscape:window-x=\"0\"\n inkscape:window-y=\"31\"\n inkscape:window-maximized=\"1\"\n inkscape:current-layer=\"svg24\" />\n <defs\n id=\"defs8\">\n <linearGradient\n id=\"b\"\n y2=\"771.51001\"\n gradientUnits=\"userSpaceOnUse\"\n x2=\"527.71997\"\n y1=\"771.51001\"\n x1=\"84.315002\">\n <stop\n offset=\"0\"\n id=\"stop2\" />\n </linearGradient>\n <linearGradient\n id=\"a\"\n y2=\"771.47998\"\n gradientUnits=\"userSpaceOnUse\"\n x2=\"512.35999\"\n y1=\"771.47998\"\n x1=\"99.675003\">\n <stop\n stop-color=\"#d8d8d8\"\n offset=\"0\"\n id=\"stop5\" />\n </linearGradient>\n </defs>\n <g\n transform=\"matrix(0.28867709,0,0,0.24999998,-24.339808,-128.87748)\"\n id=\"g14\">\n <path\n d=\"m 84.315,899.51 221.7,128 221.7,-128 v -256 l -221.7,-127.99 -221.7,128 z\"\n id=\"path10\"\n style=\"fill:url(#b)\"\n inkscape:connector-curvature=\"0\" />\n <path\n d=\"m 283.13,546.35 -160.74,92.806 c 0.32126,2.8543 0.32125,5.7352 0,8.5894 l 160.75,92.806 c 13.554,-10.001 32.043,-10.001 45.597,0 l 160.75,-92.807 c -0.32126,-2.8543 -0.32293,-5.7338 -0.001,-8.588 l -160.74,-92.806 c -13.554,10.001 -32.044,10.001 -45.599,0 z M 504.92,673.38 344,767.22 c 1.884,16.739 -7.3611,32.751 -22.799,39.489 l 0.18062,184.58 c 2.6325,1.1489 5.1267,2.5886 7.438,4.294 l 160.75,-92.805 c -1.884,-16.739 7.3611,-32.752 22.799,-39.49 v -185.61 c -2.6325,-1.1489 -5.1281,-2.5886 -7.4394,-4.294 z m -397.81,1.0315 c -2.3112,1.7054 -4.8054,3.1465 -7.438,4.2954 v 185.61 c 15.438,6.7378 24.683,22.75 22.799,39.489 l 160.74,92.806 c 2.3112,-1.7054 4.8069,-3.1465 7.4394,-4.2954 v -185.61 c -15.438,-6.7378 -24.683,-22.75 -22.799,-39.489 l -160.74,-92.81 z\"\n id=\"path12\"\n style=\"fill:url(#a)\"\n inkscape:connector-curvature=\"0\" />\n </g>\n <g\n transform=\"matrix(0.28867709,0,0,0.24999998,-9.9010468,-49.164992)\"\n id=\"g22\">\n <path\n d=\"m 256,708.66 221.7,-128 v -256 l -221.7,128 z\"\n id=\"path16\"\n inkscape:connector-curvature=\"0\"\n style=\"fill-opacity:0.25097997\" />\n <path\n d=\"m 256,708.66 v -256 l -221.7,-128 v 256 z\"\n id=\"path18\"\n inkscape:connector-curvature=\"0\"\n style=\"fill-opacity:0.03921599\" />\n <path\n d=\"m 34.298,324.66 221.7,128 221.7,-128 -221.7,-128 z\"\n id=\"path20\"\n inkscape:connector-curvature=\"0\"\n style=\"fill-opacity:0.13018003\" />\n </g>\n</svg>"
},
"$:/core/images/bluelight": {
"title": "$:/core/images/bluelight",
"modified": "20200528045157536",
"tags": "$:/tags/Image $:/ipfs/core $:/isAttachment $:/isEmbedded",
"type": "image/png",
"text": "iVBORw0KGgoAAAANSUhEUgAAAS4AAAEaCAIAAAAgyS2vAAAeJnpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjarZtnshw5doX/YxVaAtyFWQ5shHag5es7qEc2TTdHMyGyyXpdlZUJXHMMALrzP/993X/xq8bYXLbaSi/F8yv33OPgh+Y/vz6vwef39/sVz9dP4ef3XRhfP0ZeE6/p80E5n9f3uf31hZq/3p8/v+/q+npS+7rR1wfc+P1KerJ+/rqufd0oxc/74ev/Xf/63sg/TOfrT/42xa+b//b/lWBs434punhSSMw8NT0lff4M/tj7mwfzeeDn8PV++PvYue8//hK8c79P8afY+W8xTT+HwvnydUH5JUZf7wf75f30fXrx56z571n76YNYyMuPv36I3b273Xs+sxu5EKnivib1LYTvJy7kJjm9rxV+V/4YP9f3u/O7McVFxjbZnPxeLvQQieMNOewwwg3nva6wGGKOJ1ZeY1wxvfdaqrHHpaCnrN/hxpp62i418rTIWuLt+H0s4T23v+et0HjyDlwZAzcLfOO33+7v3vxPfn+/0b0q3RAUTFIfPgmOqmmGoczpb64iIeF+xdRefN9v9z2tf/1SYhMZtBfmxgSHn59bTAt/1VZ6eU5cZz47/2mNUPfXDQgRzzYGQ0Xn4EtIFkrwYEUNgTg28jMYeUw5TjIQzOIO7pKblArJaVHP5js1vGujxc/bQAuJsFRSJTU9DZKVs1E/NTdqaFiy7MysWLVm3UZJJRcrpdQijBo11Vytllprq72Ollpu1kqrrbXeRo89AWHWS6+ut977GDx0cOvBtwdXjDHjTDNPm2XW2WafY1E+Ky9bZdXVVl9jx5027b/Lrm633fc44VBKJx875dTTTj/jUms33Xztlltvu/2O71n7yurPWQu/ZO7PWQtfWVPG8ruu/pU13q712y2C4MSUMzIWcyDjVRmgoKNy5lvIOSpzypnvkaawSNaCKTk7KGNkMJ8Q7Ybvufsrc3/Mm7P8b+Ut/lPmnFL3/5E5p9R9Ze73vP1N1vZ4jJJegtSFiqlPF2DjohEb/4HH/8Zrmasp4rWHFkdzZ+S+yK+vFizTV2MTp14XM9otz5pXOWMu39KOfeZdTszMptm7K4illzHd3vvasLaYku29FjRVbwWJ/Uh8Qu0E8hFn3CXlvXPugdjvclMPe6TueXitydGNZS//xjz8f/7q/uED7n8qfdO2HZtnUzKTuohxH6pthFwptbBzHzfXZCs4yqGulGqJl28QhLYWkxm1gjNnDJI2Tl9xUhD75BJaM4DpVvI7eVrbx985uhtn5kJpENbOZ8Ha5RYLbEDuUMxzdvAr0y15UQ7cozGItBM1RQmVNdIsbR6y1k6+o59TZllmmdK9cRD16S+N1G33ct6Ej0/Tl8nwejqNBuO62javc29X7xtMsp3HsZjok9RGirVl8zzex3l4OF87sVOxt1kgq2GMdccoLVP/C2Zz+0ZCkxqRPCcLBW1XGlP0VdfK1ExhiGqVRQj97I3Bb7qxldLWOVYJTfCuzNMv9NLqPYynrnxPYIzzzBbuAYtordivlbDPXOGseQIzGucy45zu7hVGTjAtEaSq0JLbGxkQZzE0snz92TymNcUAoImJW9e+yOOeYaYBvoxJy4Jri6m9Up/rpOz/k577enXCKMZTTfNe0M6MdS4KkMhTIsaECw+96Ku9GFcq+xJtMldDbbNoBgUQcsmvCrUJpkxvnmm1x0pcbvB7l5lO8nPOQpdPAlQKhZstnNpCO6PS9LvSbo7SjAgdWyo2ZgyY7poTX2nD6IBkgHL1p60UxyJ6sO0dJxFypGhFNCwCzo3GaTPQJMA9EaUEqMcd5wzUX1+1l3wiwc0RfOB5dFD62851+gGOL9/Chg6iT5bKZQ+g/M41QOnL3z4OowT6AOApArNlGwnW795huR5uN+tTgMfsYoh7rtX54ZyHgqP0cAjnyQiveBYug7ntIvwffc0B7lmYbkwIdfcWF+h+PIV2eqGAwhy6roeV94FXJo1qDBtWBKPbEcnMls/8qgH35yJZ5UJ7MAjK8pJERtksQTtG6NWE+XgSV0h/3nNCr6VAe7suHt4vapFO8VwgMdpB5rFvLcR8KaKFoqKbxh2BJ50eb1nI4znapQpL24Ui4MPA18rYvpO8mjzsl9JSYQbK8GxwbtqeQOfMRvGB8rQP4H+CaIpaqauIGNdgDpXuhC/uoe8BerQxHNxorhN6C0iBI6nZ7WZaEOjdBVNDLG4k0sHAkQC8gV79FopgqvvoaoT5AAgpGLDnCiF7qJDpJZU3AbahHmd3nQE6trMIBmOOfZHHdUEyKvD6ix6xvCHoMs3wAFT6pmJaGoBYlJbkr+Ho1iKB0DvfmBm0o9FmMKpu7ciHrxAQEv5HQvydeEg/UgfHoXsv2JTy0KeXLgcF6DtgZ+8kZinceOIkAFegcV+4IUNGO45TzdHS5IuJgqQyDMRqIZmol6ySKO3jsYB0WjJCQdaOYJZU0yKUtIFCuxFsjSDCOULVf4VfByaIUoEqOlB0gNIDfiLDDrRQHkCiG/O5FuAG4LsVyAzyX/TraP0gh9beFPPsVEd4KI8sy1M/jWvNvVsAMpCUxMCucHGpRgmtiyAJO/lhHb8kmX8O+rDDJSnQhtQRKgpJs8bYrudM3fNEHtORa7e3shOkf2mwXSpubls/JXSwF2iM/uoGcx6fbwM1uBWoWxzAC/JC3iUJYe6aEQCktW5BfQ/ac8iSbxqP1u991zP3vbjBud60DsjAkNzcponwFpy0T70kXLVoaBAezjTDCzHciRqo6R6yVIgi7T24B09CsOAgfV1QxaaNIp/N2vyEJ0ySrFJ9eNMBFIATKNYjbVPn02PoKzmD4RM9THM4sAkpCzBTybLLpA1tRFfMDMq2a56IbZo3LjVR8spblhagx1K+IWo2KzqGHfgIpR9aj3BmzMJQun3r4ijq6ugC6ztA9kAD/vaeFIkMDEPZjow/G24Ji+NET9IBw1MxhWDigdMi2nNLj6ikUFGwE4OUFGXUcCKNf8O8CwjNyOOzzoXnOgQEODNtfwgp40ILoJtIHjJoCj0QNke6S6AWhifF/nUDKjsPh+bFfECXyPKQYIi6U/8U1LxZ1bSJH3EqMBNR7dy/pZsiKfeB8kN9TAyGQ/YUZApfmHQI6DmQcx3B1Icv+sJrB1Q9nmICN0hsOwhzlVQQZSIWsb5YUX7WcpJ8FfiRvFQPDcebOCauw4bZP72iNmGZS22h2I50ecZkeFAcEORv/rsXJaEaBGI+n5WOJMY00NcU2WX6c9brqzQxasUtvA/slcge6o6XgAmziAG6cB8WlYZPXK++plwV14ZZxyHOktPiWQEBSkFCASS3i1POWfQvcNcKIUOzUasGbRCWab59GGwb4qNgW9AmACrpQMSGsmERkD9Qw1C4Sr/iDbVg05DwFCuay4qIHA2jiwpVDCPMQa+AMChQvA4Y01ywRINTizPQhOSfmZJTAQJ0SG162hgAYYIEwSh6uoTSJpgegK8qb+j8ONQHjFoqSoPKoHSkR41PJ0+oMN6kcfY6uAN0Gx72A7biJDTP5XbC0xzdPDXC4umTKi8VSGfwxKaFLQ8GoAcM+Y5aApMQxfgPckmLvgrr6M8MVEuN3IK2BtT6XZDD+5BraPlAD9IH7z2EUkJ4MU/UKk0Dx9L8qFLUsz53qGmQE3JSR2tO1Ea/aW+KRMECyWRlE6NmcGAgXShx0OAxLD7gBbp2QS26jrRTOxeEqyhgcO1q2cKeeCctF3xF6K8CU987iUKin0FmSpRyNanr60yX5KyayVprQNx1mRd68KYQVaOoSUo3Gu13mTt6elGcSQYXX8Ig8SjQkTAfhAvI5tiyZzYHEczYJwKEFkQTImhh2lZ8fsWFhJJNCsWHplAKtK676DaTtgS2ADDYtzdQGflxGw2B3ENegZMkqqa5F/SDQ6n41JvALCiuUVMNwU5SkFqkaF6aGgGMcyaIqcHxwq7V0EAd7DNocAigcFBhTFXaQMgNZJ14Db0LH6y2O3UO9ZF6ejhmLGyQEZhoCox7xARgA/PcHRGcayULzJGqokFq9ss9U9AVa1AReURE0VERvmmQsG8BRtIokzBmJTok1W+qIq0nKqh/yRrCtXp9ThHQ2Oj9DWnBo7QNcE5UZOSqEDldrsblhIskBYnmwu7GtfvyuOzQMQzwCNTRJcPhfbQBIN0pUfxWzkMjXZd2o58pPzmMTV7oQWlan7XE49CVKw6s9tFiQMHcY52pJUac0bIgywUXfMc9oOngWq0WaTmyS7FFg5MRtRsWSeIseAC/+W6JfPI03rhSuWU9eP6g+nd0TwAQIKpFNw87J2kPx/jRQBG9AzPywAbHhGpBSwAloFgQn72jucLefdNkX3gv49sBfENkvaaF6YMWEnmTG2AGcLsT3kFUTvq0eFWN9Cb8fT0EnUotGBLQp6GcnoeluZaDY3k2lgtMV4qu2ZDOfrRHuiGOPgoVGFcaGZbBuAJNs4ZZIk18KKdL87ir7kFcEyvMHNm4yFdsvwEuB/0OYNOIICSEDt4F8oj5NC00dJisyJB52tVxD4a9eeQ1rV0gaCpl3JGaWJsKFSGEUYLYP1+aRB5czPi31oPU67fmusZyxYNmJP5tt+S39QMdayFOFn1I5kqnUZv0JmNvWrgqkZtSVolv4wzx4dARHEADk/iStFRRWoIUI0bJXwx8Bp+xLNRglew5YBsshmXGHyHd6+1FIn0AbLLtOZ6W6mdLpbUmVu+kMjTrCUuetTSCHYLEyRJoS7VW1FmjeSs9nuK+DtcCkw+CCMyibUDMRpNxARxLPxZgj3gueQfpbBAvXoYC7DwepltouLLAI4pfa4QlGsAHl7QlErwUAi/T4HRMcQJTswEhg0kD7UJI+Gx+npcnvLbnbiAkuEf1hhnzAAArUlkrj8AxM8B+Y5ZAEqOXofOZV+cbuYFh4tVG5h2lj9/V+knXTpAWlikFYhHUuFDMRkWgFDBCHQFaGrEGwCCshbLTgHGcgJgD7KlxZJP4YgxZNSS3FoxI6kHoIuIbIk7uVgYW5+gVpKUlz6sGLzjFFN2l1Cr/XZTF1BpICRkXQkhBECwRCESz4ylIcTFUCGxynwU0xgtfpYjHACEZYhiSCCUGSZKqAsklaT+K0WP7Mes1Fhp/hqZQbakRbkuhrQTUQrxMzyVmDBDivW+ZFb2PvQ15hzG6r1I/IDXuEvr1i9JGPNvSck9JHoSuQ1LYSKhbKPEkXaUKohojz8M44/Fgg4D/i9hu6yiWkE4DrOdCDxDI3OCUBY1+LKEW66KJwrlvDFTJotbBVLGcdE5jPFskNptZp4rruPheyJc0RzgFzc4joWxkd4f/50LL+EUvICN4E1V1Zu2Cl0N+lmltB8LSysLGZQ6G4SmTEykdRK6jDYirkA/LThi2XDu0ikPSTh+soN1DS7iIkewxWiakvuAYO8QG2uEusKJaqMzDI0M7BWQZvZffMsyQKSFtxIMS4f+0Hi0EXGIGuDDS5Xtq1VY+G3fU4HGLDGkNiC3OGLTepvW031cdTkEmVWaMMKXwQy7UQZeNdk1CGb0+kKG4OPQ9fh2vRJZB+0Q0J72D6QYR65rUM8MnNTKC6PyUGrSJrXfn0dnCr+H/FhpEux2YoAkNA1mUeyMWk5g8CYq4X8akD0hCB4StCRQS6IAHwA+K3QwkIbiNAAMEFGTGnPoO55kYFJvK3CEkvnoQ+16bDNQLIMb1G14jiFt1ZknbDwU63VoKWhgoZAF+Zk7JT5C/1IiZoTiQJ/ktriKrJK5QX+4TWGjnVo9ikXPvWmT5wbejpcaVEPbnInKnXCjcjvYM8DA2SIbKyZUgzEfO2kRAA6Gx0JqY4zXlp0x5geU3E7qoi0OCA+2JbkNV0IIk4CAjHKwJT71Fk9ghGqAnLY3JQFM72hcAz5mL7kJjB4x1p1WIKwpsKeW+IvlctjJAP1wtl0pTFTw4N4MdiSNCVW6ax9M8TRYGENy3hZTn4Eri11A6oTVXEwpnEEkiiM7jRx67Ef9a3/UooCN45o60Dd07IWngNhGLO1tAZEydXMhHu1ngBzNH5lDZ9S3FSiWPSPlDemiCJlEFRqKrETzgCwxfk9qqIoQ0m9a1L8K1NNBAF9Jr1A3WSVIVTUPB3BG1KrW1ADzl66g0KLlj7Rqzokb7JGwZmwWwaO2o04hgq4AJvg/+5bt8y3eFwHsMmW7cjLtqochPXABdtMcSQTKAgzNYfm4tvAhyU4WTO6iy6dolSwaybimIMvG0tNZzdj6gVS6AHwmdCxXHioZBZy5hGHJ17fTZmdAqc4CkPcBbkUmgrdGBBM83db4c9dvm4k6oWm6phchSUK5JsjupsgH4or2xfIzbI+knloaIUDYza7Fma61709HaHCjFEdPTMAtvWwL2rh1MQ02JNg/mYGk1HcGHCPdDuxGoOZCF8qp4Sp6ujefdvFto1C2bCcDy3IaA1poGjUg50CYJMYTeRZPTvzJon1nHX7dj3L/eh/mrlfcfWtl962VksgexsFdPScNsEWs+0a+QS88kcmkvu3GBKliOX8vfKBV0NRLeBT3FZGa0t9TLx2V7r2dDUAvfHs9G9kNHyLeEmiIOcC5qSktcGf9//ByOtIMcE7MjceSxhlPLNiLwjcbT6hseFxG4hjRx0yMCFEkZamtva6MgBAqSDgHM41hIcwyJ/H9qPLuFPD0jMdLcjEmgS1G5CCLuh75EvFEuW2pOABZ0AgF6GchpqptMkxutMnaKk6Bo+xt9gsHTBoLk2pTgAYxF3wSyVUlC8kwdgcZgoQdbOvnnS1hOnPpClkj91AcweHiUNg5eG7NR3abSzDh2bAHcEhyoZ+q8IZS42vMhzFMOvGNgeTLSkKjA62QFitByMXUbEf1wC3AUfNPmFXQ0wAIaCjMjia7jJjygWq3wOlMGYbS4UIcAC7ntxadJJwNA0EFrRS0im+MbPFd2AL+tfNF83JBAA/Twch00TMbuxheKz+6MTjrIQnSQiQcBCxg/j64dFBxojySHHnLVqhcIBNgiR/DcoMH0EB/so2rAwtBB6Ke0SL+WkHqbmBodWUry2Inc4srHfrOflwT1g/45srHZU9vzdQHl7lF9SWvrsT3ncbZbkn1orgzP74kJQcppVVQ7N/IRyF+8QGCUe/I9Iot8p0SveWSzlpi1E5yn0y4Zjz4UmsyVNepGC5KIrhC0gBC1VY8MRKnBGg0VO7VCiVrMyPOOXpZB/6yMVo+4/81O40CpoRYUcdSBhgHS26VRwWe5Zu0xg4sH4Yw7Gt20/93ROBARuEBGsdubbAPQKKqdqrY0sDv0L75KN5Q3ncJnehnLCbC4hVghxmeetSOG5PIkFG1F9lMeGCJq7tZ9KzYEwky3oi9FoKhbTAt9oANpqbmJg/laNUGqfJtXKV97DennvYZ/3mpwsJ+f2mzwX5sNpP+RTfT+c4v4Ftk8OHDSW+Xz4jok46m2giQapEuM5jshIehHQSCtuT92B+1u2PCGWL7obGqDIBFD9OHRWYQuyNs+aDN5JIylNnyBvgq64F+PttlveCsYEPbHTyRmfN461EU7HJLZtZeEBphcPih0oLC5+KAGL6m+9CDWIZ5wGokCa1F59F05SF45nlql/xoWL8gVA8XUWBbhXIcwKB437eMi5p0Q7Mpv7TTLZCNQ5lTLoNIEpVX7GNs/ZaDteJ5hWr+s7mgTJ8dLZ1UM9kIHglBJ5wf1DZhmaAH+BT4gsftVpqBipY/HhPvJofvrI6S38Mh4kBZ6tKkgoLtA39E8O75XkAy6n2yXCt4PEwEK4MVBEFOLZ0xhl7cuhGl/ZMTEKRBpLR4FcWjtv6KK31po+vFauvU6Yr4kEy9zLPVTOU1CG68MrVmUBoGhJ+wZtQ7c8M26Ix+StqVlZADpustN67u7CZzjOMinfsWNuZSrnYfSPp5mZZ0f+MXlwIQRQ3FdDdI+8eSqXYWYO64HxBuAFl6EEk04Hi136IQVCEIjmDWvzVhU3aREKp3oh3vnLdDQOscyhc4F0YJQksMEHbQrgSDU4pXO3JDzDoBXbdpHkAjRqB6mt1H+ZAm3TuChDZqASSYsfuE+2pu6RbzWMT7SglG7mhhs1EMiGIaRKLAvAttplxpqAdA/nV902UfPxCblR8+MbDtDm2JCuvtZeD1By/DI/q2yArMN3uoEiJwRjaHDWhdE5DtgV4T3GR6ISp2jvM4W7KQIJmMUD3hcwFYw3h1tlxxpGBwR7ZcR0rg/lGbJkPesDww3RBc7TcwnAKRvHSwhCA/uYCvsetOCMiBqQPm68upR6kTLcehbrjPVNYY9SEwm5CRALQPQA1C198pY/zuhIy3ZoRGF7xlsZUCkDxTf6ypz/mYKVutHSDTt2SbKRpEQ7QpUk5ZxBlmLcuYIKOQXXEsRNBg7XjNehENBu8QYiK4dIy3ry2+g8XQUillIpgvhXNKhsJPaJoWI2BWg5zveAWRJRSwbVY6iwwyCPdpnO6PKS8j4bxox44AqvKbjgyEQQp0uAZxMeweUPGofg1PfsmOnD/DB8mmg9AH2gtYJBgFAAiBTprJWtJYgUrfWtLIL+QGBVXuVkOXET03DzsBgqeI5ABFEl1oGVJ4f5w+ZHxk/KeacPUDG/AeCzy/MiPcISDQD7Q8WL0AdDhG9Xa2Hl2CEYGZm0iBhC45qw/QmNTt3inCOjruQAonEoMW5oRLDVD73H3Q8mypnpIUMqaYX0mwsFwKoUU0VFg4lom3m1NpbzwEsiRyWdm4ddtPKN3UCBmpRLzDaqa1WHdXb5qIOnaEDL2nQnjr03oY0q2nXSruu3g6MhA4sBz+iVTPEHF22xbyooQ2rpu1Q7TNLGvEWaGRafeE/Y/xJy1YI1/Y5Ag+UlJkkfvFeFH3LmMPYP7u2jMj+eT9XJyrJwNThiJi3eP5lhZKsOsUD/vhyFqQVh+vYXlndilXGivV2MgDt0xLy18/hTkgKop1fT2jlVynF03BHkQLEFMoOEEctrUpMYobr1LTvE0YWdZCuhL4kMnWOC+kgz639QaQ8lV0YBTZHihmc3tp8y1uHfQCqpT3jzoDlsRYwm5F2ipFIQt5EfgpbWukNp7P2UuMIakpcazoJCtYSS4aV6sk6flvGU4iYFcKMk6DzO0WJ1QUHAReS4rAGTSWwM+N/h8abtvi0t4uO8IJkpGrSes0JIAAWmDYLsdEa77B8pSyoTQeX6VjejdpVoFAKyFC1vYQb0zGkqMWQqi1ldTpUzw3xGzBeyB/NmLQAL3eEjEI8aJnqLtTGTIcIYA+rrKJOa9UXK53tONi6VdNb2yxlCWTFxYi3CLDphOPbh+06KK2351Ndvk1I/UMt/s/Vxqv74ThBl46K0tCwCMpfh+91bNEURhQiKCkhgJ2hvQAp5th1BIpR3uA+XLDVDDobAXldRKdfOeNiE4SQtQNGxwtZcZXtAWTPR41P/pGQXmTrIu2CjN1IUVSGdqJSxRYmrAbwNd7GrjZTtYlrr0R4XJL9sqzDipQAQU3FvTLRnik227S05JeOyFzp7/zxF0F7Ar9t1317LVag9ujwkjAis6Wts85C0YIeAsLuUbR5J4xWCWE1GVwUvkfWRZ2MmCYPqYOMYWPsXCWNp2txmdycodlrX4jA7By0WQyOXy3kY5AabAVrZnmGhGbWadKEFsBUI2t06JyuYHTqfhTM2AMGpZyYFPqGvsAc6zgemBIfRFmQg0E+xWiY+IR0O45Q0GyzIamwMtY3lE8BaYWTSoKNo/ZS4GTcoRYV3lINjiqCwjoyF7S9+I7DxuHLH2L5y+u3I6Hrx3rUeUCMX0MIdt4L2DAFROPRLhkioGNfbX46T+e+6PlwQfg7tCOUTOvVdsMi8K4hCXKROhNsF1ROLFRAolMKrOyh43MhFgoCLKuwCR5Q6y/TdxXo7sjx2uD+7mVSdSRr6rAhcNLJPExXsYvpLKoDKz+BHYEeMps60z+RkCrRqRZtAyKN8P1aT5kynPqnQRJGWvfa0ir4Eum5i7BEDOmQ/ng09SofF0Ztp3duFk3stNuFWUfBTK7pWYn2b7uIOZGkvg9apmmBTuvS2hQBR7rWbHSgFIm6VbDeCbJ0HNgTXEoKAACMGskFdSM8Pz09SrYoNKmEuiUoGwXBrJCRp+AFkDbDJR2nDKnUqj00pOTWupeyaPb1D9CaVuG1CITF1rkICul3anL/9xL686srEY93tBEG8CJ1wRaUMKY6bORn8qgUlE+H+QFiEBt9V7WUG+i/EbX1D5lRTw7/h7tBzL5/8YD6Qrx/bdi800qff4Wnfycz3j+j6OjtvwNb96ezXH//Ks+4u/tf+3At8uJwlmkAABAAaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczppcHRjRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICB4bWxuczpwbHVzPSJodHRwOi8vbnMudXNlcGx1cy5vcmcvbGRmL3htcC8xLjAvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUyRjFBQzkzNzUzNTExRTQ4QTkwRTdFRDUwRTU1MTZBIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmMzMGY2MGJkLTBlYTAtNDU4YS1iZjVkLTUzYzIzNTFhY2UwMCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjllMzlkYmZlLTA5ZGEtNDYyNi04ZmUzLTRjZGVkNzIzY2M3OSIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNTg4NDg0NDExOTg4ODc5IgogICBHSU1QOlZlcnNpb249IjIuMTAuOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPGlwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICA8aXB0Y0V4dDpMb2NhdGlvblNob3duPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgPGlwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICA8aXB0Y0V4dDpSZWdpc3RyeUlkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6UmVnaXN0cnlJZD4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Y2U5MDE2NGYtZGMzYS00ZDg2LWFiNDMtMzQ2ODk4NDExMmI1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iKzA1OjMwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICAgPHhtcE1NOkRlcml2ZWRGcm9tCiAgICBzdFJlZjpkb2N1bWVudElEPSI2OUJCODkzQzc1RTJBODMyMDU4MTA4OTg4OEU1MTAxRSIKICAgIHN0UmVmOmluc3RhbmNlSUQ9IjY5QkI4OTNDNzVFMkE4MzIwNTgxMDg5ODg4RTUxMDFFIi8+CiAgIDxwbHVzOkltYWdlU3VwcGxpZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFnZVN1cHBsaWVyPgogICA8cGx1czpJbWFnZUNyZWF0b3I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFnZUNyZWF0b3I+CiAgIDxwbHVzOkNvcHlyaWdodE93bmVyPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6Q29weXJpZ2h0T3duZXI+CiAgIDxwbHVzOkxpY2Vuc29yPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6TGljZW5zb3I+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz7mbkekAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5AUDBSgLVxBmYwAAIABJREFUeNrsvfmXXVeVJvjtvc+5970Xg0KDNdmSLNlYHsADYGNjwGbIJDspksoRqM7KzKrsytU51Frd/wH9Q/8BPayqytXV3ZVZQEKSCSRgwE4bG8/gUXi2ZcmapYiQFPN7956z9+4f7gvZSVnKlpElh7nf0g/SWlovXtx7vrPnb5O7o0WLFhca3D6CFi1aKrZo0aKlYosWLRVbtGjRUrFFi5aKLVq0aKnYokVLxRYtWrRUbNGipWKLFi1aKrZo0VKxRYsWLRVbtGip2KJFi5aKLVqsZIT2EbzdqE0LlpyqEBhEDtRmgYIpxwC4gjJgCs4o1KlcmlcKRoWLiCAwiGq3mtgIo2bsVLs7U2mGIHau7lMzMJvD1DxwNAUIzAavc7YQCzM4MYizmgh7jRiRsjJDhMzM3UUigGqgRUcAqCVhd2OmAGrPwplA7ejw2w2DMsgVJMg5kwQAQuzu6qbuJKF2nJjH5HGdnFw4WC1Wg6SqnTKuWzWyaU1n00W9taMYgwLsmkUIYDg7IeWqCOU5+6pm5nWQAmBVJXJm5IwQQlYszOf+gI4dXTx86GSVXEBj43Hzxas2bOp1OwjRmVhzZnKWaAYnA8wtBylythDae7+l4gVGNgNxAJA1BxaACIDNQzq1xWNzg1f2HXlp39Hjs4M6yyJ1GBKYxJXT/EhM2zZObN289qrLLh/pQVBZrZG6zgSBweTcRRnubpZFZEhMNyZOkMEg73r6pQcefPJnu/bse+3oUj8Ll8mSUF570eill66//vorPvqR9++8YnsZCJaJyAmmEJE2CGqp+A6iYs5ACAQQlGCmYI6J6qW6eG7P0q6Xpw6f7C8lM6EYo3Cq66QGEYnspv2AHAQf3fmeq3aOb1rFSBq4BJBQkxTnytaYGRERyCyxwOEOMcje/faNr3/3h99/ZPpYnTWKiAQbpEUuSrgwolWpiLpl66pf/fSHfue3fnXLFgAGqLkzBYDVwNz6py0V3wEuqho7A/CAbJ7NmbgcQJ98dt8Tzxw7NgsLXSrYvHbkaAQWp+AIaq5wZhKRsVRdf/XELTdcsiZGMoBQpwEVMULOkUlUd2FCQ8UqpRB7L7xw+H//y79/9OGfLcxRr1xfV6RQ4uzIJgJlzxJEOgXVaXrVKr/hhp1//Ae/fuNNVzCbQwmxriyWnHIqQmyPQpu2uZBwM2Y2NBkaIyJQuWS4bxc9+bOlmYVOObE6e846YO7ATCIRkRmSmjsxC0A5+3ym5/dNbdowNrZtHWcPATFGO3fGxglMgA3/WcTeocPpr/76zkcePLKwMFIWnSqn7LnT6ZiJGeVcxRglkllODubu7Fx+6MF9df8Op5EbP3SxAGYmwgTE0BrFfwatH3/+HjSDACeEBLz42snndz9T5fnuqFqe1v5kh1KPJSQa1LnOZkBgKhgFI3oOlnIZTi767v0zSwoKBCKACXru0kvmgDmYGaA64x/veeIf73x6aT4IjbgLSCVYnRZTtcDQXhk8V6lehOeUUpXM0atS99GfHvjq1+589dVpB5uZCOq6JrTOV0vFCx4DMMzNDESETGphdhE/e/7giQVXHjWMuY8U3TWg2K+WQpc4CBG5u5mpW1ZTsJEkcufukcn5E3OVM0Bw93MYghEoJQUAIjWdml645+4H+/2IMC3FovmiWSaSQspOZ8QdeSCRRgNGmLpBSg5MoTKec0zcdfdP7v3xwympSHBDEQs/d1dGS8UWbzlSDEJgTnB2isp4af/0gamBMRu7ogIl19rMRGLOJg5yJ3eiJo3iDgN5t6pS8Mkl1moxWIYjgy2Hc0dFL6LA1b1iLvfuPrl37zHjRcaY5RIemSKcslmy7AyIKZKzmtXuymDPIuhWeZG584PvvnDo8IxpU0mFqbQnoaXiBbeKDoAgZomEFyvsO3BUz96aOUUiocbCqmfNzGA5x4eBmeFshmNTUzNz88Sdoff6c2Hl6RFjTOZ79xx8+qnniKCeQdaetJaK7wAqUm6MnJMpMLugR6f7ic46nagIKWlgEYk+pKCD7JxZbzN3gN0JzjC4GoO7P8/Df46NSWtCTCnu23+MBObZocu1yhYtFS8kEhG5EzMbfGGQXUrjs37yErtU12vGur1ej4QlhKaX5Vx9S2FxNwBE7I7R0REKlM/+40NguBCK2ZmlaoAQBIC1WZuWiu8EuwjgVP3Wl3HWR5ytpGrrReNjvdCcbAaIz+EbZNWUUyIIOzZunti8aTUhg3z45/Uzw2c4Oe5OjJRSt9txd2pr+y0V3zEI7s4MM2NQr2BPfbazdizT0szaEWzfNN4Taojs7uf2DTJzEysy+WWXrv/ADZd7nn1zB/X0PzelBJiEfMmW9Z0uNTcRt3xsqfgOQASMyMlZgPGRsH5NGaw+20/pxnrn1rXb1nUEFZMDIAf8nL1BA1iEOXoy0zQ+wp/42A3bLhl7k7TNGY9NGTtq1bZtG3bs2AzDsHPd22JGS8ULDTcQkUOZo6bc69C2LRvl7Evem9avuvLyi1ePwXK/4QYz49z1LappygkAMQuBkG677bpf//TtZ/056kL24Vs/cO21O0FwM7TNlS0V3xFUZHVwzhGAiJRMV2zZuHWddKzmXDuxSW/gZaIoHMiNjJgkmykRh6ipDl5dfNHIr7xv4+bxUSUgrCJyQjYzP3eOX8FUhAiCizsXQGSkf/cnH/vC734uEsTQiR2tVURU1ZzYgyoxFwYyEDPnnIko0ODDN1/1G//yfd0Ocl0TBfcAtBnUfwbypS99qX0Kb3vSpomXGDkPWELsUizLqZNLOQ9cjYTJzTWTKwOeKxERKYGAVI9isPPizs1Xb9q6YXVZMhHcMhM11yjROZyQMiJqJgSIQEQiIiKXXT0RwtLhw/tPnpwlYiJIJCKFOQm5W051CCSsqkudkm68cfsf/tFvfPDGLYzMTAQmgXs+h1/13XlO2smMt90quroLMQhQG4DJUfbVH9/tu/fuf+3odOVAiGAnN5gGGYHTYDDgbJvWjl67Y901O8Y3rI4EDPtWCET0Njg1w0L88pEY/hAF5uZwz10/+/4djz7z3N6Ts4sxxqquO91Q15kphFDANddLmzZedMstH/rCf3/91e/dHCjBM1OpSiJkSIx2MqOl4oWlIpIpswgAQjZXgAhSkxw5Mbtn//F9R2emTyz1B+TG7p6DjxS8cVXn0o0Tl226aMNFI2XhZgNw1ywziLkhzDA5SW9PctJsWGNUnw/cdYTDR+affOrZhx7d9cJze06cXJib4xAC4Ez1lksuev8Hdt764Ws/8IFrxkYYyO6JnOERzCDLVkXutoehpeKFRTIjInEQEQjQlCWEvi5y6Bno5BKOn0zzSyknyo7eWDFS2JpxmehyQU4gBZL5KOspS2iqIOFzWVR8vfLZWMPmn0QER6rrUIjBs3HOPHUsHT8xmD4+k1Iqy2LN6rF1a0cmJkK3oyGoJZJAxOwKEBNBTVmMWqvYUvHCwpAYNOwoW/b5iAA3mIHcScBkRA53INROBYCUUWn2IpQEgaqLEARAM+RBRA44zuVwxuv0+6dmHYA5iJTIDDBjgihXKecgnUDigAAEc8tEBYCsBiAIA3A4kbc5wpaKFxiVa0FEMIAdUBADpO7UeICNwYQ7koEIBcEsqTghGNiyCzwKqyURadpZmeGAuRkQz3U65A2ENABmzARVEBuzqldEzmBgxN0xNKGAGzPgqholNBQ2t6biglTXsSzaw9BS8UKidkQC5coZzqwAgwjeOGwEM9Xm0BMRMZsHJsDVsxIXIIBg6iRDe2UGZhg8mwnTuZKZUlVmPuWd0nKnm6PKhsAlgc2MG+YneKiIxVSJQyM7QM7U3BGWWMibxgBjTRZj0RrFlopDZHUWvO7OOeAAAZQBJM0i0d1dESSYKgUyN4KZmYgQJOccQmgdrfP0vppapLuZMTktOwLw4lSM3Fhld5hBYCSAu5oREXNopLJWSg3ll8oqVmpOxExBVYmImTVnQmQhM5CAHGrOcGK2N3RONjP1ImLnNDZrcSY/GWaqzIGIkmY3CkGc3tgrYKfyWAAMnnMtjZYOoKbCTKCVIuD0S0TFulosyu6y90WAOYxAruLETMgGkAZ29wqWQBPEsKxmkCCNT2lu0paqzxMSGj0D4kbLAEPmpWH2q2k1omFrfKZo5kQk5GaZueGoAWVLxXcYrHll5mROYAqqvtAfeNWdnJ41A9iLUtauGRnpcQiAwryWwHACCRxJjQUtFc+TVXQlkmX9fwGQqjrGCLJGYkvdgOZ1mJslpdBkbBuT2pzvlePD/BJRUXNfAqlnEAHdkzPpiSdfevaZ3bt2vXzo4JEq5RDCxMTojh2bP/Sh6z7+iY+sXwWn5KgZwUzchYXMs1CrWHlebs5mRpKaBJLllACEWCq4SlgapCplAGUM3TKWEYEMgNUJYI4RaFYMYKVw8ZeIim61IxDzUh+PPX7wO//wwCMPvXj8xIA4g5kg2Y3Fc700sar3oRtv+IN/fdONH7pcKNVpsYgjbsLMqqnZ0NLibb86AcuIAlBOdR2KjoKPzyw9NVlOHT9xdOrEUlUTUa8s1q+dWLdm9bXrF9evmYgwTVUQBosZmFfMvfnLZBVxktE7flK//4PH/uarP3x1zwmRsUGtRQgkkrMlzb1eD6ZVf2lstHfte9f+yZ/+3odv2crIBDZj1yzBQS0VzxMVBQCyaTaKNcuByfzsK/ue3zNdpZRdJBZEpKkW5Chyyfruzh1br9y+ZqwAbMBmIUTCilna8UtERXMszOHLX7n7v/zV92ZOInbGllJfhEiTwmOMalDVKJEBTZkw+Oznbvn3//63t2zpaV0XRWFZOXgrqX6+QntlmFkiiHK5+1j10K69ew6eMCoMQcFKTEQBzq6wGl52Y3rv5Rs+eM0lG1YhAgyDE9HK8FDfjRkIr81RmxpqM4O5o26SNl/52re/8rU7TswpyljpQnSPKYKjcGFK5BQ4uLu6I4iX3fsefOL+B/Y6EAoxrzmQezt3d56QIA5nMjBPDfDky0dfOTDrNJa5MGZiBDKBOkyJVMp+1Jrjky/svu/pFyfnITCrp94gydNS8fwzkZrKLzXtKyAjcFa+554X/+HbDx05ukjcqVOOMYYiUDztq0q1zc8tPfnErpMzSwQys5Ye59dhA0BASBb2H5w6eHRKzbOf9i0UUqYaivK1gyeffvbg8dksxcQ5FBxpqXj2rxAMQKgZgSVzd4TJqcXvf2/X/v1VkDUxjLqTui1VS3UenPbVxlF4fPnlPXOzS41AC94wvtDi7UYkkDMoVKA9h6en5hap7Eo8bXTA6m5EYezkAp57bfrFA7OK0lfO/flutIrwJjogEncHmQFPP7Xnvh8/mTWCY9Ikkc0sFDGWndOmDTKAMHNyfmmpr+ohBGuam1ucpysVqqoW5gc4fHwhIZLEbHr695U4kHOQzvhsRc/sPTw9v5LuzXfnwaLl1S6NYVzq4/4Hn+nngQdXWyJO5J6TwaWqzqRExsxmZmbuBPBKSQC8axI3zOyMhX5e7KdQdLOZ6enZRdk5JasdyIJ90/Mv7TtG0lLxQprFRvSl2XlmDp85ubjr6T1GplYRm5syUVkUQiHIaSd3JBCRdzpFWZYhwCwTkWorInje3mPTj4ics6qLRDc6g+C/hCJ7Zhi0BlGWcvfBqcXcpm0uaNrG3BhDBW4CHZs6OX28r1mEu0HKnNTU3VBVVTOW8eZpmzRIebBp88Zer1yOEq3d/XDekHMNV3Owu8AtZVI7Q0JUEd1JiDsU4M5x7NjJND3bb6l4AWOMYbbTtZEww+z8vGkQGrUcLXEZupGjqwaGnH79S4hcFGHnzstWrVoFgAU555Yh5w0iAqJA6BZlt4xkKiJnkFTNFkCRMkoJWuugQr/CzHy9Un7fd2W1mgMT3NzdIQoNLLAcKJmbImbPRMYRViMpi0FRhyDZHAgiBEuOym00ln7zLdtGu+xZWSJzNtTsr58HIgERjAAkT4GFyOHmDuLgYG0bAt56wC8wcWB8FKtHw8wiL2odevC6Y2aNpIhZBimxGpnDogfNWNJkRVQEtzgYDN6Y9H4nR/vv1gwqNddqU10cGekV0dVSUYZm22GIbJYdFgKbcyg6CjWqk/brXHEMABMWPvXJW659305mYCh+IQA5FeACXDgV2ThlJPLMYClAYhA1cTSfAGlrH78AF0Fw17LgDWtXu9Yxljmx2YKgYh9AB4GslBA8ck2kNawumBgWyUsh6IA8rwgevmsdVDTaSDzkwfp1E1u3rXWylBJTEI6DfjLlsuiklFzqpWouu4XYC3E0hhE4mdm2S3qf/vSHNmwIbhlo1OaJEE2TaYIrkwXxGBCJA8jVs0OdiGW44MlOs/qlxf8PGAhkxFoAl25Z3+sQNMNjGbwoLIgRarfaUyJFwWUBJhgLwZxNPS/BU6coMRQQeqdnv9+VVBwe/yZiZPC6daO3fvi9QbKEbF6nlMqyLMuyThVgUigHjwWlVBO5uy4szq5aNfL5z99+0wcvZ0CtZhEnqBoASCNvNvR73Mmya7IgGskivS7x4IR2tvEXYqMZEznqiy8avXzLRUj9iFBVXtdQdxeWEIxhjTIQF44wUDUOREKaep3YGx1pe1Av7Bscboxp9hB2S9x2+/U7r9jqllxTlCInzjVMJYaRNBhhG001W7bAmuuZDRd1f/e3f/Vzn/3YqnHKuR8Cn7pZzZAQM2JGyM61kcE5kESG1rAKXpMnghI5EVrxjV/Eu3EoADYfiXjfezZtXlNStRDDOLir3s1e1CQubOLJa7WiBg8MkIKZCXn16rHeWG/FZDjelW+xidR9WOsngl15xYYv/qtPbLmkCDzb6SSyRZZqpMupniHqdzuh4BBAnpYu2977wz+8+U/+9IPr1o3AlYgIkrMBECFiLxUxu2QNngtWITXvZ1006YLLxg4SOZE7kLUNFn+B08ls7sIxuG3f1Lnhyk3rOplUxRBEBJKTZgcJjLKqkzDFAOe0ON+h+uKLRlb1znRC3lF4V6b3nIia5I07hNi8KrvxNz9zY72Q/+7vf7z71UmhSMYpI4ZR00EeDHLW1avGb7j+yt/8zVtvv31bb6QJ96npAWg0S92VAPJMzKBowCCjr14lVgMJjXSoJywOssTsIJC0ZvGtX6hAs7WOBdqlfM32NTrIjz53cGGQTMsy9kCBzAXNelZkMo7s/X6H0+WbV+/csmYE+ecO+Tu2i/hdOa+YgKieiQxeMMG9D8BonrH6yacP33Pvk08++fyre/f1qxrOvaJct7579TWX3HTztbfceP0lG9eRJ3h26hCRupmi8VE11yFwBQXKRcWBycXd+04cnFpcqplDZ/NY/9LN695zydp1Iwhokq6sBmnDxbfGRDWwE4llsJjavMvoYi0/fWnq+Zf2HD3e52KVUlRDEIJqlLhgsxxiUenFa+SjN15x5ZaxmE5SXP2mPHynxZArgIqNAm9KlVBgEXMjzo5EaBxIB4JmmCEUOKP2TB8IjrjUx9RU/+ix+YX5ZC5rx3Ri9ci69WNj48JNxd8IREanhPWHrTbLL29+wVY9+LPJXc/vXhhIRayWu+jmWMfcv3Lr5ltvunjLeE/6J1BOJLbYVhbPKY4a9h1efOGVI68dnl9IQCicSF3LLNBBL+Qdm1Zdt/Piyy4e7QUQElbIro4VQEV3z7mOUQBuZiPcnUhVhTgxqboSZFj0gzI6p6F0dnewMLEBqnBABEggbqTBvNlTzRCAjH+OimgEs5fq9NhLcz95bt/xuQUU4yaFeY4WXHLQunS9fHvnY9e/75IJduUsHtvUzTm+mytDnO/z4cm5vYcnj02dmF9aMDPrddevmdi6ad3WDes2TEgHgFWwTGFkRfxaK+DCJlCMMefMYsTB4I18kDBAxaC/2On24JyzSeAz/EZMAdxUOJRIg5h5BkziKJrGAFCzjtMdrv7fprTcyQlT/fj8a8enF5y7E4qYQU5MjmQ8Wo4en1moX5u9ZMPSxolxLBc5W5zTTEBm4tER7Ng+vnnL+KDOqmqeOVi30+mwBBBrypoiMUK5Un6vFUBF1VqkkFAoAHhKWlcapHSfH+2NFGWpORMaVWgzN5zGQU1qwtwMHJILyJgKuCpV5EzEPpz4ZiKnAHvD5sLhsgq4u792ePbY8T6kF2JIVXZqelmhztlQjq4ZZLx2cPa928ZXd+Erx0FaOeg1CXJy7wmN9gIQHKV5FQgEJQg4CkdkR14xj38FUJHDkgNVKp55YffjTzz5yst7T04vjo9ddOXObdffcM0Hb7is0bwE8sJCf2R0/HSfI2FYbzcDDESNoDuLNJX4oYeK15e3yCkPmZaXuWTDiZmFOisE9aAP9ViKkJJbJ8R60C/LTk3l5PTJpf7aNd0OubYKcefaQSViCLl4hg2lwd09xA4Ay27uzZiiMZhXTJPFinBQx5cW+e+//eS3vnXv7j37l/p1GVZpmrrrzv3r1z/+W7/1kS984fYNFxWDan50dNTttLXSUzrRRErh9W0Yqs1qbReh5T1KyJqFCf908lSd3K3OSUSMYaZRgru5GZQCA57UEoHrnFOqoILQOqjn2kuSJsnR1I2dmR3i7jAwg4TgTmyADVemr5C02Qr4lknrv/vWj//Df/zB1LQVI90MFbLaKg7h8NTCX//Xb5nO/cVf/E5RFGYD5ngGj+TnNgcq1OGBO2ik3s1pCBHm5RZS/rlPWBj0a0suwcnAlI2ISTiogpmdHcRKUEINFK13es5jxWxBmMCNuqKZMxN4uEEDZAQnkLm5mQMiK4OKK8B6735l4VvffOTEdNntbVtcYOfSyGLHE1WQMDMn3/7mYw//eD9bSd5zo3+Whw5W56Qwj0Qd9xpIzMZsgLm7+8+nW/5JljkIFYUxZ1AGJSejoIhG0UApW21em6sIQpnbDXDn3EsK2ak21I4MUQ7kjOQ2vDrdYQQjtiJQJ1Jnpfxe76CDop4NCYDl5vTXhpQdP3rgqd17T0Byf3BY2CM6MLbMhQZGDcHUjN15388GVJOcabT3VHs+AUIcJURiAYgLUAQCEIhk+L9oSFrzxow28SWSSakwM1eUiO4I7KKVywBcRS6MULoJQpEQUEurEHfuHbmCUTAVxKGJIAiIxAQmMJGQMHhZFnzl3ITvoG96KsAe6rWBzDAY2CuvvDoY1MwiIjEKYGZD19GN4NzvV6/t3Tc5OW0GanfLtFiZeGddGss+5Otfr9+vjhyehAucm6En8+zN2nfAnWIsmWVycnphYQlMaK1Qi5aKv/iXafrLTnGSmVNtmiWEwqxRxUwAmkl8eON/cBF7mokpEqSV8G7RUvEcBuYNFYlAjQCpOwEIITQlehExMxJ2INVZ1Zvkpzf9+S1atFT8Rb/Nsva2uzsa6UR53UgKNTto3YhImn5RW85uKtzM2j6zFi0Vz4k5pGVOnoobhYgaiqqqmQGcsxIJyIhdRMBD3W4iB1rJ4BYtFX8xNGbQzOB+apaMiJcFuc3MRCTGaGZuxAyzbKaqWmsCwMTtvqcWLRXPgUl0D8xwJHdmYjO4uwQ3JSJiBjzknGMBkKkhWE/YTPqQUeQAZJKIJvXjgAPmMG/+bpbd9VRayMxO/fPNr4ZmCw4pXN2d0DSSq/9TH5gctPwcjUqmxcwgCyqJrABlV1iG66mPHf4loVJUhtclN9zfSgJYtdFBN0cyr93V/a2MvqmbQX34yJq+zuYr+fLiEH89fHj9Z5i7Lj9Jg6eWVG8N78IqnKHvQxPbFCsZgLoG7i2HnX5K0FZVQyje3itGMgFDljkTDSPeKCUAM6gZEYksb6DD2e0CkFNaq76csxpuHzi7nrumrutw10ycmQiAWhLuLbcKunujB0uADepKRIJIk/r24UNtG/1aKp46+hSJhgY/O7SZq/DQWDMn0NBigjmchx1tZjVxGPZM0uvZKc19keHYlvtbF4ezRrsXr3+Ag931bFV1TFVECOQcTvkVwpLVWYZbK52c4AZ3R6cYaa4SXy4Fm8MNod0q0lJx+SRKzpmZREgAcxduzmpNoGa3lLk3M4ogebu9dKISzg5qsr/uzgxmFg4wBwzCzS7BUwmqs+WQAw5t7pdTzX1n+3KZcaqHqdlzzgKgoZaZqZkxMzETHATNdRM2MDXDKQZqbpmi5VVLxWHMGTgSAQ4GmOCWzbKEzhujOwBuID8Pz6BpRDURbhQhAQMUHs3hDgZIICLunnM6W4eZm14/4uXsMcHkLegHNJ4zYDwUxmIzMzibEDHTsDHRDe5shhCzm7llBxOxUKNp0qKl4ikj4QssJUCqrqohMhMxw+BN6pWIw/CsZjclvL2aC0RGZIA7avdGDUSIgvpiCAFgh7tLU7Z5C4GrDVXKh/23y0HbW8nhMcOhjtqg7gRq1oSogwBy8uXvzyJscOLAQBMrkpMb3MFtF3BLxQaZC3euK1+Yr2ZnF+bn52fn5xcW52OMve7IqlWr162ZGF/V7XWZuQan8DZT0d2J4FBVJZIgHXfkGh5H6uaME5jcbZgROVsaGS8BER6b1JA5ESuThrN0FBtJdRAMxCiNgjuqAao8mJ2dPX785PzcYr/fz9lEpCjKiTXrJybG161Z1e0gMDEnghEU6LW8aqkIAHteLZ57ds8Tjz+/++UDx6ZmFheqnLOZqVWRY683um7tqh2Xbbr+hsuuf/9l27avWj36NoeuJiQgcBDAeXEBe1+d3vPqoQOHlUU3bRy/6upLLt02UnQISATDWV4NOfcO7p9/6fl9B/adyNk2bBq94qqNW7auW7PqbK13Mxcm5LFKOD6lzz2z/8Xn9+167tjU1NTk5PRgULuhKdyKxLIXV68Z3bpl9dVXbb3++kt3Xrlp3dqOsHE7ofmupaIHkAIRYFBenqzPIppSUWB1IX3PB5nXHJmK9979o+/d+fjzz70y6LtwL9UUpGyiIHWgoBMzM8dnpnbvf/6u+763/dKNN9/ygc/+yxsv235prwA6z12EAAAgAElEQVQ74DUxmTtByNkJCmGCNCPFwz0Yp/maBKCCjaAZKvYIruHRvQ9wyolD7+DRxa9+9a4f3fuTI0cncxIx6ZRh08Wbf/VffPDzX/zI2tFuwNzpqGhQgpFHy2DxZIscejMz9N077vr+HT96+aVDORdE4lZt3Dj+kY/e9MXf+sIV1xSa50Lgqt8pu3AEhZIJca05x9BLtUtMTKRmwuooKuNX9ux78JEn77//6ReeObLUD65vZuW0Xlzg43MnX927+74H7l+/vrPzik23fvTaz/x3n1q91t1icBEhVxBznRGiMi5MJOlNhcadcap1hF/37IlAb8yZ2YUqtsuXvvSld1bShQzuICEyd15c9B/c+fCxY4tAcFIQAw5yclarithJ2UUwsXpsYmLiu/9wz1e+/N2DhxcXFnIMY0BpTsSspg5lFs2esgMi0ss1T07OvfD8/qcf2y/cXbd29fh4BJmrMUczMBGIDE2cZAA5UXa8tO/45FxyBIHZsGxiQNN85+ZCZB3g2ssn1owGQJjjoLKi6B46PPg//re/+f4djx45skjec/RyIs04Md1/5rnn5mfn3nvVdaO94nRVDR9qtcKcWIglnDhZf+2rP/y//5/79702SGl1tjVmq91Hp6fTy69MTU0e3rp9w4YNa91SjB1A3YmJQMk1EgpmMIM8EMQJjPLlV2a/883n//N/vP+733rmyAFVHU31aXO6DoaTSI+sM1gKRw7NP/v0oUce3q1aXrZja1Gy1iBh4ixidbJwgXanmyqT89DzN4eapZwrCWxQ80zkzACpITuML5B9WsEOKpMTuWrqux0+vPRXf/39Y0en2Vcnp7KcIAqDwYBYmEihImSuEI4hwkNWBFkdZHVK9bMvvnT0/zzw1NNXf/Hzv3bjBy4nBsxFztlqRAeKsljq4x++/dBddz21sCAsq1JiiaHJIpXl+Mzs1He+89Mrtl/7u799fVGc3uySO7SRF3Djx36y+xt/+6PpmQFJJEZOfThiIcJFbemuex5fv2V008W/M7EqAlBTpkBwx5LIKDzU9ZxEZi5TjiGEH9331De+fvejP9lbpR4J11ojWSzEVE5zaSZ1Z2dHIOcqxcXpen5x8sChv3nl1Zd+73c/fsV7LjGr4MYUi3DBKhwsRiCAmpZKZhEOwuYaWN5YjHXyCynev4L9ejdJKTFTCMEpTk0vVDlm6rBEB2dTMEkIYHGwgShk9YGiMqqyVpUOktfOPjq2fWpy5I7v7P1P/+HeRx89XNdQf3Nhjrf2mswrIhw8dPzOu36ctYxlCUEsyKBFT9TTwqDf7Y2dnEk/+P4DUydO+pn61hgwDg7g5Ax++MOfHjuaATGDagqRJCClWlUBVh7/x7sff/b5A0DpDmY2M3dim4CTey7iOHkPiIMB/u7rT/+v/8t377/vyPxCN2eucw4hxNCpKzlDvpWZidxRJV9yTihy35YmJ4tvfuPFv/xPD77w0nHi0q1ZwHzhGuKGbclMxEwCFzc2Dcudeqq5NssMYnq9P7G1imfz1aVrhqJkwJLllKwsS7WktgRwkCIW7M3gFDGcUs6E0ER8sWQ3c0/MNDtnnU7pXt3/8MPJjv3xH/+L2z5yvXnF56hULSxJ88u79x44MKU2XqVEbBKKuk7CEBFNrmoxjr/wwr49e/dt3jBxmougmRxjwEDh6LGZXbt2F3ENzECesroSAEGMHODIRFNT0y++ePCWm7dz02NkREwgZO2LeHYId46fXPqH7/z0//2/vjc/L8mJpXQiFgeyucdC3N78vtZUACBhkaCeWSBcZEvMujDAnXc+NqiP/w9/8mvXvW8becVkF0obmKiEuTYrGPj1FohU14ECMYsUTSyOZml7S8W3YNLNsmqSwCICwKFEWhZsBiYzM80mHAJHVRUaC4HNLGttOTsMsBC41xtTXwpCmtY+eP8xT492i43Xv39jyf7fuppv8SE7Duw/lnI5qKTbK837KWlZdN1qVy5iL+VZ5lD1MTtTu5/GT6IMj0RilpkxPTWzuFDVSozaCcJGtCwe6dmzGZemcnDfZFNRMVcJJdxBJBiFQxjHZ/JXv/LIX//VXbPzCq6JSxA7nDloMlXvlSMJ/dM4ftmdcs7uPux+MzJlEmI2p5F7796r9T1/+qefueG6iwdL6FygGocpOJCAADXUNux+4FB0smZPXkSYmVlmMmIndFsqnh0Gg6XeSBeQukqWEGMJM4BSbRgugyIRIYK7mmXikLO5ZQJEIjNg5uZZawo6qAeBRkOx9qlde7/+99/atvPzG0YnmjL3L3wWEAKWlpaEY5BOqiuDBpK6HnQCOyLMSDJDgHh8emZI+zchZJNGJiIyYHHQd7JaF4uiUM3OzkEc5uqeE3MIYp5tcWHgCmc1M5ZmqKLiUKixGX74g8e/8pU7T87VZa8cDOoQ2Lyq60rcYygEhWc6XRBjXgEAMTMFDssmm1zJXc367PGhR569aEN52eW/PzYKXKAMatO+59CsKtJhSJUwP5cPHj2wsLAUQli/ds2aNaPj4wWhn2ypoJaKZ4lON1ZV393LYtQTk0nOdSxik2BUTURO7DklwMoY1bNaZmERsZRTUuHILM3GuFhKTilwp6rpvntevvKKF//dH918jtI2NcAseXFpPoTxbFqWMQ1yWYjmQeBSLUms88C6sQgsp/8cpSZxyZIcZpZSJSE4RQURIasOg38mkQCrAqOMRa60HGHmUmuwMEswr5i7996952++/MDcHBedkYXFQacoVZk5lEUEJXcFahI/rTPgZRN/NptgLYMIgUNti2U5MuhXEklz987vPbd9y/3/+t/c3rlAZ808MzGcg0Q3HDho99/75IP3P7H74Oz8/CKZj42VO3Zs/PjHb/jIx67buLF7oc7zSqAiZbiAjMjdgyMRGVB60lLGU509E4dU6xIi1S4QEhGDupqpSygkdAZZg9SukbyjVd3t0lI/GbF5z32mkF4eGAEUlzL1FxN9+W/vumLnxR++dVsBgymMIaSoyM864CESc3EbC7Gr3negUfrPyoSOUW0cPHeJQ7KUQcvTRm9y+QAANUNeYBJwAYpm9bC59ZQFJzIzA5lbnVUCuTExpEhq0eocivD8K8e+8jf3vfraSRfTXEXueRKRPrxP3gEKluxilWZQSawM1zSIgdm5qqrR0fGBWV2nEApmpFyTAETZjLirZhLYEmIsFqvFr//dP1521Xs+/pFLNNdBCs2QmLIhcHSriN/ebie24DpAZDN56ukjf/mf//4njz3XrxP5GndnopMLM4eOvPbYkw89+Mh7/+jffvH66zYxagCEAgbinDUH6bRUPMN39zovFd1OzrWaxSh1UhEkrZusPRN6ZaGWFvvHYhlMo4iozQeR/sCSYmyEBoPjTLGZVCIiJmIOg8Hg2NHjd9zxo6uv/sL6NWXWFGJHMxDecatqz3wJNKIHaMZTXJ2UOXKM80v529+858mnn61rcEHMQc04BAOFUOYqC8e6yiFSFMChtrh2PW/fPrFu7Win05ubrV7dvX/6uJnVRRypMyRII7ZQlEWdzEyZGZGbcP3Qkak7vnfXtVf//ro1Aa5Er0fhdB62ywjISwfd/8DLf/mX337muf39xMLjdU7MAUSeC5JiYXHpoQf3TE9//c/+x1+59aPXwGu1HJdF/t3xdr/5FUxFIoWoolJkETGnlFKMRZdHFxfne0UI7Kx5fHRsYmRVSrqUZquqH+KIW3DmkdG4uDATC85ZT/VzEYWmOycnfeDHz/7G5w5ddPPlxM2IOpOzal4xxR5v9PLgbjTsDlACQLL7lSMP3v/8/Nyg7K1OqXIjd8/eB1AnE5FsNceCWZPOXbx27a/82qc+ettVV165bmxVECJTHDm09ODDz97zo4eeeGp3XVNRTKjmoohLi/0Qo3lmcWZxy2W3m3P908deePaZw7fddilowNIxE6JGTuFtv9ycBk7y0ivTf/uNe5/atS8rxaKbMsXgTOxOyUEoA3dn5/q7dk195av3rN+46T3vWcOc3Z2ImYrzcAOvYCqaCxGyJVAwC0zULUdSXZUhr56w99+w4aYPvWf7pRsuumitW5icPPHsC7t/tmvvrmcODioxhyFIsJwhEgnMzKqeszGDKIB4bp7u/dFT77vm0omxoFqJBIO455VzVZGZqaq7MzOgZiaMxUH6x7ueOHqkCmFUNamDjGIUZzMVd+fAqV/1yljXc1ddc/Gf/NtbP3bbh8dHo6EiLOWcO2XcsUN2bL/pgx/c8rVv3H3HDx6bmZnr9kbruh8LEDGU3E09a84sJXE5Obl0z9273nfdhjUTCjI4D9fkvf1zVY5Y1fK97zz+wP17gQ0Ss5kJRfcZdRWREN1QJY8IUYkfefjVHZc/9Od//tmRDptmIlledE0tFU/ziC2YWyg6blxXXhZFEbJpvW3rht/7vV//5Ceu3XxxETinVEnoMu349Kc/eOiIfvOb9333ew/v2Xss1YG9F7mjfhJwETBLSure9LqJWfjxjx//7Gc+ev11a9UGwmDisHJG8kSksYKvd645A3jx5UN33/2TxUU2FrNKJJBzo2SpqkXs5DyQgKQLO3du+Is//+Inb7s4iKSUyAuJZcGAuUHJ7eqdm/74jz5fxDVf+/rdVe1pQJ1Oxz0zs7kSmRMldUBc5aGHn/nN37lhzcQGN3N3AZ2H8w3AkV/dc/ie+x6sUsoO4VqtitKDBbVMBA5kZuYDhZsScvmje5687fbrb3r/FuKM8yU3v4K7bcibAXzK2crYyXXd7x+/9r1b/qf/+ZNf+Fcf3Lql0HpACEUcYbAmwKpN69Of/dkn//zPP33ZjnHPiyH6IM24e845paSamvn6BrXpoSOzzz570D3GWOa80q6q4UG3YZ7TEaRUxaOPvLD/0DRLASYREaEm75JrJYd5VjUhHRuxP/iDX//Uxy8PUuacA0uIBHd3cwJzIKnrPL91S/Fv/uhTH731ctjx0XFOttjo3JgB4KIomJk5hKJ75NjJF17cD5QEYVr+INjb/xzKBx946eD+RGGUgxBHoQ7UmTpCPXj0LG4sFDpFGaOAi4OHTjz60HOawcQEU337I8UVTUV2CCGngWqKBRMGl2we+fwXPnH77Td3IzRbGTtwpFSBksQkKCPHguxTt9/0+1/4jbHRmFLV6fSCxBAChjqruSlCqiYK5hZ+tuu1hUUQ2Dw3sc1KeT6qSuRvUGeLQJg5OXjsiVfdo4upap1TSrV5ElCkTlEEchNiEbrllms+9ckbmBLAIRRgzzYwSpDGkU+qZRG7ZtWGdeXnPvuJizeu9ezwgpmJiMCNb6yek9YGd+Dpp19eWhz6zssm622nYn8h/ezpV+BFnebB83W14O7CnnKF5XjVFZZNk2qtyauU+OmnX5mbH0ZCyyunWyqezipCGUrkReRqsNDr0Yc/cv2v/dpNRQBcQzCSrDoQESDmHC0pIJ5yr2Of+9zNH7vtSqdFp5xzJmpmHYZ/QE6MED2Z737lwPxcMgOHpmFqBT0xo2UuNi9aM6YmT7y256g7meVQCDNLIPcUArvCcmIhVe92ys985uOrVhGhaq4ndwrSYSrMhTiCAwtlTcI1oX/rLVddffWlKS/GglSTu4sIkzhhKH9DpPAXX9pzcqZStUaTjvl8UPHE8cXD+2ZyXYjEEEIRR8S6bKWEmngASkQaGzkQokBMEUZ88MDU1NSJnI2YmFlNf4mo6NCmA5Ca9RfeCJ/y8rwiu1Mzr+hO7ilzrejBuoalSJ2JMfnN3/joSGmMRmQlAEFChzkQEAOoTAYghhDqiS4+9ysfXb+q1IQmKG9qdXByQ7OpDwMhlAePTb3y2gGwB3a36i1vsH2DyDKdn4oIW2YaAcVMKkxq8wj2+FMnJ48vkUTzynI/gMmEUCSFB1NnUwqsGzZObN12WZ25nzrZNGnOlupc1blSTZory3U1AKS7lMsBF+jiqmsvdV9gHzRyVUP32JyGLTjGzIcOzb22f5YiwUuCkp+PxV8nlqanFwY1VSSo+4NIAxYdwODRLTRjpgZ4o3pCTKYhYGGue2JmWgKbCWDh7W8VWsFpGxFJlXIgFrGkV139nu07Lj7DCDlBQDA3mErAziu3X3b51mOPHzkTeRyDwWBycjKlzWUsmClXK8eB56GLSERwZ+Z+rfv2HXx97OOftvW5a9MkCAmTU3Nf/q/f7XWVqbK87U0/v5Bca2IxMOUcXnxxuqAdVncQpk/jMHu/Xx+fPml6UTODrebnwRYMFuu6rolECCQdb6TrJJxuCsOMstkgDRYH/WWJV7TFjDPaGXMzIyc3I0/vu+7yNWsLaHXaKfjGU6NG8N83X9J7z85LHnn8tTMJWDillCcnpxv3gVbUchxib4bTAZiBQ1FXun/fYTdyb2rr9Ib/PBTU0GxgmplN3/nuIzlVReBMD58mbYaq7nc6BRHVSUPoUCFaGZ1mokW4IAxmZxdECMpgNzsf6hudciSyMKlmMBWOZAT3fLqfHKQXuAqBCWJD6a0aLm2J/0woimhQgnR75fYdmxkg4dP74mIE+v/Ye7Ngu67rWmzMOdfae59zz+0AXPQgAYJ9T4rqKJGyLMmSG1mSbdmWuxc7tuNKVapS+ci3/5Kv/OQzqfglzkv3kue852c7Lj8/SbZ6WexEkQBIsEEPXNz+nnP23mvNOfOxzwUpmxc2+QCC5OOqU6zCLeLg3LPXXGvOMcccg5hjdEsSipsP7y1Kzu3Vsnd3Wl8bBinMzAnvLlNjZuoUwzvJ45yxvlFvkRkmIsjuDvJOsEDdnJyAoqyaxgjT5kVrK9ts2VKKQVa4e0opK4oA4m0zzrbNVcHLS6tmE7O+EATXHxHpVVVZsOrIPBYsRmBm9W1r1NwYl5mh/anKJjpg/DYcwu9i2EY1dTcjQaoyLCxMq9dXne8VONR0In5Btmfv/FX8GLWbFXLa2BiawQzvLmccd2fuNJlVBHAaj5rRsO4sK9H993UbQLh0pxBCttTmOmudrR3Ww4jwhq+6SebSZlGLsZgWrgxBYnn1ank4HHbScm5GXb1wndfc9GBh91yQVBaBKeasZtnJtj+/gul4ahD2LMxvJfP+NrgivZsRVHZL7Zb3MKoqMllO2yJdNnGk4olHI3RmdhDCVejdk6nH9Y3huGkJzMQ5v3sMxp271NTdQTDLo9FoY2OTiLbi8MdLJIOZMUsMAUCIVBQoKjOlN3yFyEQu7ICrZnc39abZdlo/BAY0FuITRG7rs13ntWPH1B13HuDQmLUT6szEhuCNVynM1B65ZWHnrpnIExGTtyOFefeGYpTAzJ2qr4g4EoHkapMTzAxhES4JkUBwFr76UIx1SsFvT1VzrSNRXnO92moquBu2a41SGwKrKlwsw7JbaqHZWd7wRV67jphr5hHRUEIrwV7z0vkHK+WaBXv3LrgroF00Cl93ZFKCPvzQHbOzRZvGKTUhCDNke0eR1I6r0j/0wft7VXR4V0S/DU//XRyKObcdBtM2CUBd1+ZKga9SOKmqw9XQ2TAOh+NU56skeO4eQuj3+yFMCMFdd/FdEosTZhmxmxkxlb2iqioiesPnnqwNUXI2NxEqIhVCkZyN0xu+xPrskT26CxBMJSdhmtr2tinj/PzM0VuPFEXovn/N7tefVybiH/rwg3fceWRqqtflye5q23OJY0G798x99CMPFwLXzghQ34amy7svFGlrgSUpqeeq6m8Ol9bXGrcAR+dl6K8LJzMzQ0POYgQTBwdJsIuLl9TqbWtFEUMOhJlp6pVsaDscdtsP5mCDEYLBCXLFmtzZkYMQQcxqYjfdMlcOkik5xJupHveYGicDMlE2pGRjRzZv3VpYAlQzCAaQ2zhbdk62PY5EFIXboCzaI2SHc+hVMwxygA3uoXVuwOTGUESO7bgQzIVCGlvOXLsEh0iywkiSS/LSJWSnti1ciYggqipg4UAUQdEhTnCCTYh3QsIGz6ZR0xd+7vF779uZMHIxMyF29rdB8KbZuxs/99lPDgbOvbFJbNtCfEa4NR0Tw4nBQsJtbomNef3nf+6zt95akYNVYESo3oZQfFfTwUmkM3LQepxeOPHqpz95t6dWuwYiy5aFeCcjbAHBwewAwyw3Lb368mXdFtOGQIhCzrnf73cup4a3RF8mApBS6pyYmNkU1oEWBiIiJqWsSt0AAEwUBFiUHoCcU4ziZim3ZShMwRIChzL23HEViTJVJVHDazaxVVVNDyYmk0RCrlkzkxWxJCdQztYasrajokC/rMnryKLqIRRbrJ22k4EREeYGZMkyMMneu5pKjInITbpmplMeTFf79u3+yZ989DOf/shgit1EOBpYREHpestPaWYO+NmfffiFl179X/74z+txPTMzOxwvWapiLAmS0jgGkcCEzOBPf/rDP/W5j/WnKKcmxLKbxeHrn6G+m0PRCWTuBkSW8vixM01LvSKU6NgzV8ZSzaAppRgCTEAOTkwyHuKVk5e1BRXbwTweAhFsYWHhtSYv2Vv5oEzuDrIrXktETkJqxkxwYyaDMpAy3DgEwMUdcMQQARCj5MJ0gkO2rY/GGc7MjG04WSGwMLF0f4UdWgTsnB+wmzoLBSAAuUNrNNXgJhSV5ZhzuOXI7b/1G5+fnS7I3cgI0pG8twQXyd1TyyLSUesAYyjI3L1RE5EQgnoOgacH/enpwcxMtWvXaGaqD8A8dGNbquas4Tq7o0oIm8PVqam53/vtL0GL/+N/+8vcqqBX9ilndede2XfXZjScnx3c/8C9X/n1Tx29ZWBotqLPADbPcp0bWe/mviILkZOZqgrRsedOP/XkSx/58C1wuE7AQBAAJuEixtS2RVFoTsSNe+/Jp156/rlXwLQtmObORINB//BNB3L2ItJbPTKc0AlekaNzHWcRMerwE3Z3kBK7gVeWN4mhOUsgN1PjGKRNSqxRWHOOpXedh431oTtZ1u3Oa7MMZLNk5F2S3Ktw9Og+4PtQOEVTF46d/5QRxCtTgLQI0rbrDz1y4PajU0IwuqLLyldsqtzAnF/PfGBMtLfJY86QCHek3BaxIEDVhfttY0XBItK2bVEEksBvhyIj9XuDnHTnnPzB7/3Erl3tv/rXXzt1anXcVEEqIWmbGhgduqn89Gfu+MIXP3HPnfvVavK2kL6rkYSOHoL3W/xXuWyIVERyMgDnzq391V/94L4HbhlURmGyMwCoOkEAxAIA1HNEWNlo/+brPzh/YbkazKc2b4PQiuto396Dhw8fpK2eor2lBpO5hRA6c/srke/uBO78HEDqTK5y8qVz47atSlZvRIRF3BGjOJCzhiJmW89KkMHp02dzti7p3T5HbUJkd4UT3IPg9tsPzgzi+joRcaPg2CWTGkIg77dpM8ZA4OXl5ePHnr3t1gdBY7IeTaBOA0HVmQMx+cRSlmkyBuwgN3UJ60ZO3ssWOBQA1BoRrmstu2fgKIpCVVnY4debw9SNa8XAcN+5Y+q3f/NLH/3QZ77+jSefeOrE6tJGPU5zc7P33Xf0I4/ecc89e3btigw4NEp0p4n/q5nwdT8y3tWhOLlViBCE2kTf+MZzj3z4+OOPHZ6qYrbGrS1CwUKAujHIU6pj0d+s87/76x987W+edinqdijbEN+EtE3jwzfv37lzSiRfwYzeAs5kZr1e78ofHejGQUChc7cHmRmp8gsvnH32uTMf/OAtptlyikFyVomBsGVITBLj4OSri08++bzmrlm3TWJGpKDBoE9Ehm6sxI4e2bN778zmxhK4T0bu5p5zzjGIMIMicdE2WYf8l3/+1MMP3nfzoTlmdGoAxM7USc5S94vEGIEM5KQNgBiiBIx84MQnX07f//7xzY3h7oXpg4dm77pr72wvA405w5g5iohZzt4Wcn0FUjWHWCCltRDYEbLbPfcPbr/7I+sbDw6HY6YwNTVVVrEqORDUFCQycaokpq6qp4lF7fuhuA1ITSAx7ciBCoonT6788//5T/cufOWOuw5UZc+JtoTQiJgdHAuuG3zzGy/8yf/97VOnh4OZ2brd3P40rfs9uv+BO4pyAjQTJn3zNx2LoNnZ2Rhjm7dGFhzuRCxmRCQOGJw5nL+4/Fd//eyRW27ZtbNyrbvjXFVJnBltgsTBygr+8s+ffOmlVUMx8T56w2ZPMikxPTsgYQJIxJEP7Ntx++0HXzh+1nXMEhwmIt1ua3XsUPNWCofTd7/39L/50/1f/uVPLMzOhMBOnHNDgYgwEfyHOxkzHGApQEV2bKzr88ef/+t//+1vfevYmbNrOVvgdPNNc5/6yUd/5cuf27t/likbd9OLRCTF9b9tWNRcY+ybO1PRL1E3WpZx93y02SlHAhswFjDATEbouSG5xlACcE9M3VfE74fitgihBDYFC8xykD4hPPPUyf/mv/3nv/7rX/rYx+7eMVeBLKckFJhJHRvD5q/+6tv/4l989UfPrfd6C03TuMh2W9k9zc9P33XnrQQ4zB0g6FsiagnTzMxMWZZJa1ULRCLBjDqVXmbODgJiqJpm9U/+1d8uLCx86QuP7N5VpaaNk1yu44tiPMJf/7un/+X/9e831tkpUMxusg1sE4qynJkZCLNrJ01fF2Xx8Afu/frXntnccIepalfEqpnauKpmmpQACKaGm/0/+h+/trmGX/nlD+3du6s/JRILhzkcnT6ek5maESimhOVlPPHEi9/77tN/+80Tp86dh5SGXaoamZ47nl5++QfrS/G/+C9/cWaOhRNIU8MxMjxc74Yay5hQZRUiMkogrUoBHFmZO1UkwcTY3JmhGVJExgSBF+asTZDrro96HUNxu04MbV/7GSk5EbrHY+5CnM1bob6iYYZ7VBuFEMyZGW6QoAAcIfkIDPjgmR8dO//f/fdf/fqdH/novXfcdtPCjhnLury8+vRLy9/9zlPf/87zq8tJZODYZCC4wAKRdvr0ZgwnBAcltuqxj97/4P2Vac1SdfCmxG03TtdPY0NmkEOvUIgJjeott7GDQLUAACAASURBVO6ZG/SGqxxk7Lah1ndO8JoJbkkQAGQdCk3X45U/+p/++NSpYz//85+87ei+AVkRilTrMKfTZy7+23/z9T//i28tLjYc+2YBXmaMI1VigR0OzZ5B0SBjbM6U4ejheTEwKywUcQbQxz724F/82+/+3fcvgAI4ZVOhwlKOYUqTBnSNxwYRmy390b/4+hNP/e1jn/jQ44994ODBnVWPI0vgGEJoU9aM0bg5fe7c9//u2De+8cSxY6dW18euOwQFO2XTQO4wY81Mf/qXX3/4Q0c/+9n7hEqQhBLqJtdffJEwABAm51V8rXcSAl4n/EMywZ+k6PrtvFWLxCBvh9vHO+hWZGLAqENb6LWCsKubDdaxt7awk20foeXbzp4dXV48+42/uVAV0qsKhrRte2l9sW3NtYhxyhBSatw1RDGkIEHVzSbgSk5tiDI7Hz/xiQ8PBqVT7o4WIld70xI37hpZBtN86+17Lyy+kJ2EY07tdnBF1psXL27+v39y7FvfPHPTwd2HDh6YHvSbOr3yysXz5y+ePXe5Sf2i3Nlq1lwTZ6GoqsycLAEqkbO3RFwgLuzuHzy0QAQ4d1+YK+3d2/upz37wmWf+93EuA0vSTOwuRlemY51ePzDx1FN84vjT//L/PLZv79xNh/bt2rWzV/ZE4qi+vHR5+cy58+fOXV5aGY5G5tQPsoO5TSl113LOWc2IJLU+Mv/q17/1qc/cXxC3SWN81wh2vT3reobipMNOrwdarrS8/5G/1xVU9Jp1RCdL1LllmtlVzlKXRMytehoqjUxIicSNGDsjwzuogqwjr4KcJZOwG0IRyMks9/qFa3P/A0cefuT2Dqjv+orC9BamuYmIQXOzfPf9e7/2t98zn07ZKJjYGzc0lUdhQG3Or5y9ePrCpfDk82ZmZgV6BjAFYh41NbOVFZsloB8LstySeIyxyU3SHApBig8/dMf+/XPYwhzMMpOUgsc/ft+f/dnXn3zqMnGPPQEmQVzfOPfmioc6Xr+0cn7p4jPHjptnqInEbDQR7AAzh1CV5qymDIQQkiraloiKEElCzjklvPzqhbrxKNbZDQnh6gjwf1TrOn4L5CBHV1zA0WkrXGU8zeFvAEGQTXYzM15n6nKV52e+JjIOhUowDsjI4zSsdTPryLw2r5OPzBtiI+4u2DJnk+CqqsZm3Iw35ufLL/3C4zvmYdoAUDUAWfNbaGZoznAqAh599L5DN+2AUyym6WohXbsld2cqiKs2c7YQy+mWNxJtKo+Mx6AEciJxl9TWqilZdqakyMoh9swwO4ifeOzhskju2tH1zDOYzDb3Hwhf/OKH5mc9jYfCBkopj35sM7yOMj4ej+FSVtMhDswq075R37xUq0BTEmaIS81IKWtu3XKTlEPoStAQQs7WjGvLDi7L3rSZJ3utF+o30NDwP55QBNPk1Q2pXvnjPxF03LpIO1WISYt8e0OJ1/qBxGJsjbZ18mRsEKIiBGZ3NudMpEA2yxOtXq9y8hBCSilIGTn2CvriFx77+GP3AdoFvgh3h8tbmCGVEIhIc7rnrps/+ROPMNQzXYVwx7mgVAav2HtIRUFT7NVoow2yQDab2h4wXcZZoanUsOVYltGRq6pw0GhsjClBiYxPPH7/A/ff6t5OdM1ee+RTZex/6pM/8fjHP9wrK9IQaVpoZms/8I/VvkC/LASujaZx0uSMIIimRIDmnOrGEzFiRCgoFiQi0iWoMUZ37yzoiiKYN/v37qqqUMXYHWgdaPR+EL7jasUrtVNXD3at745ppaohdJz6rdbc9vxc9oqIAhu7R4kOZQWDk0U3JRJhSGB3V01mFqiAFDlbURRtuxmofuzj9/zqL3+mV8A1E5Gqk5BbDiGEt6SG2h0lEvBLv/jZE89f/ua3jk8PBnX9xkx05paIWKQjEhFRjEzcNjWKomCjnBtn7sTaiDjnOmtLgpy5Vw3grs3K3Xcf+JVf/uTOeWGKnfuhw1miuxOrw3bvLn7tNz6xuHTpO99+rmmkV021mV53QNtrAWkwNeYQZOLcRiCCBxmZGYSZHICpmjmRh3JqPG6LUKq6ai7KKPA2bczO8McefaCqwDA18q3n+G5yIXlXI6ivn4KhSaP5H9m13bNxNyKEEAaDAdHQTInJzGnivrvtI8xeENzcAG8z3LljXYtw92HMPNcZMBYKoWAbg6UZt2VVSBzec+fCL/zixw/sL62zXyKBkwOqKXBI6U0nVKrKHITQptFtR6e/8PkPvvTiC+cuXpC4jbtwLFJK1jYiQgJ1gjo8xFib1QBiEQjSCQsQUYw9CV3RCCZr69W9e/2zP3XPww/thVunhO9scDCJu5EHcwfb/Q/s+/KXHxuNRs/+8HTbjLFNq10C1JIjgwTw7IBDVQMxEAiszl3FKIFEJGtmZg6SWyUSdmvSZlHK5z7zocc+dk9AcjORUtVZgqm+fy9e91BU+N+zle9yy7B9MJobOb8+xmIMs7OzIpd1a8DM/wEa9PffREaAgUFbE01CQhDTUaclQeCJv5JZalMZx65lEQdAfettC7/5zz736U/dT8iMAFUQRKDwEEO3m98CbEPkOTVBQEif++kPXF5e/V//+M8uvLEwGprEzCVzdICYXeFOIkKaARC5Z89u3Ri0maUWxG6EGEPTbMzPyRd+/iO/9pVPxphyMkYBKGBOMkkooMLkaFqMP/czD41rc/va8RMnf3xy87WLsc3uVBDDCNmUWUQikZu3RARighDBoRmachaGCHeWODGGNm0UpXz00Ue+8pWf3bmjBDaJ2NWYGJ2bwPur26V/+Id/+B/8Jo06tx0bwVtoTUxqQqTLa2tnF1deOnvppXOLl1bWNutGYkEcAsPTiBBBcDK1Fs5MxCRbkj5EFAioSiwuDb/zre+kNADNKBoJ2TQVEpQK1ZZ0XIneeesRUNisk4WSc2QXggcRIoNbIMCUvW9OTi6R1HPOmcBEAdwDudn6fXfu/8/+0y9/7jMPhpDhI6LoHLwby4MDnIla9eOnli6tJ0cQmHWlZOczRQS4uRBZBdx/69yOQQCEmQADG3M0RRnlrttvqWJ7/IXV4cYGszg4Z5UYnU1dAysTmEGdbzcyODlqkuTUOiWIAgp0ox7gQpuUqtiztp4d5N/8rZ/+7d/+4uxMwSwsoZvCYmIG0eRcMHMlkoC+Kd16ZP+hQ3sXL7x69vzQTcFoUxPL6IwmtUVVhKRE7mwdYZZA7maqREmEuwHKTrFXWJgk5VyUBcEC2HOaqsJnP/Ox//wPfv2+e/pMAApQpE5d6BqnYZMmWJf7EDmg8KwkV2hrNjHzAd4GJtvbH4rmCkhkgsEtcSgaxIvr7bdfjN/+0cp3j609ezq9eIGOn80nzuQT55TyZn9qMFUV3VYDeZtSEYvt3r/s84njr168NFTzEM3RmAboVJMvz8/N5Xrz3vsO/Ff/9Vf2H4rPP//MeNiSB2Z2hyoRSnhMmZlLFufA7t6mzAhlWTEFqBEaYO2jHz36+3/w+U9+8s4YzXLLXGBLnrDrqgAwUFK82VA0c2buxA6ZJatXFd12223TO9P65rnly4tukb3nVpiBXITJAFW4MZEEKYgELppLQgUvLUdCyVQSIlxSqqtC4Ou33Tb/u7/3+V/4hUd37nTQJlO1/UXNbp1cvhUFH9w/f9e9947a1dWV8+PRuAhTmmNKKkIOLagyIzeYEcCMCKfIRSehDgQy6eam2NU1hRg9w3MSGd5x19Rv/c4nfu23HrvlyNT1blmYNWbJSbspLsDdusALoE4XYwI9AKRJWfg9F4qdiYwTWeYQhybPvbrydyfOPf2j04vLq406cSExMoe2TZuj0fnF8xsbzez03MwUq46FQ5DiKhnn/Oys5t6pVy9curQIAoPdOHCIRW+8Nj5yaO+v/PJnfvpn77799pv7vdnL51fXNy+ojoIQUScoTp2fijvnBOKiiL0Ygua6rdeKQg/snfmNX/v5/+S3v/DggwcCa25TDD14pwt4DUKRqNuolHM3cYusWvXkjjtuuePW+2LoXzy/2NQts5qNi57lnGly+fjEOdndzDgY3FRbgsUSwo37kGWMVOzZMffZn/ro7/7ul3/qU/fMTEdXCHVHyRtW493YZCfenXNuY4w7d/Ye+cCDu+Z35taWLq00TVsVJQfKbZ28MTEp2NA1ozRrS2xCIZkajAQkRpxATYzKRpHs8M17vvTFT/3O7/zSTzz+wM65PnUu3NdzJQ7E0Sk4OBtlI+dIHBg2AR/crhD6iemd5lp7DUKRiIngqaEgmeRHLy9/60dnj51ZhahUwpEy2qSNUSNRSWyocvnyWBh7Fgb9snNVkJxUtjmlmDfvunf/zLxvDpfW1zdIA5M7Daen0kMP7//d3//0F770cOBRFfXuOw8fOjRo2ry8dGFcj5nFshKBxYmNCI4cI7m3Ka8EXjt4MD766G2//7s/+3M/85H9+wvTJnR1Dl0ZPromoTjpwbjDHczkyO4axPfunXnoA7fedc+B6Vlv29XRaD21Y0IkuHCIIYhE4SAswqzYFHZml6Bu47ZdnerrwYNzP/Mz9/7qr37sl7786J23z4o08GaSgG1T1nbOpxPVGwJLp6ef+1V7z70HH/rALXv2liGk1dWljbVxr5hOAWAhDlmZOMQQnVxiLNXINBAYCh0FGw0q2z3fu/+hud/6Z5/6nd/99OOP337k5pkiIKcNkUQor/O1CHaImQACBCIBsXeq51d6YzaZKn/n2UfTf7j6nTmYDKbgeOLc5teefOnl5TT0GGGmcAKHSESqKgRmNokYNTtC8/GHFj5634HopAkSt1Vf1jyWENtE5y/W3/3OyZMnL6TUlhUdPXrooQdvPbi/X5ZmqnBmkay2vMZf++ozzzxz8vnnT7/y8tmkrp6bZhxCQSRVVVVVOHRo4aEHbvnAB+744CO3zs8agJRSjCWAphmHyMIMiG/xbLp5xQweNf6vv3H8h2dGijJ6TsSAC7IjdA5qySJxnnX8+ucOH91TwSNRVjOmQCQdQ2DiKmFwV5bo4NEYi5f8Bz944aknj79w8szK8try8lrb5GSu2R1KRIgeOYYQ5mdnDuzbffPNe+6957Z77r398OFmeroC4JaZCM5QglylZ5yB0HX2zFpiZ+aUUhEr08QS1XhtDcePXfze9048++xLr5xZWV/frEdt22QicdeUGwmhJyKx6M9MD6b7O3fN3HbLvrvuOHzrkYO33l6UFWLRFW9bQrOU357OmU1Y3Z07gaaUQgivJ4SYQQ0h8HswFB0wTZC4MvKvfv/EEy8s5nJOKRaacWUwb6KQy3AbC1dS2nD1tn3y04/ffXCu5zkH2R5YdbStxchgjNvEYiBi5txSrxAzwFWEsNVzbL0lCinJubNLZ85dWlvdWF5e3hhuEmwwNbOwZ/eePXsOHdy7a0dwh5B7cmZ2VxJWdWZmQttaUeKahKKjZeKUrAv1K6xaYQGZQ3NOHMSNszGTDEd5cXHp/PkLy6vrw+F4NBrl3DLzYHq21+vNzMws7Nqxd/euwXQZBCEgIFuHKjsDnU6gpbaNRX+bo7M1ZZGwdfZ1SClbdneVCHNLmoJEULG+sbm+PD5//uKlC5c2N0abo2HbtkWv6vX7FKtqMNh9YN/c3NzsXH/HIAjlgkxAqdWiqAAzT2bGFHPiorzOtZmOIAXAGdx1OJmM0bnZddrHxsSd29w7ELm9BgcVwZy4cRw7vXTi3EZLU8FF23FNXBSF0GTzMVHHwyjZCLnoDZY206kLm7vner0Ay76triEhRlYFzHqRiSgljxRiUZsaEEQEsGwtETOKSAXAEv3o4V1HD+9qGnVHVQqRdSNOXUeSPLODiRENUPfsQAjsIHMUJV8rKpIpcZAQ2CznbDFGIhIRd+TkMcYYoqoLUwhISWcGmJ7adfTwHma4w8wBsCCpRhECOZRAExAVXeEjnUQAMxzqbrHYdqsxBZIuW7ZOAsONmAsO6k6AMKEMhaqLYG7Qm58ubzo0434ri2RVNUisas3jms9furS0unn67OlLi7ywY2rPbH/PjllCWxSFu+aciS1IAEJRXP+97NkzjS2MWxs1rar2yzA9VZlZUbA7mXkRnPA2jQLfiL6iO7GMWn/l/OXlYQ7VrOW2ErIgZim1TYxRGDlnhzC7AJujjbKaWxs2F5dHraZKwFdJ3R3ECJy9y3cpxOAgI6vcTZjUwMwiPZ/wWDuAIHfeglXBIMltChIFDFbAHZ3WmiB7hoVQMEVVz96dl8lxzTxNQyjatg0hMBOzEbm7qSpYQhSDkkOEXD2rxhgBBVOn0EOwINwFTMnRLRNzR5M3B1FwdyLWbNzBxu6gQISkebvJB1UXYZpQsTsxj8kEsBPg2slJwRPABG81ikx4xEoREWPghVOL33rez19abpSIA8F6Ybh/B995266PH47ETmIxRvfOnaJlUsL1HflbCTOnzucTpxfPLA5XN2p2zM9M7Zyfe+woduycqwIRbekQu5o5B3nvhWJmosUlfflsS8WU6ZjBmeGqACQW1umLcOxE7s2oV7KrcanLy5vBI5k767YM6cn3F4jDj/2EETqF6dezeSamLOiallcCPBRXrjj5McZPwJVhCxHqvpDOC6nj/ThpF+CTB0m6fa6/Xfiah4J9mDGFULhaS1IKDEJoyIp1TlMojGHsiZoeyklzjK+I1jGBQSB67Ru44kUJXJmifA2LiNsbQV7JzZi7X3Yyy0eYmLl2byKhmPxU1BVBMiDuG475508ufvV7p5ZqJhIJEZ7MdaT51ZXhhScWi3TkA/fMBVcYg9nAnl0kXqtbyLxxRDaoA4HZRsxxA/G5E8Onnj12fnWUqVSSKHzh0qXFixc2zqcHHzj64K0HKh8iO2TGQPLOk5a+FqHIMZmvrKw0OTsCEzEo+7YZAMGJKBvAXLc2btqpXnx7PJZvyEpgZcB7lGsORDwu1y76Kz/gy5sIsLCj2L9H9t4mvV3IDSBXRlvfISCfuxMFuLkFkcHLFzZ/eOzMZh2ICCRgmhDHjc20VXvuxVN7Fqojuysim9gdi1xDi8JOjhowEcoAcQDiK6c3vvvMyUvLGx56LqUayNkBD3R6OdXPnmFMfeDWOUGrBgl+hRL4ngpFB2fLl5fWzMypu0GcybfX0TaAjZgRsiKpXU0B8d2/YloWnoaTcATqSz/6u1M/+GZz/MlUrynaaNNTNx06eP+jM488Xs3tXUU1/0ZxeGU67Ab0uyiYwYnVAIkvn7380rkNi3scYxA7ulZP5yxs5v7q0vDlCyuHdu+LzmZOAiK+hi5ck+yDjIjNzUlGDZ45fuHiyBMPJFYOAZkRZ0DNi3L/mZXl509v3H5kbk4KVSdkwAnvuVBUwMCboxFLBNjVOvb+9qGrZrgyzxakAMzc+D3K0Nc4IwhqkPWLG0/9f/7X/8P8Kycqqsgb46afoy89kV54sl58pfexz/cPPvLOM08wdY5ERNhscW551ErFIVgmdyd4F4cdGdVhLQ/OL22M2n2zwcmtw4rpWlJb6LVc1aHgxY32lYsbxn1ENUPONXNgka6HYRzUq7MX1y8s1jN7qq6LwfSOQ1CvwRfkDnfPWbE10WtmVxtikmieBW7a9HtFVfLb4Ox1Izdy5qStM2zxpZe/9hfNy8d7hoSQHKMgqwMMy2Zx6ZXnn/jq2ae/AcY77dvIKQEwqAiy5aXRUIWavIkJgcUdujVHKkQxISyvb9bZwMQdS3UiRnrtvlIDQeAuxAAvLm8Mk+SUCMbQSBRJSRv2HNm9XQ+w0Wi0trYG78i9BHsvhqIAIGOmnDMmvr9Xq/y4E2a3OqBdmOvH0Bm7xvdqKMbAUThvLtZP/T/5pW8EZCqJ9EzPuadlGiE2cjhWBy6djt/9y/KVJ/7eOMsNrxsFzgFqLTyJSNOagYR14iLUeVVOTmWCwjAxHu+EUa4k2NewejUCmNypA182R2OPMbAHQAhROAjBFZ5g2osmbN0NoZo6gwdVeg+GIpMVRLPTUxMJbSdz8u1987KxIJC3M326ad9cgLq74T0rcDI0KIK3tn7y+QGpSthUDkWvllXiVoIl5IZVabi0dPrs0tl32uenK10R7+QvKqay5AIwISd2Jid3hnf0wEiTBgxeUwK4mp/hmw7E1wHjBASCTnTHXFXbrBnIzkaBJTohORpFcqlbGNw8A87vvNmsaxEAroXwzPTUFc0Ld+ftvT6SGjMH+Nx0tXuhx9BrnsC8o1bBKs1qUY+HFy/0PffaUV/d2wqY1iGXHiVQk4fBRtPjTVlZfcNb8cZCqHnClJJUK1Mp6Kfa4QqYdO5aW64+BBCUTC1nosmEqnnGtcNttiy5QTaZRGdBtgQwB+EQnWPjlNyVRJ2SBpe+h6o2cCxYyKGg92IoupOB9++fq0IdrETcZSySN1tGDaMYSIKpkyOAA5ALadz7RX7w0MKeShlG5PEdidl4pzS3Rez3f+R/JlG3aFGtFg/KnRe2QSCh1kbKolWYxMYTSo1hStncisLBcHVRaaJtN07x2j/vMMDMsqaMDIV1PwHsiv2j/4PTzczU7YruV+d5aBN5PXf3Fm3Ca/7mZqaeM5JTKEDiPQvG0VppOa1YSaDoLmZMRuzc1Y3GbiD1wNSRv40ghMLfvKr63zuS3LX7HdkRkA3IQRprauQcKkLn6OjkRpYKWCRiMwY8gM2jj/tkZMm9AZioYxpZttSadgOgyaE37kq4FsQ3YmjaMSjuuGnh6RfWmlwXhUNC0GhmBjbP3SNP1ABWgAsf37R//tDBPcLS0TsceK8iqElzDCV6A5marjm0oVDnnNZbWSxKTlaMgBCnM4L3Zst9+95QR2vC1QJU1eAiQhy6/r947uhDEAaLgxRutoVPwNyMYMwMc88txwJbcgaYsGgcQLCiG3Lu4pkDg7gjZdyYxPh1UmMAiGTi6JRBIDIXoZAZHKaaOJ16m7Kda612niQOJo4AKcQSAhkHCiwAzLJb3ppbL96tt6KBXeKgF48e3jc9xTEaxarWsrRUugbPBVGvKEPkDmLtNetH9gweuvPQnvkId0CIwo163m/DGhBzaqcGxZ4770M5w3UzS4Z2PEhga81WAkaFbQbkHTt27J2f2Q6hyVYDJiJBAryT3UbK5ojgEqEERfVOh0aZjWGd9ygxO0dHAEeEEp0OppGbWCbVzscRzOae3WpwcklqSa9pYvkWbsV/APkwwG0schQrSQNQkgXL0iRsbg/yGAucXN3UkYwcREIsYsZm3bkEkcgiuHHw2LWAbXIKua7Q3L1/8JHb5hfiUNcvlJQ4Zkedc5M1uam32cdtyH5kZ/Whuw8e2d8nN8sKFxDoPSxLa5xctJqT+3/Obv74KJeaMk/v8Dw3pmmUs+DZxTx78eCD+pHfwN5HtlOXJGabpJYON4IKWwymRK2jdWQAxMIxgAOc4bDO65szqDFrgUxI4ATOzBBQIBZxQpPqTlHfIrkQmE3IwPnGwWlXElS+MpbfsWQVUCebDJESg4J52JaQyM4MuqKaKeQBFrkTm/dOacRcsrF5sBuH5F+DBDVJJI4p1xJw150316jsxfNrtW5CqOwFiexsqbWss1O9/bsXPnb74PBNsxFKniWUbnCz93Ao1oRQlIDLoXuOfPrzdVxcOvF9rzf7RT9aE8fKFGZ2Hdjz4Q/s/NBDCNt7EFBQzQ4SZkCpAw3dg49AERyBoIZsIOLA3XkPcxAhIDNneIbnGoPAIiC3bKoixExVUdTZRSIRZXd2Dgw4cvJrla+9WQ+Vjt7+WunrBoCJyw6sYWSQomgzGivT9juZTFLrTG5gJxBItRV3F+78cJlCEPiNxvCvQShGpEkC1Wzu7g8ee2DP3p3lyVMXXji/Vtett8qkUwXvXZg6etPc7Uf2TpcSGObeuWeqW5Bg791orOSyY1ZbeH939dHPjvftXvvet9KJp08srYhhqjfdv/Xonns/VD7wSNvbeyHRTXFbWIhIhLvyz52EKYDQoKwz1jZ9fWzL62llY7w5bNqs/ars96t+L073ZWEmzE+FviBQqgAgwzKpcYggToo2m5RFrQ7zMjAzyBWeY4TjRl0UNpmn7eZdibsfCW+2WTP1WipUMRz5ZjILFaX0hu8ixEYUi/5YcWnNikjsRRW5ECWCmztUGGQZ7giMG/T7XgsOKrGCEaIEGLwUuu2muYP75u4aYW21blIugszOVDumqV+gAMRbQhAKDku5YWYguL9nhWlb9BrEgcANypg9fMdD83v5vnsxvAwjxKn6wKFq50GXKcr1TdHd+2+YoG7l8epwhRgHAzbHWFxcPnPh8kunLl1eqxNKcHSwu7tlEVFtC9H9O6YP7Z2+5cCum/ftLMhBlhUUSqewuKknTy8urY4vryyKyK652cMH9x3cOzUQYW7JGlwjHyXf5l7cTvltS9OEbauVaI6U8zj3z5w9f2bp3NJGk0Yt1JfqaGOWbVxfHVmdRll/ePLMqdOnAc7mvbKIrLt3ze9f2LF/YXbXACKwPL6B7cZrgqAauRsCETw3Eqhy7RVxZ6E6Q+CBAZq9CMqeYC2kzDmLFCAWESYyy/Rudnq8+iq0BEDIWYNQj1Hk2Z00fVNiKLTnxFTA0RrYEb3dTuiVHGZ5Qm6SUBtePb95/MUzT59psnmyWSoWALgaeSJyZw2xzGI1MFz3F5fXfng23XakePRmnp2dQuxttDh9cf2J4+dePLOi1Gf0ARw/s/b0C5t3HVl44K4DB3b0RIob/mC8m/IhpJQ2R8M/f9pOn19db5JxiOZR28TSFlM9G71xoivGEIS4WtebI4P0W0VgzuDjl1d7xy4e3b/jg/cdObg7Rim2NKnenaEIRLnCcg8VXvOsix0HWIAYCBCQQCpMnO265KHoKu/3wiJXIU6chGcVWay7TVw8WAYzU+NITkKIylKAag2tAF6DrESVwZkKI4tw5AxmsOSJCxTYxiAmRAeP1uzZly4+8eL5S6O2RR8ghsMadDYHnTiWlXMQmAAAIABJREFUR81GAHU1I4dLG/WlZ46nleKRew7fvGfm0vnFv33q1Jk1JprxprFCnJWKNFZ76uSrQzSf/eAtu4t1xyz9+OTM1b2fyJoownBrayajWCoFA8hpuFm3OTlJzpbNiZmZp4vQr2IInWrJhLDlYHaCZuOiBUeCa1tr+OpTp55/2Zw6FMsSRKVHjr6OfFu1eBY4kgL9zOhoqAZPBEEYZT52ZiPbiZ/+2O17puINHNd4z95F75ylmUJ39ngAl2PDZoPV1fGwaRxF2S/nBsWuPhed4iJ0YhrC7E5uAIO704p7CoyAV86sPfv84isXRist2hiD/yMHhL/GCWbAnjg1bHjx8jCcOLV6arGuZToQ9fpVasFM8OiITbbTZ5dfmN+18+7+mz0nJQ7q1IwMc0XPgGHGhctpaWV0fLnZ2NgYj5uUc52yg2OMIqEX446Z3sJ8f2G22D9f7RxQnwFrTcQ1CSk1WWJJXLx8bvP46fZabVoG5dwGjq3zmUurL716aced+yPdMLrv+6F43ZcEZB27I4RyU/25ly6cPLdy9tJyO84pc4yyMF/ccWjhgaM3zw0cumYy7w4ihhsxpOtekENNWV6+sPa9H50+dbapc6ESYwi+DVzxD/I8BhnAGzz/1MvrZy6Ph+OmpV4sKs+1mjJNGdyNYUJhanV9+MKpy/ccuXn2TepgWLNRTJehoLUWr546e/LM8vnF8fLKMIfZpE5ELBGIRmQJ7mlka6uX/VXoVEX7d/aPHpi/ed/s3h0DddEURagqSFPTEl9YvrzxFmg726wS7CwknE3W6/rMhbVH7jpAZDdK9Ob9UHwbSp1gRhxlo8azLy5///mL51ZTS1NSiTKz8+rl8Zml8+tN74N379k5GES4dTZLE1K1GYzAtRTHTm9+5/j68XOeeaqaLlNSa6jiNw5FI7C/Bq2RG5wBFFFM6fLKqCiKXoi5rUVUtFXqgdwIDsRQuNvltfHaKM/23iRs058aenj65Hh5aenVc5c2M5wqneqFZEzeSZK7k5upm6lLUWYpQLKW9Ozp+tmLi0cO+W1HBo8e0KrirAlSUFG1NVbXsmsPyNfmuSSXwI1q4jIWM8MabUYImal4PxTfo6FoSYIr5MXz57///MuLGzHFgssC7UZEEaVEKDbWxj86cXoQ8mMPH5jUS53HQ2faQ6KQldXm6WdOnD6fYpxiG1OzMQCrQXlbQX4jx1absmsGkMPajUKIEdzJTAkQBJCZNw6EANWc1M3zuMmj1LxZcN/ren2cnvtRs7qx3phQWSVPrm0qBt20gLkTEbMQMQNR25RrdY6hkBi92Txz8tT6hfN8+85HHritlJA1FSIiSP/E+/9N444TUmE3eXujmOLvey9f/wSVo6FYbfDi6Y0Ly5x5BzDVjHOi0kLcrNuRRprZfyn1n35l5fR6N0/HW3i+OjhD1ht889mlly/bCIXHPqTvXlqIXMWrtQ+6d/mxH1EhnLJlDo3BWbgsa6OWexJcNTkyC5kpMxO/lQGRBnNDH1xuaEhlqqbbMKUyFfu7pU0h5Zi1VCvVpGkxGtF4nFUhExdNNScuDdWwCV99ZvUbT10atqhEKG2WnOdmC5ZrF40B6laEEF2tXe+XHgVXmSh6PxTfA9eignxtPDy7slqzNJYjN4OiLs2nyPvUctpgHzPy+vrq8vKyul0RC2YQKIwNz720eOyVMxlUhIh6s7SmK6Da9E97gk5XZgcZAo7OkYsSgpTqbIliwRQAdutsrDiyBApkbzoapwotgwdo7NCqVIdUy3hNuGIq4dEtMAIjBC7K2IMROxgqZBwD9QZNmF7P1SiUf3fsxR++eKYBM4dIcmhhb//a3VktubpZVsr1oMgH9swQ7Ab2t98Pxeu/MhFoWOvyRhOreaaSQd6MFWVTG1OIUbKZS6jNFldWuntMTQEndoMvraannjuxgTQ2yd4H9bLnxJrjTAr7/ikp2OubZanJhYScs1sSNAHNVAFLm6k1phgokAcoXGHZNb1pOvhYNxqrE8Vs/TpFR68IkZASUqImc+tRXUypTV5nNEaVUyASIFsatfUGrC2KQD5YG9JzLy2eXhpnKUHp4J7i8O5rt2OZQihgHqH7d80cuWkh8D/Sp3k/FN/lK7oBeSOrz8A3nIemOYc5J2PxWqhBv7TkaLPsajbcIA51V3jUzAr60csXT68OTKeZmXkTPHYu3XvRU6EXxGpxh4si/v/svfuXZNd1Hvbtvc8591ZVv3u6e57AzAADYAYkAYIgTYrSMhXSspwojmIrspbsJHZ+cuz8EfovIq/lxEnWsn9wIq9YFmVJpCRS0YMUSQAECJJ4DQbAzGBmel79qqp7z9l754db3RiS07BJDoAeovbq1ehuVNVU3XO/sx9n7+9rnEjE2pKykw4rVjZl9STJKSqo4wFX1UgQItcEnzWPhKEGisWKo2FNlN3QcJUC8u4QZNdU/Z8MWtUWKMwqMvlGja3aG3Iq6CsRF65LkhzGxTJzCCEUZ8owdXcggCJzIIZaW3CbQv/Kevr+6+sZBB+vzsZfeOqBM0cWBtR6aQwUoXUekraj/bVxCCVLaFNyVkYjBDISp4oTgIidU2vVpz7y0Pxs7URA/qBuk2nZ5sAZEdxpwhcc4vrt8ZX1zQzjfU6fyXvFFEF7gbUpVSl1b9TvYRDrGHjU6HA03h5voxAksVQjBxGzm1khMCBusHuXI82FdtxsS2AO0ZTNrFgBrE49H2UhZyFlqJs7vYsvIEhIcTxsz7/19tXTayeXKjiOri78l5+eeeNiuHhjc32r1WEberyRJY/3bQgPFtWp5HEvNLO1uRciqgM7NleXlo6vPnRibfHooRQBK2OHUYhTKE6tg6KSCTOKqbKcf+vW5fUt433FX9qgFFPbZB2NFiKdOb526tSh5UP9fh9mUPVR6xevbrxyYf3yjdHWuGEInIyZvAWUQO6Me1fBz2UkISnLUEk4VlW0vBNYc27cjElyMQssvUFubdRqT+7uZ3PWEAJSfX1zY/3W+MGl2dK2sUqrC7Ywu3SWjo6dNftoqM+cv37tpev7nXG4UgjUi/Hpx45+9KEV5pbhAblfx6qqdhVtzTQLESR9UOs+heLBq/JA4QynYrZd5NVLt7ZG4F7Yj/+HSwlI0ejYoeqTjyw+9uDC3KBWQKyZuLoePzS/ePbw3HdfvfrMCy/d8LniSiRMTKbohhPuXcNXQCmahXp9Zi2bQXMfw8VBrz+oyARKNzd3tnLO48pK7KdZ1/aur1PFXrESYzVs45vXNp44PR9EAOdMgVKfWRks1KbwVi9Wnst+H4HdyUo77AU7skiCCM9iXAisjZM4MyAklQLm+KC4XaZQPHBmhkgEuIdwfb19+8bYQ/1uXjQtj5qdw4u9j5xbPfvQ3ECKw4sCXLEDaN2N2Vfm5PFHj7LY1757dWOYjdlF4No11xGi36M0aVQt5qwwT1Rme+HcySMPHVs4vDwIkpliVty41bx55fr33rh+8WarVDPuDsVAYeyj1pOSXLs52h6XpToA5hzJ0WmCOVpBslI0G/ZhcSuinCI1oI5GxDRwBAsoOMAO6k4UJzqQH9i6T6F48KDoQqxEDg+X17d3Gg2hlzXvd5f48NZc3H764RNPn+nPULEmM1d1d3hhheDMVsoWIKuDevbxtSs3tl59a2ezqIt0BDfkAOxekcyNtrfmB30bbq7OyVOPHH7q7LGZqIEKbAvSA6oj/er08uEjc+mbL1177cpVi3fvrMtNGwKyteDUZDStoXKHj6WVTr6MwDAHXISk7pgh7xLAe45egcAT2VU2Zy/METAQd4w5hcmJWXb1GKdQnBrgAmoBbXO4em1DiQn2LvovoZp7YG3+0QdP9IizFqr6BAAZHpkDLMAg1OvkonK2j51ZvXXrra1bUBdyEWKCuxbcI6rSVPVcSy3+kYePPnHu6EyClYJQQeYUoSklkg3q8NjplYZ7V26/sLUPFUYicYF6NrPhTpuzGYhIKlcGTTREzIQsZovZmn3u5VoqN6LiMONOPrIrBwNO7uog62alP9hlnx5mHDwkEhwZsLaxjc0hEbnluP9KOd46vpqOzgcxFTgBpYA8ghpDW5CdYYRGoUDqxYdPLM/P1EJMiJ0uE1NH6HhvbMDKo42Th/pPP3Z0Nih0JwUp6rmwOlIIUeB5sy/lkQdmzp4+tO+tSaRlLEIxxq7ljbmj1UhANAuOUJwVXth1fyB5digSxUhC6sVGQCFW9QJyMDmLk5iH1qTxabfNh9QKfC/DkU68MYq7wtG70eLmuHFXCdTSREfdAAM5EZETCryZi6tnT80XReHIEsUQAmCFUDFS4EiAMCqBAAEww+OPHunxhtgOS9WCnCDuQeFMAmJzIxBR+IlaT7YLxSo89tCxmYjEBEqdOnoIHAkCA2BSAWE+4skTK4u0QyW4iNKYwOoo1AinVlqigZdYMpzSdm4MWTrNaHcJRaFBeuIiGJe4/53MZJRVqKXWmSIPACPqwgEQdbzmxmSJvfrgfOMUigewgtpxq3POaupEAn83NfL5ucGglwIBfgdP4f7KTRVjplf168AT5v17TK9IpFUKg5keM9ydJ4PMk1TXdgU2urc6GPT6g/pORqlux1HVD9u6T6F48KDoRCwKNE0uxQjie9ITd7PlhZl+FYSNAbgaoO8qVhlg84N6tldTx1ZM5B3Z/Q8GyZMa0o/vFwVaJZqbrUXQvT4m09DdXkHoqJ+sABjMVINBr5N3ICJyJqI7kfke3/x3/ZpCcWodDIwAdkczzqpOJG7w/bnT+ylEIri6T1yKO71LWzN56SVUScj0zqpj94w97P3EfdECF9I6dd2cRkRu1h0YdCIaAIMIZAZj8SoKrLgb+0TR9U7a0qlXnNoHb6rqEzFRf5eVYmaCdQgG/WfQW1sRwa70nmNXJvFevW1hhjmTdzjcfefW/VvdyCLeIchxQM30HYU47zykT6E4tQNhRGBmm9zF/i4ZnRs59hzJbmL2Lojk4A5zInAna28TqEw8oeOncoxkPIEUnEgm8IN2HpccZnADYaKCCjKQCXHnz9nZfoZ1xaZQvJ+WhOFQAkLkTlvl3U8aRlkLeEJu3Tkcf9cTe+JxQVuKUUdm5XuSbHeUjn74hx8Lit0AbsezbwYQGYzIu/yQiHYLUcRgImdmkHVK4rsx9tQrTu2Dd4jo3EKnV7l7X+57a47bnIsBnQvlLrLrhGvu7kXBbbYmq/qdTviHPeBPzAfajZUQuEtZzX0PWt3nYuLdzwWb1HUmqsBEJN3Hpmmu+JPkNF3pOQPFHGooxYCCkicSYa5mNimbZ1iGWgOMso0ccEPJDfZXAvqZttCdJU6uows6CTJElHa+yin4CJXHSrA5SbEAhncVR0cAVTvrb+8MhYikFCdpKBMZCrs1ZiV3oaGjlAKYIaM0O2Na30GhULGltlDrLtGZxGCdTq2B1RUefvzySRFVKDkCCzNEyB2C2l0kpD06AXfwhPRbTEgLJ6o1aFPGDDEyOLFp5hCttCwpawF5F4JzR6nPQHEiRS33iHvqA70VfmorhhDFYWaFyIQDmEuxEKRo66SBmQgOApiY2QQc1XKgRI5cPKZKC8m0Ca9zR47OJaYUhUEwL86SdB+/eNNwZXu4MBerblbBLZdxkgDqEcG9EJxJiTsB+2gcL19eN3UWVrMYRJyLG334ipY/a15RYgZMCwlFJu7UnkMI7kxSEw02d6qtUXDUBdxqC9aSs3BFRCCwwA3ywc2JHcD4tAvPBr1qrl9FM3Jg/9HeW8Ny/vK1UZtZCGDhKsYehG2ipMvF4RCwKLgQNjPOX7xmCGDJpkpM8iGtlPyseUWgMU9BEoDS5pACwLdvj5977voL33n1zTdvjke6uDR7+uHVc48f+9hH15wdZO6acw4hiXDblpSmPvHOtI20aC+mw4tzF9c3nCpH2q+IyhQvX7y9fnR+8chi07QSEkIwl8q2nWJNARBoAZRYcykvX6TL17dBM2YGEjWnAHcFyfTi399QdCTTzrlZSFENf/3Xr/3xl7/+R3/8tatXNxz9GPq5jDiMT59e+MxnnvgHf+9XHjqzDGQW7c6WYqRctmOYma7HHWGqp4Ajy7Os10ii7k/PWciv3mhfe33nyMLiXD9NGHuJIR3di7ijmISYCnBrrM+9fGmYxRNcSwihZA/uIgKfXvX73St6CgG5DGMQR/XVP3vxX/7L//jNZ84zBm6HYqqLm4Gg8bVXmktvPfvG+Y1f+/Vf/PnPPjaoUyklcCL2GKaJyl75xiDCzE66stifq/xGLgbZz2dppKGm586vcyyfeHx1aRDZW5SMsGAwoDC5xNACb67nZ1+4cOHK0CSRA65E0p03CJlh6hXvdygaIAghqMrX//ql//1f/ce/+uaFmFag2UUbHasXZiauTNNwB1/9iwuKv5ybXfjMp06IOKAlawhpWjW484oys6EsL/SOHV7avLydifehgIEwXMLV7eHXX7o8Jjx+6vjq/KAXIeoi7GCHDxu9uD58/uVLL7x0sa1XI4vDojjcmSOZTqbZp3ZfQ5El55JjqDc38Pu/982//KuXUn912DYDzh1TgVAkoqLGECJyn/nKn7wwN0gnjv6D48f60BJCpY1LPV2OLvcTczCZa5mpq6NHll5Z3yGn/Y4WQztWS/35xZHu/NXz1159Iz94ePHwWjWzkIJU45Ftbo2vrG+8eun6+lh94aG+NZodmkPFrZUQeqRMnqd1m/seiqUQCSv4K3/26pe/8g2RWS+ayNQZeyVa78amzRnAOKX6T7/y/Mc+/sA//M3Px2ACSHXf78lkRIBRSW5KzM7esYbSj1Zl3s2Sm5pZiM6xAs6tpRdSu9H0hUoBCrOVHMgqDlpgXMGF2do8IgcJr+/cvPHqdbyKVXGFZ6PGqXUuLBUHzzukBEBJVEUAlAyirMFj61bTnQw3Hn0f4pn3wrpeub2r5Oa7Ux1Ek+8/ycH/ZKzlwGfC9+AwIwQWCltb5ZlvvbC5sQMQM79L41XX6Tsalj/4g69ceONml6KYTosGe9Gp3wFXW5gbnDl5LPpIvFjJAZ6CsKlbK+yuIyPrOmOc4MRwMQpG4bqGWxo3PTYelSI8CCiAIHB2kJsryB2to01V149NdwJjuhb3GRS7uYH19Y1nnn2xLUyIZtZ1G979VrMiIhJ63/n2my889zo8AeAwXfi9vUqIiOCBANdezY+fOX58MYqV1FFKFA2BA5NaE7uR4Y4ADexgo+Ae3eMm9bapHlLVSFUoOjGMYK5QZ6dAzu6e3bWUtpT2P9NpT+3gQhGuan71ys1r1zZjGhhYVUPYN/Q112zK6JnPfOOvXxmP4e5uZboYk8vJcAJstyHOy+EFevKhFWFjFDMzoEBas+JQhpN1/dwGGMQgDnGIcGROzIEgewBzdzfS4rt/5BBSCGnajfyzAEVidqMr1242Y4NzN/0pYd9XjlFUtcnOPPPyy29tbQ2dPowECvvm3gCRT7QpiDTnBD93cvXRU0eq4EKW6r4aZUTuDVr/US/GRmzEteZkOZkGV4YTOdg9oAqJnaAuHtzYlJgi/UjVYOoe70OvCLj7cDhWeDYFO5GXrO9S3hChkGIusrXT3N7cJLhInC5GZ9pNuzuKFkcQDl6apR595skTDx+bq6ix8TaDQohucHB3XrG7kD7xjrDoJVgRL/A9fRgA8HacQFAlhxCXYqVYMb5bVk9TQN5PUDRVZqnrPpjAu8Nv+/c05lwmz3PLWkbjobkRTRvf9hDQBZvOFIoDIQoowB6Yw9OPrD16bL5PbdQxl6xNQ6bkTM7ke9wsDlKQZomFg1LwzuOZuxoVExsfXp2ZGwToUNglgAJJoDvrNHsgnELxvgpQiUQwMztLRO6qmh0W475erutWzaUJgXPOEnlarPshJJqbu4NRFO6MjlG/vfHIsfnPPvXYQydWIgprUwtqZtplnyDv/GFhN3YbQVqOhcSYQUEoBFAAHV1bePzs6WOHl4BWfcykjqLaTjLJ6Vrcz1BMw9H2iaOHVuZnpZ3vxSRwt9i9uLubq7k6iqOA1DgW9cDCnufqmR7NBYrw5sBBYkLMIuQMEhCZaWCLJSdVoto01u0o5BGkHiE27hANHpswaF0hTuZjakwhKKkuKW+5BadxQVvlihEdKZiR7Yykgsy4bZV+7LkzInElQC+ACA5xBI8LAI4u4hefOvE3njg+M6Ch5YbFqHUyYgEl80qtb94DDaLmAAc4O1OQ4o37zokjs5//+LGzJ7Tdvkw+41YrghsLaSjVWHbYrUfWuCq0Crc9zCa4wjMMHoqGng8LKACuJsSdgdmJwKzuRasQKaRWyxjO6MZ2yLpdhrF7SEggeE8gxCFnEI2ZQTkxAWlsVhf3wJZbldmEDR1AtYGLo/g7LFpqKKkKUArggI7i3FxQxIdWspClQhbFOKW6UYPDcvgAdRT3dVE//UvkPOz3qpW1cOT44PK1W6pwdqIRLGCPPYF8995G0R2QmWdCs7Q8WFgemBv7AQ2E9miR9sK2cVV2pG2jMYw4uHt2izFJO7Z2HEI0L/2AAIJyjIkBgyaJdewPLZKw6Y70lMxKUXEPLGwSC/ULH+sv7J+RF3ipOR5biCufOPHw8cMvvPzma29eHnNs87hksKQoUcnNDIogAm8Yqu12XcqRhfqRB9fOnXlwMBO2FIYQJBYq5lkQuw7UjvrJzLph+sgIzEULSRQizaVK4dDS7MXbt7TEGMVMc3Z3Z2YWYnKQilivEnJICK5whoiYFuK732yLS4dw/pYZU2IvxVTdSy+SAkU1pb4UDOpekh5zN53CRKzqLAQnM5vpJ0Eee8MUmIIpXFWY+5AI2sleAfDcq6QObMWJyHHg+vzuARRj6AE0Nxc//okz3/jWSyGtjJoxkYXdZptdVutJx0PdC6UUKMHGjzx2bDATiPkgq3dM2B+6UJx4bXCoZ5ctg1S8UArCJWPYylzKwx0hiI4H/VSnSBJcJ2s+Pze3OD9z9XLDIZrQVt50rpiZpFYv6jly25tpB3P7V5JZCO6W2azm+OhqPDZ7cvORtb96G7dvbdzY2Bw2bS7mqhRJRBgBpgtzs2vLR44uDx5cnV2e5YqRGG/f2t7ZKuMinojgBEpSm3XkcWLqxMLOMVAVI8gYgIFh/RrLi3VAIUnjZkdSTL1gZmbW8SEzYrSdlaVDMTDAXdRF5O/SJzM3aGd6uc2NqpBRkspNczseAYgUYDoeH1qZna/rQC3EupvKzFikY6VcnOsvzvKlYV/dIxOCkVlkcTVrtOpV1OSFmbg4kwSFCKBg4J9BKIJHbdYq9T7/Sx/98lf+/MLrTUrJufFW7+De22Pgw3hUqliZ+WAufuazT8bUXVnwgT/ZEpATHZlf6PPlkY5jSqUgW66ThGA3dvJsNeNgtnxkeaVXRQBMcIdpuzjTe/jk8lvrb+20qOuZQuNkDiUyD8JNO4piJ9bmTh5Z+NFiSeeZG+PALGzEBndAZ3o825/5b9cwbma2RyvD0XiYm5yzAxK44phSXFiY61UgQ8UGZOS2pbS12Y5ayloiC9RKbijMAIWI4HADMdysl6peBHEE4AZmZtjxlcHhxd6VW22dega10mTLQh4lIasZlmf9zAOHKxEtWULqkhSi4HfrPSOiR44denXp7c2LQ5O+cGjNCUCkSubVxlTGCz2cfWh1toKpdl3xd1DakTAvz8ojJw7d+O6oaUZIJGLqORcwJEjQtqnhjzx4/NB8z6wVnrylg+YW78lkRq8bcTpz+tQXPvc3/8X3vqxeS+qBhg7eZfDjPSZMRhKIo/nkU2ef+MhDgcwOJJmDu/9o/VCITh+ZPbW2sPXWphEQ6iabGScrIdShku2Nmyuz/OhDR+uaNReODCd4iWgePTl3eX3ue2/ebEcauNqiUV33vDih5SBra8uPnHlA5O67NRFVRO5wB3FwMocXL+6IhkEV+1WyhWS+1zdnsnu44XBnKmACc4wErF8fZmOuYuevdsun7u4G7vI6szw3M9tLsG6m2ODCgB0/PP+xR47tPPPWluSmNZYkMoCrliKUB4PwkYePHFutGdYxszrUzfhu4ocEcvigljMnH14fvn1tp8kUi7GLFi/zbbF2e66Pc6dXzp6aDbCCrrMPgE02bhLAeoKzD629fevy21e2dlojGYQ0MLNiWQlVs3Py6Oqjp5dnKkZxyDuskAdro/+t3/qtn/aWpUzkqk2daGV19datzYsX33IfTXJz79J1n9wY5JFkNNo4cXT2n/3zX33kkUPCKswEIzpYbtEJ3Q7R5YqT4j6oqlpJvLF1Y2vzJhFRqoUluAuZle25iKfOHX3iocW+FGICkZMLEXnp1Wl2fgD1ZmeEpqFUohm1m/Nh6/SafPrsoSceHCS/CerfPU7OeVd5QkG+V/wQn/zqpuQWmQQq8JKbIESugVzg0Elnzq1Mf/XcpStbOfSimbJbSpV5x6qv7iTE7iWyPX567fSR2uFiIBgFKa41h8W5QWTe2LrozU5UksLctj0eHl7EuYeXnn705GwkchUJRGRehIM78d02GQJFu35sedCX0g5vtFs3Uik9WG251nZxVs49vPLxR48cmolexiHEbAwmdiNCwYSuB+aDQRpUW2LbeTQuDdC6a8M27KX2yZMrT3/05NHFqifGHMy7y3bg7rd74BUJyQ1wEPihU0u/+Rufv3XzxrPPvNxytykzOo7riQKSQzceONH/1V/9uZ//7MNVgqlCgqPQwR5d7ZykA42FY8dXPuXzve++/ua17a1GzTSQ9fj2zGx17uHTT390ZZ6hZRjCXHZT94oSqSTRU8vV7NMnTqz1b17fubxDpfHZauXUA7Mnj84uDTrNi2rfE9YAELlZpzPIzOyu2glHAaDdNgmDuVtJsT8p9tBupgnOWV97c+v67RYSi7cwp8IZORsqIiNyBzHIvVfF1ZWFgDYjOTIYBoEH2Hixrj/1sbW5B9YuXb5561Y7HFqV4upgfALsAAAey0lEQVRyfXStPn44LgJuDRERhd0w0Gj/Wn0DFokPP3Zkdm31wqVb16+3Gxuj2IvHF3z50PyJowsLNdhaOAHBYAxy79jEhZyhhaEJfOzEA/XCsZXj7ZtXhlvbjTPm59LyUv/jh9OhuUDWmIKl6uJbdz1o9xv99OdIBmcQPOcyjDE5es8+c+Xf/Osv/t4ff9sdbhEuu1BUwI6tyq/92t/5H/77LwxmNoSim5hGiS1wsAYWJ59r97RtwiQPEDZbDSL97e3m/KVrlzfGzWinorw4f/jQ2tKRlcGsNCgKUcesEgzwMaoAlJxD46EuCK2BtBWkOqKUHNiEq5w9hn0P1UfwLl+l7lTAupoYnMwnxOAEB8wIBgY0dMzfxCgOJRCwPS7//o+//+plbevU2Gafe2zc6oirQShunLNSFIE3y3P1b/ytxx8YbLeYSchwH1uKAs5jYneJ5KFtzZib3MYg/STII1j2WDsKczSLROjGrBh3GQ33yS1YtGFJbOylFAlxezv3+qEFBYYD0TQAgGRVikIAWwvAOAEQbUFmRDTOVNegMMrFnBITu0lgJSYfMSlQqwV1RAEhf1Dqwu8lFK3s6h9Mdr6mycPh8Hf/w7U/++rXXnn5wsatoarGxAuLMx/56KO//vcfeeoTH+0P2KlloqIa7q+pYfMufDV0Z+pdToTevdtliymTMMHzGMLKaWOIG5evbm0PKcjcwuyhlcWZCuStkBkqMxMnYgbgZiADuzkJBSgAVx0iVUMLzz3/1u89dxWAU9ctx9ZFtwCVIcVEnHKTK2k+cWblb3/69BwXmkpT3y9QnMgtuKv65MAXKMUQ+PLbN65euXHp4pXhcLy4NHv06Nqp0w9Gk14fag4UETID83212LtnUjYZTeo0LZDuUUNvx4NIzFpKCKEAL725+fxLb37nhrWNuaISPrw8eOzkyqljM6uLPDtJE2BmTujGlRUgmBh7k0PFznQj8/Ov3/rLZ17bGgNgJ+xCsVMPRTIoZZcULfSw9St/88xHHlhIHXPw1O4jKKITBrxz9hSNwwlBzQEIk7kRgZFU3azEGAHrnqWqIvcZzZH/cM5879yu00TdieX82+OvfuvlC1c3ttKMKSqJ0SFleyaM1xbDiSMLjxw/vjDXn+knhrnn7gDJ3JgKeQAFBV/dap555eK3z1+/vmmJKyfAu66Kjt6fnBBLKJLBHFt7ZCX+2t9+bK5SaJiyT903ZZu9AuMPDMW5k0e4m3sIEYDrrteQAnjXpKraRVV7El/3DQLpDuxNtrN71Dnt7gR2LyLx+o5/63uXXrq0TTNL0iAQMchcjfubWm9f09evjr51/sKRw8snjy2tztezvdSLFKWr3XBr4ca2v3zp2oW3b61vjLZHMfb63ox3dxG+Y0uGkiIks8I+OvvwsdmETvBpavdPBZXE3c3e0cTrYKkFe9z7ZgDtRTou0sVTYGairtPKcZ9uv7bbs0f36vWKkBCRwt94+/obb29amDOkQdpRt1zMiFmicu1OJdtwM9/evn7+/OU6NLM1z9WprmJg2djeGRsaCze28jhzSnXPQePtzD9AxN4JUMHJgpoFlHLiRO/MqQVygETZZDpVfL9A8YfK/Xu+sTvUnYgH7Tq9UgxUiJiJ9o59zexdpv4PXEz/Q7/zJMi/V/5DWKwoCxn8yvqN21vjen55o7mdS+MUhVLivhXLpYmRenXIOpe1qDdj7W8MHcMuaTQKh8ajzSqScEVBskclJzGayMD8aKbSeFvmavvE2VOzPYOLuhTKUyjeT1D8UYYid2XWO0CoahlACAJUdz5XVe+j6PTOss2dn/8e/wtOcHKCgd0FWhLnkqoYK82edSSgWBNL2RluCnoM4t2j7wIzMDF7RkpJqCVt2EMUztBShsa9d5rv9wIZRyhltuInHlo7szafoIAwMU/Lp/dXrtjhcM8BEjkR7/7GnZCfSDQrXVC6+yxz74JVzjm/y4jjgUWj31G5ulfhtbmJBCc3+NzC/GCQN0fbqVYrM+7q1kY2IjcFEIMMKAZ3L2rUCRqyB4IhixORFyaXGtYb5ywoKaEtMAJP2p8I5B0ee5SOL8989okH5tjIDZqJK8FUYOp+yhV3I9J3nBvf+avI3gPCDz7rHVd6P+GQ7vLjPUxzmVLbjlIVaudTh2a+P39545pmWmHZNs1wJSdxgRMKIofWx90ImsFBCMTu5gqIuRMVJqj7VmQCoFolbttsHPoFZF4oMAq5y0dW9NMff7DfgxDDq0mjFOzHHWpVa4iIabfrere1AxC3yRCoqxERCeA+lc2597ni1O6Vx01VZdoa9PDK4PSJtbdvv7Hd3CaqgiQRUrfWi8EUDpQq97vRDfJJQxwAJ7dSADDt0b2Zmbl7GyuuyADOGpx4OKrD+Oja3Cc/dubo4V4kODIhdr1q9ONT+QrLXjEIToDAhbrxG+9yFqIg76qkPIXi1A6AZfPAzsyacxCcO324zfbiaxc3GnUL2UQpOAlRiKxEIFMAxBMyDHO4q7szOUi6gQszA5OIiEjJWgxwgbE4qignjq0++bFTJ5ZjTVAbEbPQxFf9BOGpdjtC92QyuLq7mxNXRLzXEGJwOJtZDNOy0G7hbHoVDpS1DtNcB8A9q1Lo7WS8+P2Lf/HKte3tdtSSS82SrGTTEtiaFHbLZtZlf5OmC4t7Q88TNAJONCB3FxTnMlzu54+dXn7izNG15XmQOcygDAGCGYQnHvLH9eoACObu8G6b6LqTorsRd9JVNvmbg6maLvoUigfRCuBukaybNHQISNqCb1/FhbeuvX7xyu1hcY4Gdii7oZ1grOPa2yuOsscuImVmEWGeANJFSpt7ESePzX/0oUOPHJ9bCLCxSaLJ04nM4NDABOiP2zZtcALRrveDkXf9eAz33WZ2R3ffuYOnkdkUigcVihNuJmInkBvMTEIAdDzWyze2Xr10/fVLt65vjMeZnALiipmpT4BEECcQkWlmhhCbFy/FvDBIRNZo8+jxheMnFh48vrI80/MMslwlMe2GqbphFGXGbs/Gj40Vd3fk3eZWAOxwgjZZ4ZRCj4jNXAhgnxKTT6F4QM2sdKXmO84vzVQVyhIUYQRsDnH1tl6+ur1+c+fq5k5btG3boq5OADmYiByFydnNNAv7wsxg7dDy4tLCgwM6dqzuVxC3ilgAuJbShtibxJdku2UemOHH7r4wuJtBSZggrWJnJ4/H+crNtwDqV7OLc/Nzs706OdCojwItTRd9CsWDaG6FmM3YgS6oc1MRgjPcHS2xOqCIBdEc28NmOBzf3tze3t4Zjppxa20u7h5CSDH0qjjXr2b79cJMb25m0KsDkOGwbBwYKMWNZNA6ElpM+JCdmQAyl7vP3v8nPkALCm48HOLixdFzz77xta999+WXL26Ox6rK5IeWZp742KnPfe7JJ548sbiAKenxfQPF/d7fdAX3csuuUKPwyXmFuxM6SXUBMbqJd+J7es3adpxSXUrpJuO6G0lz4TQCBlfX23//u//fl77059/7/puqPXjlRGaILI5GpF1aks9/4VP/5H/6jSNrNbRJQeAhqyGUCIYyhKdQnELxvvKiuz/o7q++FykCtHu0QPfa/ZgZM+9+L8zcNLmqKgf+4s9f/Z1/95df+tIzbRYSdncRGRdNIbqT5TZGbcvG4kL6zM89/c//l7/36OklK2PhSkFgE3QUHDSF4tTuKyjewYJ1Jzi7hI/fy52rwyFgDgXEjNXxl3/xvd/+7X/7nReuq866REfLoqPRTkyzWpyZGRIYuYxyO5qbm/mH/+gX/tk//a9nei0xqzOI2Z2MPmxzkvdDDGB+96+p3eH9/A4jczIXQHbnKmkXtPd255109kABZFdnPPvsa//it7/0zLcuD0dUyJuyM25HTesisyxq3pg3ilGrY4mx6s+2GV/8D197/ttvEoeOCoK6KZcP3/LeD1BkuvvX1Cb+jkB+59xTpz6/lzbu2Xvkk83MAaF46XLzf//Ol7/5rdchs73ZefVGQun1Q0dAmXOOSVjgUBY31zY3xfXq9Z2vff2F3JKbMYi6SJqnUJza/ZcrdkCkjjT7na8fQOs7dm8DVHIIizup4StffeZP/vTbEoMWz1lFghlKaYXdMRZUXoQ9Re7BI5xiSMKBJL743ZdGQ3MLzKyWzcqHsBJwH3Q62D7BCk8LNz+MyTsulO8DvHun2+Jda1vnwpzfurjzR1/6+u1bxKBYzbTZ3YkleMlGFCgyWZtbIzBzzpmCpBRKaYH2xq3b4zHmZgWA+Rhg/vDpbd4XUJw69HcPbOgHSzh7Y8E/oJfUjW5MAtp7ZCKCrt8bePXV17/z/CupWrSyAyb1JqVInEtuhBK5qZYqJVUDUa9XmVnRhpgMhZnbVk0FZFGEwK4futmpAwTFAqCUwAEZLY09AahHY2xsb9za2NraHhlh0Kvn+tWh+cHcTM+sGwjK7i1RBQ/FXKQlfHjbi98l/iS6x0PABMsNYhyRsJfei8/faltp/EagGS2WQoTBLQpFB5SgYDBy1iqEUgxACr1SWuZBXdezixGh02CsOkmqqVf8wEzVquDIO86RY31jnF9/4+qlizvfvrzpYAOrw8pOL/Hq0tzq0uJTpwdHVjkgmoYkRGQuVryK07j1/bKY2MGu1DTtGxfealujmN7FhZoqCyG4FzOzZjyKKQjpgw8eY7mT3sHNPnTS4wcIikIOtEZjCr31HXzre1dffv3WrdtWYgV0ur8AyXBc3rq88faVW1fezI+cWn38oSNHlmq27GU7xjSdwHz/ohgvgQIhOJGBb9++nWLfpDIb3z3RKBZTKKVt8pgppDqxgsh7yZ9++iMp0Z3SXR/C7OMA3biBpZQcQr2Z+ZkX3/7mS1c3G5IwMN+aMOcaE7uwO3l2u7AjV1/cWN8Kn/zo6omVVPE8ObtDpl7x/clRidUg3MnUaFVHdy3NvjqZgUIpxQkp1OOm2DiLkKGceXjt6Y+fSwEllxgjyEspQdIUih+YuYJQKXqvvrn9nfM3NjNbJerjJBUzK9wMZgVOTg5CFet2p33l/CXk9fTxB06uLnkeCRO4nuLk/Viv3dTTDZHpgQcOqQ6F+/sdXzKHNrcSxZxFqsBSynavol/+5U8fPVoRTETMJi2zH8LrebDCOQ69W2N89/zVm9uKuiaMYa2PqgIFwESxk+wzLcU3SWLdK8ovvt2it4lq/th8L057U9+33N4tMhzOjF6fHz17YjDrOzvjfQPaUlJKTj4cDvu9OUErPPr85z7zy7/06SBQa4VTLibsIvIhrKAeoJicGAasbwwv37iVydULuScIxzqknsQaHLMiK4zqUM3NRetLluCNhZdfX3/5/FUHSNspSN7XVQPBQchnHzv6xBOn3Lf2feSE3UNTErMh+eYnPnHiH/+Pnz96pA+0TA5gb8LjwxjwH5y3YmiL604z2smNCdy94prbSDQiHzJGgUcx5hBawrbbtul2KTzKgfqDTQsvvbF55UYuPIXi+2RCUbUjxnCgfeyxo1/4ws8tL83s+3ihph3n3KSKYcOnnnrkf/6nv/7Ux4+bKpMRoWmajvXD3WnabfMB2thTj+HbmyOrSJKoabPp9Tws763mnf0kDVd98yqMfKzziFdvbj57YfPBpeU7C3HvJDZ3++PUfqpd3N0oG8BczCoh/Orf+YXhzWv/17/5+tX1TZFZ515uVRLBx6A2O6q6zqPhbMIv/Ve/+Gt//xfOPb4GjER6HY9sVQFA4Nh52ykUPzCrGKVYipWZcQhOHik1ZLRvGYC9uBs4BBS06uu3Njd2ZuYGaYqT9weMTAFkHaOcFp+Zpd/4zV+t55b/8A+/+sILF8ZtiqkPsGkboxTbnJ/tnfvUyS/8rU/+F597em21L7CDJv07hWK3y6qDZmbmGKRa1Di7GqnsH9FOtATB2dW5unZr49bO8hSK74+5EyAELqXEGEWg6nPz8o9+83NPP/Wx5557/bnnXnnj9WtNaynGmZmZh88sP/X02Sc+dnJpRaKAYWZMYJp2MB40KJpmkXqm31ua6a9vtxxqzYb9ieLNjDiCKRcTJenV2+Od7SZPF/X9gmJH9S0icXeGuKgqkZ09O3vu7Cf+7n/z5GiYzQxkVRUHdRVi1wBbCG5u5hYkTB3jgYOiSDDHoJaTRxc2vveG1TVTPVbb340SgG7YuyP/NLOOeHdq70cUI2aKrhNYdU83WuBsRYvroJbZvgBWtBUhYEwQcy/ZRKKIsJjDphn85HoeoPdCrKr9hMdOrsxXrbfbRO+2Usysqh1vihA0N1WQSqbhzvsVxRQVIdUMQISIRNVVvc0tB4lR3HPOTSlFKBACvAIiU0qpJpKSueTgOs0mDh4UzbqB9HJiJZ09tVxxsebddDadpLgRO8ECA1qW52bm6inr+/tkWggeQkjurqpEExrymIJ6MSsiFGMMITmCFlYvxRpF4xgTtyHmEI1lGsUcSK/IgS0P+8mfPPfwyuK8u09K23fPVSbjsaoZbpF8eX5utj/dZd8nS1Wlxax0p0RG5O5qVtyZKRCzwc0LYMwgBnEEV+QVUJsl92nj/kGFojsEAPdi0dWF3s+dO3Z0pUe+LcTkYIZCs2UARCSQYG0RGZcq1rNDaxb7+MiJGa7TXc8P7+Ghou9jH5x3auHQ0pptAyO3YsUBQ96AjwErQNmd8DfNKFvwMVDQjeEDcHUrP/7WCYkskQGIRICZA3Ng6oitmBGZ0q7YJgQIQPd/ZdJoytMJ8INYtiHqyPwmq/Xo6Tnnk8+9+Nr52+OSc5KqCqG0YIOAYJalqZNwo741Wqpx7uTaqSMzfcnvdUXuwLUKhKTeUhD4TJtBAR4wznSL52/c9BsbO8NRLmpBeH7Qn5utHuzxbF8M8OIxkABOPO1/+ODv/4PT8udA0TYKA97mHGO/Ba6ub371ZVx4662N7TFYHCQpOHQ8HvYHs1qKN6O1ud7ZU6tPnjmytgDPwyr2P2wFFGAMB7wHohFweX3z0tWNFy9c2toZD1s1Z3cyK70Y+r362NLg+OHl08cOrcyngJLbJoYAItA0tp9CcReKXZjEDLhPjqqItnN47cLb5y/duHx9dH2rbQwIFQWh4bhO5YHV3rnTKw+fWJ7vV6QOAB+yUbfG0F20xpsb2+WVN0YvvLa+fntLPYAELGBxJ3eHFrg58lzyMyeWPnrm8AOrg0rQRYrT1G0Kxd293axrzO8kAQGU0hJMQhhrGGasb5b1zfbm1minaSWG1cHi3ICPLvN8D4nM4bmwhA/f3q4jILqEt2/f+saLb7x4Yfv2KJaYogkJu6GYAiwiDDczCKgM+zw8sdz77JMPP3zikOZhigJMi89TKE7KIUrU0e/BDESTeXAqDSQ6uDWIAEBbWhFyxEhghzdjYqcoTnAQf8i6N0bNUKr+hevtN1648uLr17eshN7AqJJ2Z7LG7Hus9wyMLAShinLI2+dOr33246dXZlGRybSCMi3b7G4L0pbMkBCYd2cwzE2FiYzAtBtK1ZQYaJEdAURc1V3CZPAPoXBmVVVbBd99+eL3z9/O6PdqYzR5vB1T38wAI3Z31dJNH0mPs2U4p1bT62+uP7Ayd+zcIdExpD/FwwdoB+i+zZ5jiMzIObtaV2FnsoTISgGIMIICRqyAJiB4gbWg4t66tsEp6Hvu5A/aYcaOyXdeufHcy1d3yL2fhg1bG+rAuQRDdAumwS2KVEF6wjWTkYRM0avF22N5/eKN20OHTBtBp15x1xJFAMTMu0RFkwI7QUQAvCOUMfmP7D2GdtX46F42vhUgAJbzTpAKSEQwtJsb4xs3N24Pm+3ROISwND+3OKiXl+aZRAJMxyyAszsTBVPncO/PCe7EPWX91vkrY5bKYqtWhRwK2hjZ851c4D6Z8TWmWc87UXIxkn66eGtn2AB9mYJhCsUDHTLknGOsHbSx6S99d/3Zb33/mW++ceHixY2dcSfs0IvhxJHVj549+/N/88xDZ9aOHq3NiqqGIG07StV7O3ng8Lcu37q1OWqzRjeHMsEJavtqouXcMLMSFQcZm1lTshZImB5mTKF4IE3VRYxDbJW/8703f/+Lf/zlL/31xTdvx3Q4OySk7K6q4n7p6rVvv/j9f/fF7U/+jXO/8nc/+4uf+0QV2VFS1XO1944uyeHuvr5ZxhpDFDEqnh0ZCNl8PxJKYjiLOhxSTMnBMJq20U+heHB9Iot6Wzz9wR9+9//43/7gxe+er+r5VC222hrcFeokUlVBSm5atbI9+LOvXnrhhd97/fzwv/v1nzu0SKPRTq8avNdZ6+1tzZkQJsUZYaMgTPuKjTiZuRhHOIuVQc11JVONvCkUD7JXLB74i7//p//rb3/xjfMjpThsDS6RSdXcNAKey7gxhscYlVRRXb6y9a/+z/+32O1/8o9/aaYHYAT03odKEnXfmalTKCTaTzrdzKx7mFtEe3hhdqaOhnbqFj/4dGhqdzUJ4flnbv4///p7r30fJIssMecmSGrblllSCEIkRCmElCoiCtIfDofM6eYN/M6/ffb3f/cVt0HO7+EV7gZT5gecEtiNmUUCwNDuWGe/JSchJlNvNhZieXBtdpAwlYGfQvHgWlu2/uiPvvz88+edUtHWoTEGs7EkMVLVVgQhEKCtNq22zU7b78+EwFXVe/vK+h/+0Z9cvHgzxvIeQhFERIcXq14oWhotri7w4P6D3Hg/HHgHImJvB6GcPDx76vBSAISm8dEUigfVXn/Vv/H1iyVLqpx4DBRTZZRilVNdPDWZm8yKiqTv1E+pCFnT5JJhGl763oUXnr+oZfCevkkCPXh86dDiTJUCMxPEzF2N9pWlhJm5FkJZXuideXBtbakuufGpW5xC8cDaG2+/9tob617VrZqg5y33qoXsCFTIMpMyG7MRClkWZKVQMvUYItsc+eb/397Z9NZ1VWH4fdfa+5xzr5PU9o2DHZs6sZIGWlWkBSoQLVBERTuoVAoS/L6OWnXUEZ0jVShInUQFWqQKBaJaSqgTx4597957LQY3RgwwA4JbF61H5xeco+fsj/V1P9386FaBn4yB//I4XnxqbXU8mlqFuKf+MEnmmOjgGa7zCcROmrARooOWuj5O33/myStbk8YiORERV4xrm9PK9va2me3v7/ajzrx1vRxO91InflxCD5VkaQ2ESG5md+/erXWGdLJp1n2qWxfHO/tn68f7d3b3ivUibLPDhhmhIkKqm8NMQZI627m8sfz01ZWnNpcGgc4lpMV/OVQ8pWTJSZA7FXqrrc9S24Hi2BGO1UzEc981pFqTsM2bvpz8mbYM/eiZaxtpOPPHTz//2539w2oQOns3Pqo0c0tsmdYl+d6zW5vri+ur3UBDa7UhZXE2IkL8oeKpZLK4Yq2O+oVpqWxSSuu64T9uGrW5wawazE1S+9rqpO9PPLczeZGm51O3eGX50nL+5NbtW9v3/n7v4GA6MnirLqg5+2Rx2FqfbKxONpaX+g7KIjAIIQpqM0uxKIaKp5PLm19fW1v59K93BGNJuZZ9zbmZyzE3Ii7uBjeKMCsWFnj16kafTlzFms/BYRWacGH5zBPL33h6ht29truHg9nUzIZRfuJsf27AOFkSH0vxeV69KtgcDVCPvsCh4qnl0qXll354/eO33iVFZSGJNoO5ivx7FQXurXX9eFYOStm9em3r+rcuEyd+BmM9SGrMBhBF1dNCzpNF+BLdR/NovwDijWhwA0jJcIG5sTVvlJjt8+UTm5Jj6Yby8k+evf7cZt/Nmh1QCtlEjn1jKqZkK+ZWVy4Mr736nUtPLuHkYwQpjcC+oXMMnkeeMggVTZQsJODmMIAKds6hmjgAAkJhn6VXcD7eMAgVTye73/7u5pu/fHV1bUm01TYVdfDYa5jWSkqpTKfnl8+99rMf/fwXr5AztBNvuctSaElab00dhTygz7xNvYKGDGR3ZeO8uJomzIA4KnBUNQWjP4zv/eXCiO0eq5Y9VBnv3Mdv3r/x9jvv/+mTbcdgLiQAErlWIz13NC9mM9ooia9M8htvvvjrX718cXUEBz1+d0Go+Hi4zQ5n02FYqJAbv//ze+/99oMP/nD79n2VgdCuG0iptZhV81nuJKXZ889de/31H//0lefPjgE3pVmrokO8zCBUfAwVK5gA1GrN2T/YxYcf/uXG7z66efP2Z59tP3iwTyhoqly7eOHKla0fvLT+wgvfPH9hDJ8mJpiDTcW/gMqMIFT8/+bQ3AGQCrA2uqkI73z+cGfn3u79vel0KiJnzo4nk8XzK0usGEYAzL0K03xj+s82dkEQKv6XmO2J9HBxUwrA6l6ACo7MQdLMSAqlWXFY5qiWpqpU1HZoZl0etwqNgFEQKj4OrUIVOGrK+mhONQ1AKWU+wAzzSlyvSZPZTGTwJtWmOQMwh0Y2WRAq/g/WxWaFR33majOAqska5xLOB62mlI46mlspTVVFBLDaCkmVFHkUQaj4uCoe7VRhcBUFUB2Z89GOj3qfkjqf9GgO0IkG11apOl9Ia6gYhIpB8JUhws9BECoGQRAqBkGoGARBqBgEoWIQBKFiEISKQRCEikHwleAfCtejhoL/38MAAAAASUVORK5CYII="
},
"$:/ipfs/image/tiddlywiki": {
"title": "$:/ipfs/image/tiddlywiki",
"_canonical_uri": "/ipfs/bafkreihzzc42nwumjeaz4d6kxsbxa6vy5llnsvqtz3xjjwnjrhwkjy5loq",
"modified": "20200528080350311",
"tags": "$:/ipfs/documentation $:/isAttachment $:/isIpfs",
"type": "image/svg+xml"
},
"$:/ipfs/saver/api": {
"title": "$:/ipfs/saver/api",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "$:/ipfs/saver/api/https/ipfs.infura.io/5001"
},
"$:/ipfs/saver/ens/domain": {
"title": "$:/ipfs/saver/ens/domain",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": ""
},
"$:/ipfs/saver/export": {
"title": "$:/ipfs/saver/export",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "json"
},
"$:/ipfs/saver/gateway": {
"title": "$:/ipfs/saver/gateway",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "$:/ipfs/saver/gateway/https/ipfs.infura.io"
},
"$:/ipfs/saver/ipns/key": {
"title": "$:/ipfs/saver/ipns/key",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": ""
},
"$:/ipfs/saver/ipns/name": {
"title": "$:/ipfs/saver/ipns/name",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": ""
},
"$:/ipfs/saver/policy": {
"title": "$:/ipfs/saver/policy",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "gateway"
},
"$:/config/PreferredSaver": {
"title": "$:/config/PreferredSaver",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "$:/plugins/ipfs/ipfs-saver.js"
},
"$:/ipfs/saver/protocol": {
"title": "$:/ipfs/saver/protocol",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "ipfs"
},
"$:/ipfs/saver/provider": {
"title": "$:/ipfs/saver/provider",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "http"
},
"$:/ipfs/saver/unpin": {
"title": "$:/ipfs/saver/unpin",
"modified": "20200528094915385",
"tags": "bluelightav.eth",
"text": "no"
},
"$:/ipfs/saver/verbose": {
"title": "$:/ipfs/saver/verbose",
"modified": "20200528094915385",
"tags": "bluelightav.eth",
"text": "yes"
},
"$:/plugins/ipfs/modules/parsers/audioparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/audioparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/audioparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n var name = 'ipfs-audioparser'\n\n var AudioParser = function (type, text, options) {\n var self = this\n var value = 'data:' + type + ';base64,'\n var element = {\n type: 'element',\n tag: 'audio',\n attributes: {\n controls: { type: 'string', value: 'controls' },\n style: { type: 'string', value: 'width: 100%; object-fit: contain' }\n }\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + loaded.data\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n element.attributes.src = { type: 'string', value: value + text }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n AudioParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['audio/ogg'] = AudioParser\n exports['audio/mpeg'] = AudioParser\n exports['audio/mp3'] = AudioParser\n exports['audio/mp4'] = AudioParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/binaryparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/binaryparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe binary parser parses a binary tiddler into a warning message and download link\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-binaryparser'\n\n var BINARY_WARNING_MESSAGE = '$:/core/ui/BinaryWarning'\n var EXPORT_BUTTON_IMAGE = '$:/core/images/export-button'\n\n var BinaryParser = function (type, text, options) {\n var self = this\n // Transclude the binary data tiddler warning message\n var warn = {\n type: 'element',\n tag: 'p',\n children: [\n {\n type: 'transclude',\n attributes: {\n tiddler: { type: 'string', value: BINARY_WARNING_MESSAGE }\n }\n }\n ]\n }\n // Create download link based on binary tiddler title\n var link = {\n type: 'element',\n tag: 'a',\n attributes: {\n title: { type: 'indirect', textReference: '!!title' },\n download: { type: 'indirect', textReference: '!!title' }\n },\n children: [\n {\n type: 'transclude',\n attributes: {\n tiddler: { type: 'string', value: EXPORT_BUTTON_IMAGE }\n }\n }\n ]\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n link.attributes.href = {\n type: 'string',\n value: url\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(options.tiddler)\n $tw.rootWidget.refresh(parsedTiddler)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n link.attributes.href = {\n type: 'string',\n value: 'data:' + type + ';base64,' + text\n }\n }\n }\n // Combine warning message and download link in a div\n var element = {\n type: 'element',\n tag: 'div',\n attributes: {\n class: { type: 'string', value: 'tc-binary-warning' }\n },\n children: [warn, link]\n }\n this.tree = [element]\n }\n\n BinaryParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['application/octet-stream'] = BinaryParser\n})()\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/htmlparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/htmlparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-binaryparser'\n\n var HtmlParser = function (type, text, options) {\n var self = this\n var value = 'data:text/html;charset=utf-8,'\n var src\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n src = url\n var parsedTiddler = $tw.utils.getChangedTiddler(options.tiddler)\n $tw.rootWidget.refresh(parsedTiddler)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n src = value + encodeURIComponent(text)\n }\n }\n this.tree = [\n {\n type: 'element',\n tag: 'iframe',\n attributes: {\n src: { type: 'string', value: src },\n sandbox: { type: 'string', value: '' }\n }\n }\n ]\n }\n\n HtmlParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['text/html'] = HtmlParser\n})()\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/imageparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/imageparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/imageparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n var name = 'ipfs-imageparser'\n\n var ImageParser = function (type, text, options) {\n var self = this\n var value = 'data:' + type + ';base64,'\n var element = {\n type: 'element',\n tag: 'img',\n attributes: {}\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + loaded.data\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n element.attributes.src = { type: 'string', value: value + text }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n ImageParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['image/jpg'] = ImageParser\n exports['image/jpeg'] = ImageParser\n exports['image/png'] = ImageParser\n exports['image/gif'] = ImageParser\n exports['image/webp'] = ImageParser\n exports['image/heic'] = ImageParser\n exports['image/heif'] = ImageParser\n exports['image/x-icon'] = ImageParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/pdfparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/pdfparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/pdfparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-pdfparser'\n\n var PdfParser = function (type, text, options) {\n var self = this\n var value = 'data:application/pdf;base64,'\n var element = {\n type: 'element',\n tag: 'embed',\n attributes: {}\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + loaded.data\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n element.attributes.src = { type: 'string', value: value + text }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n PdfParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['application/pdf'] = PdfParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/svgparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/svgparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/svgparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-svgparser'\n\n var SvgParser = function (type, text, options) {\n var self = this\n var value = 'data:image/svg+xml,'\n var element = {\n type: 'element',\n tag: 'img',\n attributes: {}\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToUtf8(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + encodeURIComponent(loaded.data)\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else {\n element.attributes.src = {\n type: 'string',\n value: value + encodeURIComponent(text)\n }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n SvgParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['image/svg+xml'] = SvgParser\n exports['.svg'] = SvgParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/videoparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/videoparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/videoparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-videoparser'\n\n var VideoParser = function (type, text, options) {\n var self = this\n var value = 'data:' + type + ';base64,'\n var element = {\n type: 'element',\n tag: 'video',\n attributes: {\n controls: { type: 'string', value: 'controls' },\n style: { type: 'string', value: 'width: 100%; object-fit: contain' }\n }\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + loaded.data\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n element.attributes.src = { type: 'string', value: value + text }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n VideoParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['video/ogg'] = VideoParser\n exports['video/webm'] = VideoParser\n exports['video/mp4'] = VideoParser\n exports['video/quicktime'] = VideoParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/wikiparser/wikiparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/wikiparser/wikiparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nwikiparser\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2020, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const IpfsImport = require('$:/plugins/ipfs/ipfs-import.js').IpfsImport\n\n var name = 'ipfs-wikiparser'\n\n var WikiParser = function (type, text, options) {\n var self = this\n this.wiki = options.wiki\n // Check for an externally linked tiddler\n if (\n $tw.browser &&\n (text || '') === '' &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var importUri = options.tiddler.fields._import_uri\n importUri =\n importUri === undefined || importUri == null || importUri.trim() === ''\n ? null\n : importUri.trim()\n if (canonicalUri !== null || importUri !== null) {\n var ipfsImport = new IpfsImport()\n ipfsImport\n .import(canonicalUri, importUri, options.tiddler)\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n text = $tw.language.getRawString('LazyLoadingWarning')\n }\n }\n // Initialise the classes if we don't have them already\n if (!this.pragmaRuleClasses) {\n WikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\n 'wikirule',\n 'pragma',\n $tw.WikiRuleBase\n )\n this.setupRules(\n WikiParser.prototype.pragmaRuleClasses,\n '$:/config/WikiParserRules/Pragmas/'\n )\n }\n if (!this.blockRuleClasses) {\n WikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\n 'wikirule',\n 'block',\n $tw.WikiRuleBase\n )\n this.setupRules(\n WikiParser.prototype.blockRuleClasses,\n '$:/config/WikiParserRules/Block/'\n )\n }\n if (!this.inlineRuleClasses) {\n WikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\n 'wikirule',\n 'inline',\n $tw.WikiRuleBase\n )\n this.setupRules(\n WikiParser.prototype.inlineRuleClasses,\n '$:/config/WikiParserRules/Inline/'\n )\n }\n // Save the parse text\n this.type = type || 'text/vnd.tiddlywiki'\n this.source = text || ''\n this.sourceLength = this.source.length\n // Flag for ignoring whitespace\n this.configTrimWhiteSpace = false\n // Set current parse position\n this.pos = 0\n // Instantiate the pragma parse rules\n this.pragmaRules = this.instantiateRules(\n this.pragmaRuleClasses,\n 'pragma',\n 0\n )\n // Instantiate the parser block and inline rules\n this.blockRules = this.instantiateRules(this.blockRuleClasses, 'block', 0)\n this.inlineRules = this.instantiateRules(\n this.inlineRuleClasses,\n 'inline',\n 0\n )\n // Parse any pragmas\n this.tree = []\n var topBranch = this.parsePragmas()\n // Parse the text into inline runs or blocks\n if (options.parseAsInline) {\n topBranch.push.apply(topBranch, this.parseInlineRun())\n } else {\n topBranch.push.apply(topBranch, this.parseBlocks())\n }\n // Return the parsed tree\n }\n\n WikiParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n /*\n */\n WikiParser.prototype.setupRules = function (proto, configPrefix) {\n var self = this\n if (!$tw.safemode) {\n $tw.utils.each(proto, function (object, name) {\n if (\n self.wiki.getTiddlerText(configPrefix + name, 'enable') !== 'enable'\n ) {\n delete proto[name]\n }\n })\n }\n }\n\n /*\nInstantiate an array of parse rules\n*/\n WikiParser.prototype.instantiateRules = function (classes, type, startPos) {\n var rulesInfo = []\n var self = this\n $tw.utils.each(classes, function (RuleClass) {\n // Instantiate the rule\n var rule = new RuleClass(self)\n rule.is = {}\n rule.is[type] = true\n rule.init(self)\n var matchIndex = rule.findNextMatch(startPos)\n if (matchIndex !== undefined) {\n rulesInfo.push({\n rule: rule,\n matchIndex: matchIndex\n })\n }\n })\n return rulesInfo\n }\n\n /*\nSkip any whitespace at the current position. Options are:\n treatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\n WikiParser.prototype.skipWhitespace = function (options) {\n options = options || {}\n var whitespaceRegExp = options.treatNewlinesAsNonWhitespace\n ? /([^\\S\\n]+)/gm\n : /(\\s+)/gm\n whitespaceRegExp.lastIndex = this.pos\n var whitespaceMatch = whitespaceRegExp.exec(this.source)\n if (whitespaceMatch && whitespaceMatch.index === this.pos) {\n this.pos = whitespaceRegExp.lastIndex\n }\n }\n\n /*\nGet the next match out of an array of parse rule instances\n*/\n WikiParser.prototype.findNextMatch = function (rules, startPos) {\n // Find the best matching rule by finding the closest match position\n var matchingRule\n var matchingRulePos = this.sourceLength\n // Step through each rule\n for (var t = 0; t < rules.length; t++) {\n var ruleInfo = rules[t]\n // Ask the rule to get the next match if we've moved past the current one\n if (ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n ruleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos)\n }\n // Adopt this match if it's closer than the current best match\n if (\n ruleInfo.matchIndex !== undefined &&\n ruleInfo.matchIndex <= matchingRulePos\n ) {\n matchingRule = ruleInfo\n matchingRulePos = ruleInfo.matchIndex\n }\n }\n return matchingRule\n }\n\n /*\nParse any pragmas at the beginning of a block of parse text\n*/\n WikiParser.prototype.parsePragmas = function () {\n var currentTreeBranch = this.tree\n while (true) {\n // Skip whitespace\n this.skipWhitespace()\n // Check for the end of the text\n if (this.pos >= this.sourceLength) {\n break\n }\n // Check if we've arrived at a pragma rule match\n var nextMatch = this.findNextMatch(this.pragmaRules, this.pos)\n // If not, just exit\n if (!nextMatch || nextMatch.matchIndex !== this.pos) {\n break\n }\n // Process the pragma rule\n var subTree = nextMatch.rule.parse()\n if (subTree.length > 0) {\n // Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n currentTreeBranch.push.apply(currentTreeBranch, subTree)\n subTree[0].children = []\n currentTreeBranch = subTree[0].children\n }\n }\n return currentTreeBranch\n }\n\n /*\nParse a block from the current position\n terminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\n WikiParser.prototype.parseBlock = function (terminatorRegExpString) {\n var terminatorRegExp = terminatorRegExpString\n ? new RegExp('(' + terminatorRegExpString + '|\\\\r?\\\\n\\\\r?\\\\n)', 'gm')\n : /(\\r?\\n\\r?\\n)/gm\n this.skipWhitespace()\n if (this.pos >= this.sourceLength) {\n return []\n }\n // Look for a block rule that applies at the current position\n var nextMatch = this.findNextMatch(this.blockRules, this.pos)\n if (nextMatch && nextMatch.matchIndex === this.pos) {\n return nextMatch.rule.parse()\n }\n // Treat it as a paragraph if we didn't find a block rule\n return [\n {\n type: 'element',\n tag: 'p',\n children: this.parseInlineRun(terminatorRegExp)\n }\n ]\n }\n\n /*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n terminatorRegExpString: terminating regular expression\n*/\n WikiParser.prototype.parseBlocks = function (terminatorRegExpString) {\n if (terminatorRegExpString) {\n return this.parseBlocksTerminated(terminatorRegExpString)\n } else {\n return this.parseBlocksUnterminated()\n }\n }\n\n /*\nParse a block from the current position to the end of the text\n*/\n WikiParser.prototype.parseBlocksUnterminated = function () {\n var tree = []\n while (this.pos < this.sourceLength) {\n tree.push.apply(tree, this.parseBlock())\n }\n return tree\n }\n\n /*\nParse blocks of text until a terminating regexp is encountered\n*/\n WikiParser.prototype.parseBlocksTerminated = function (\n terminatorRegExpString\n ) {\n var terminatorRegExp = new RegExp('(' + terminatorRegExpString + ')', 'gm')\n var tree = []\n // Skip any whitespace\n this.skipWhitespace()\n // Check if we've got the end marker\n terminatorRegExp.lastIndex = this.pos\n var match = terminatorRegExp.exec(this.source)\n // Parse the text into blocks\n while (\n this.pos < this.sourceLength &&\n !(match && match.index === this.pos)\n ) {\n var blocks = this.parseBlock(terminatorRegExpString)\n tree.push.apply(tree, blocks)\n // Skip any whitespace\n this.skipWhitespace()\n // Check if we've got the end marker\n terminatorRegExp.lastIndex = this.pos\n match = terminatorRegExp.exec(this.source)\n }\n if (match && match.index === this.pos) {\n this.pos = match.index + match[0].length\n }\n return tree\n }\n\n /*\nParse a run of text at the current position\n terminatorRegExp: a regexp at which to stop the run\n options: see below\nOptions available:\n eatTerminator: move the parse position past any encountered terminator (default false)\n*/\n WikiParser.prototype.parseInlineRun = function (terminatorRegExp, options) {\n if (terminatorRegExp) {\n return this.parseInlineRunTerminated(terminatorRegExp, options)\n } else {\n return this.parseInlineRunUnterminated(options)\n }\n }\n\n WikiParser.prototype.parseInlineRunUnterminated = function (options) {\n var tree = []\n // Find the next occurrence of an inline rule\n var nextMatch = this.findNextMatch(this.inlineRules, this.pos)\n // Loop around the matches until we've reached the end of the text\n while (this.pos < this.sourceLength && nextMatch) {\n // Process the text preceding the run rule\n if (nextMatch.matchIndex > this.pos) {\n this.pushTextWidget(\n tree,\n this.source.substring(this.pos, nextMatch.matchIndex)\n )\n this.pos = nextMatch.matchIndex\n }\n // Process the run rule\n tree.push.apply(tree, nextMatch.rule.parse())\n // Look for the next run rule\n nextMatch = this.findNextMatch(this.inlineRules, this.pos)\n }\n // Process the remaining text\n if (this.pos < this.sourceLength) {\n this.pushTextWidget(tree, this.source.substr(this.pos))\n }\n this.pos = this.sourceLength\n return tree\n }\n\n WikiParser.prototype.parseInlineRunTerminated = function (\n terminatorRegExp,\n options\n ) {\n options = options || {}\n var tree = []\n // Find the next occurrence of the terminator\n terminatorRegExp.lastIndex = this.pos\n var terminatorMatch = terminatorRegExp.exec(this.source)\n // Find the next occurrence of a inlinerule\n var inlineRuleMatch = this.findNextMatch(this.inlineRules, this.pos)\n // Loop around until we've reached the end of the text\n while (\n this.pos < this.sourceLength &&\n (terminatorMatch || inlineRuleMatch)\n ) {\n // Return if we've found the terminator, and it precedes any inline rule match\n if (terminatorMatch) {\n if (\n !inlineRuleMatch ||\n inlineRuleMatch.matchIndex >= terminatorMatch.index\n ) {\n if (terminatorMatch.index > this.pos) {\n this.pushTextWidget(\n tree,\n this.source.substring(this.pos, terminatorMatch.index)\n )\n }\n this.pos = terminatorMatch.index\n if (options.eatTerminator) {\n this.pos += terminatorMatch[0].length\n }\n return tree\n }\n }\n // Process any inline rule, along with the text preceding it\n if (inlineRuleMatch) {\n // Preceding text\n if (inlineRuleMatch.matchIndex > this.pos) {\n this.pushTextWidget(\n tree,\n this.source.substring(this.pos, inlineRuleMatch.matchIndex)\n )\n this.pos = inlineRuleMatch.matchIndex\n }\n // Process the inline rule\n tree.push.apply(tree, inlineRuleMatch.rule.parse())\n // Look for the next inline rule\n inlineRuleMatch = this.findNextMatch(this.inlineRules, this.pos)\n // Look for the next terminator match\n terminatorRegExp.lastIndex = this.pos\n terminatorMatch = terminatorRegExp.exec(this.source)\n }\n }\n // Process the remaining text\n if (this.pos < this.sourceLength) {\n this.pushTextWidget(tree, this.source.substr(this.pos))\n }\n this.pos = this.sourceLength\n return tree\n }\n\n /*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\n WikiParser.prototype.pushTextWidget = function (array, text) {\n if (this.configTrimWhiteSpace) {\n text = $tw.utils.trim(text)\n }\n if (text) {\n array.push({ type: 'text', text: text })\n }\n }\n\n /*\nParse zero or more class specifiers `.classname`\n*/\n /*eslint no-useless-escape: \"off\"*/\n WikiParser.prototype.parseClasses = function () {\n var classRegExp = /\\.([^\\s\\.]+)/gm\n var classNames = []\n classRegExp.lastIndex = this.pos\n var match = classRegExp.exec(this.source)\n while (match && match.index === this.pos) {\n this.pos = match.index + match[0].length\n classNames.push(match[1])\n match = classRegExp.exec(this.source)\n }\n return classNames\n }\n\n /*\nAmend the rules used by this instance of the parser\n type: `only` keeps just the named rules, `except` keeps all but the named rules\n names: array of rule names\n*/\n WikiParser.prototype.amendRules = function (type, names) {\n names = names || []\n // Define the filter function\n var keepFilter\n if (type === 'only') {\n keepFilter = function (name) {\n return names.indexOf(name) !== -1\n }\n } else if (type === 'except') {\n keepFilter = function (name) {\n return names.indexOf(name) === -1\n }\n } else {\n return\n }\n // Define a function to process each of our rule arrays\n var processRuleArray = function (ruleArray) {\n for (var t = ruleArray.length - 1; t >= 0; t--) {\n if (!keepFilter(ruleArray[t].rule.name)) {\n ruleArray.splice(t, 1)\n }\n }\n }\n // Process each rule array\n processRuleArray(this.pragmaRules)\n processRuleArray(this.blockRules)\n processRuleArray(this.inlineRules)\n }\n\n exports['text/vnd.tiddlywiki'] = WikiParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/core/modules/saver-handler.js": {
"title": "$:/core/modules/saver-handler.js",
"text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\n function SaverHandler (options) {\n var self = this\n this.wiki = options.wiki\n this.dirtyTracking = options.dirtyTracking\n this.preloadDirty = options.preloadDirty || []\n this.pendingAutoSave = false\n // Make a logger\n this.logger = new $tw.utils.Logger('saver-handler')\n // Initialise our savers\n if ($tw.browser) {\n this.initSavers()\n }\n // Only do dirty tracking if required\n if ($tw.browser && this.dirtyTracking) {\n // Compile the dirty tiddler filter\n this.filterFn = this.wiki.compileFilter(\n this.wiki.getTiddlerText(this.titleSyncFilter)\n )\n // Count of changes that have not yet been saved\n var filteredChanges = self.filterFn.call(self.wiki, function (iterator) {\n $tw.utils.each(self.preloadDirty, function (title) {\n var tiddler = self.wiki.getTiddler(title)\n iterator(tiddler, title)\n })\n })\n this.numChanges = filteredChanges.length\n // Listen out for changes to tiddlers\n this.wiki.addEventListener('change', async function (changes) {\n // Filter the changes so that we only count changes to tiddlers that we care about\n var filteredChanges = self.filterFn.call(self.wiki, function (\n iterator\n ) {\n $tw.utils.each(changes, function (change, title) {\n var tiddler = self.wiki.getTiddler(title)\n iterator(tiddler, title)\n })\n })\n // Adjust the number of changes\n self.numChanges += filteredChanges.length\n self.updateDirtyStatus()\n // Do any autosave if one is pending and there's no more change events\n if (\n self.pendingAutoSave &&\n self.wiki.getSizeOfTiddlerEventQueue() === 0\n ) {\n // Check if we're dirty\n if (self.numChanges > 0) {\n await self.saveWiki({\n method: 'autosave',\n downloadType: 'text/plain'\n })\n }\n self.pendingAutoSave = false\n }\n })\n // Listen for the autosave event\n $tw.rootWidget.addEventListener('tm-auto-save-wiki', async function (\n event\n ) {\n // Do the autosave unless there are outstanding tiddler change events\n if (self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n // Check if we're dirty\n if (self.numChanges > 0) {\n await self.saveWiki({\n method: 'autosave',\n downloadType: 'text/plain'\n })\n }\n } else {\n // Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n self.pendingAutoSave = true\n }\n })\n // Set up our beforeunload handler\n $tw.addUnloadTask(function (event) {\n var confirmationMessage\n if (self.isDirty()) {\n confirmationMessage = $tw.language.getString('UnsavedChangesWarning')\n event.returnValue = confirmationMessage // Gecko\n }\n return confirmationMessage\n })\n }\n // Install the save action handlers\n if ($tw.browser) {\n $tw.rootWidget.addEventListener('tm-save-wiki', async function (event) {\n await self.saveWiki({\n template: event.param,\n downloadType: 'text/plain',\n variables: event.paramObject\n })\n })\n $tw.rootWidget.addEventListener('tm-download-file', async function (\n event\n ) {\n await self.saveWiki({\n method: 'download',\n template: event.param,\n downloadType: 'text/plain',\n variables: event.paramObject\n })\n })\n }\n }\n\n SaverHandler.prototype.titleSyncFilter = '$:/config/SaverFilter'\n SaverHandler.prototype.titleAutoSave = '$:/config/AutoSave'\n SaverHandler.prototype.titleSavedNotification =\n '$:/language/Notifications/Save/Done'\n\n /*\nSelect the appropriate saver modules and set them up\n*/\n SaverHandler.prototype.initSavers = function (moduleType) {\n moduleType = moduleType || 'saver'\n // Instantiate the available savers\n this.savers = []\n var self = this\n $tw.modules.forEachModuleOfType(moduleType, function (title, module) {\n if (module.canSave(self)) {\n self.savers.push({ title: title, module: module.create(self.wiki) })\n }\n })\n // Sort savers\n this.sortSavers()\n }\n\n /*\n * Sort the savers into priority order\n */\n SaverHandler.prototype.sortSavers = function () {\n this.savers.sort(function (a, b) {\n if (a.module.info.priority < b.module.info.priority) {\n return -1\n } else {\n if (a.module.info.priority > b.module.info.priority) {\n return +1\n } else {\n return 0\n }\n }\n })\n }\n\n /*\nSave the wiki contents. Options are:\nmethod: \"save\", \"autosave\" or \"download\"\ntemplate: the tiddler containing the template to save\ndownloadType: the content type for the saved file\n*/\n SaverHandler.prototype.saveWiki = async function (options) {\n options = options || {}\n var self = this\n var method = options.method || 'save'\n // Ignore autosave if disabled\n if (\n method === 'autosave' &&\n this.wiki.getTiddlerText(this.titleAutoSave, 'yes') !== 'yes'\n ) {\n return false\n }\n var variables = options.variables || {}\n var template = options.template || '$:/core/save/all'\n var downloadType = options.downloadType || 'text/plain'\n var text = this.wiki.renderTiddler(downloadType, template, options)\n var callback = function (err) {\n if (err) {\n alert($tw.language.getString('Error/WhileSaving') + ':\\n\\n' + err)\n } else {\n // Clear the task queue if we're saving (rather than downloading)\n if (method !== 'download') {\n self.numChanges = 0\n self.updateDirtyStatus()\n }\n $tw.notifier.display(self.titleSavedNotification)\n if (options.callback) {\n options.callback()\n }\n }\n }\n // Process preferred if any\n var ignorePreferred = null\n var preferredSaver = $tw.wiki.getTiddler('$:/config/PreferredSaver')\n if (preferredSaver !== null && preferredSaver !== undefined) {\n var title = preferredSaver.getFieldString('text')\n title =\n title === undefined || title == null || title.trim() === ''\n ? null\n : title.trim()\n if (title !== null) {\n ignorePreferred = title\n // Process preferred saver\n if (\n await this.save(\n this.getSaver(title).module,\n method,\n variables,\n text,\n callback\n )\n ) {\n return true\n }\n }\n }\n\n // Call the highest priority saver that supports this method\n for (var t = this.savers.length - 1; t >= 0; t--) {\n // Ignore failed preferred if any\n if (this.savers[t].title === ignorePreferred) {\n continue\n }\n // Process\n if (\n await this.save(\n this.savers[t].module,\n method,\n variables,\n text,\n callback\n )\n ) {\n return true\n }\n }\n return false\n }\n\n SaverHandler.prototype.getSaver = function (title) {\n // Locate saver\n var saver = null\n for (var i = 0; i < this.savers.length; i++) {\n var current = this.savers[i]\n if (current.title === title) {\n saver = current\n break\n }\n }\n return saver\n }\n\n SaverHandler.prototype.save = async function (\n saver,\n method,\n variables,\n text,\n callback\n ) {\n if (saver.info.capabilities.indexOf(method) !== -1) {\n var saved = await saver.save(text, method, callback, {\n variables: { filename: variables.filename }\n })\n if (saved) {\n this.logger.log(\n 'Saved wiki with method',\n method,\n 'through saver',\n saver.info.name\n )\n return true\n }\n }\n return false\n }\n\n /*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\n SaverHandler.prototype.isDirty = function () {\n return this.numChanges > 0\n }\n\n /*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\n SaverHandler.prototype.updateDirtyStatus = function () {\n if ($tw.browser) {\n $tw.utils.toggleClass(document.body, 'tc-dirty', this.isDirty())\n }\n }\n\n exports.SaverHandler = SaverHandler\n})()\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/plugins/ipfs/modules/widgets/image.js": {
"title": "$:/plugins/ipfs/modules/widgets/image.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n var Widget = require('$:/core/modules/widgets/widget.js').widget\n\n var name = 'ipfs-image'\n\n var ImageWidget = function (parseTreeNode, options) {\n this.initialise(parseTreeNode, options)\n }\n\n /*\nInherit from the base widget class\n*/\n ImageWidget.prototype = new Widget()\n\n ImageWidget.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n /*\nRender this widget into the DOM\n*/\n ImageWidget.prototype.render = function (parent, nextSibling) {\n this.parentDomNode = parent\n this.computeAttributes()\n this.execute()\n var self = this\n // Create element\n // Determine what type of image it is\n var tiddler = this.wiki.getTiddler(this.imageSource)\n // Create default element\n var domNode = this.document.createElement('img')\n if (!tiddler) {\n // The source isn't the title of a tiddler, so we'll assume it's a URL\n domNode.setAttribute(\n 'src',\n this.getVariable('tv-get-export-image-link', {\n params: [{ name: 'src', value: this.imageSource }],\n defaultValue: this.imageSource\n })\n )\n } else {\n // Check if it is an image tiddler\n if (this.wiki.isImageTiddler(this.imageSource)) {\n var type = tiddler.fields.type\n var text = tiddler.fields.text\n var canonicalUri = tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n // If the tiddler has body text then it doesn't need to be lazily loaded\n if (text) {\n // Render the appropriate element for the image type\n switch (type) {\n case 'application/pdf':\n domNode = this.document.createElement('embed')\n domNode.setAttribute('src', 'data:application/pdf;base64,' + text)\n break\n case 'image/svg+xml':\n domNode.setAttribute(\n 'src',\n 'data:image/svg+xml,' + encodeURIComponent(text)\n )\n break\n default:\n domNode.setAttribute('src', 'data:' + type + ';base64,' + text)\n break\n }\n } else if (canonicalUri) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n switch (type) {\n case 'application/pdf':\n domNode = this.document.createElement('embed')\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n if (\n loaded !== undefined &&\n loaded !== null &&\n loaded.data !== undefined &&\n loaded.data !== null\n ) {\n domNode.setAttribute(\n 'src',\n 'data:application/pdf;base64,' + loaded.data\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n break\n case 'image/svg+xml':\n $tw.ipfs\n .loadToUtf8(url)\n .then(loaded => {\n if (\n loaded !== undefined &&\n loaded !== null &&\n loaded.data !== undefined &&\n loaded.data !== null\n ) {\n domNode.setAttribute(\n 'src',\n 'data:image/svg+xml,' +\n encodeURIComponent(loaded.data)\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n break\n default:\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n if (\n loaded !== undefined &&\n loaded !== null &&\n loaded.data !== undefined &&\n loaded.data !== null\n ) {\n domNode.setAttribute(\n 'src',\n 'data:' + type + ';base64,' + loaded.data\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n break\n }\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else {\n // Just trigger loading of the tiddler\n this.wiki.getTiddlerText(this.imageSource)\n domNode.setAttribute('src', '')\n }\n }\n }\n // Assign the attributes\n if (this.imageClass) {\n domNode.setAttribute('class', this.imageClass)\n }\n if (this.imageWidth) {\n domNode.setAttribute('width', this.imageWidth)\n }\n if (this.imageHeight) {\n domNode.setAttribute('height', this.imageHeight)\n }\n if (this.imageTooltip) {\n domNode.setAttribute('title', this.imageTooltip)\n }\n if (this.imageAlt) {\n domNode.setAttribute('alt', this.imageAlt)\n }\n // Insert element\n parent.insertBefore(domNode, nextSibling)\n this.domNodes.push(domNode)\n }\n\n /*\nCompute the internal state of the widget\n*/\n ImageWidget.prototype.execute = function () {\n // Get our parameters\n this.imageSource = this.getAttribute('source')\n this.imageWidth = this.getAttribute('width')\n this.imageHeight = this.getAttribute('height')\n this.imageClass = this.getAttribute('class')\n this.imageTooltip = this.getAttribute('tooltip')\n this.imageAlt = this.getAttribute('alt')\n }\n\n /*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\n ImageWidget.prototype.refresh = function (changedTiddlers) {\n var changedAttributes = this.computeAttributes()\n if (\n changedAttributes.source ||\n changedAttributes.width ||\n changedAttributes.height ||\n changedAttributes.class ||\n changedAttributes.tooltip ||\n changedTiddlers[this.imageSource]\n ) {\n this.refreshSelf()\n return true\n } else {\n return false\n }\n }\n\n exports.image = ImageWidget\n})()\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ipfs/ipfs-wiki.js": {
"title": "$:/plugins/ipfs/ipfs-wiki.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-wiki.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: wikimethod\n\nwikimethod\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n * Parse a block of text of a specified MIME type\n * type: content type of text to be parsed\n * text: text\n * options: see below\n * Options include:\n * parseAsInline: if true, the text of the tiddler will be parsed as an inline run\n * _canonical_uri: optional string of the canonical URI of this content\n */\n exports.parseText = function (type, text, options) {\n text = text || ''\n options = options || {}\n // Select a parser\n var Parser = $tw.Wiki.parsers[type]\n if (!Parser && $tw.utils.getFileExtensionInfo(type)) {\n Parser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type]\n }\n if (!Parser) {\n Parser = $tw.Wiki.parsers[options.defaultType || 'text/vnd.tiddlywiki']\n }\n if (!Parser) {\n return null\n }\n // Return the parser instance\n return new Parser(type, text, {\n parseAsInline: options.parseAsInline,\n wiki: this,\n _canonical_uri: options._canonical_uri,\n tiddler: options.tiddler\n })\n }\n\n /*\n * Parse a tiddler according to its MIME type\n */\n exports.parseTiddler = function (title, options) {\n options = $tw.utils.extend({}, options)\n var cacheType = options.parseAsInline ? 'inlineParseTree' : 'blockParseTree'\n var tiddler = this.getTiddler(title)\n var self = this\n return tiddler\n ? this.getCacheForTiddler(title, cacheType, function () {\n if (tiddler.hasField('_canonical_uri')) {\n options._canonical_uri = tiddler.fields._canonical_uri\n }\n options.tiddler = tiddler\n return self.parseText(\n tiddler.fields.type,\n tiddler.fields.text,\n options\n )\n })\n : null\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "wikimethod"
},
"$:/core/ui/ControlPanel/Saving/General": {
"title": "$:/core/ui/ControlPanel/Saving/General",
"modified": "20200528094915385",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
"list-before": "",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n\\define ipfs-saver()\n<$text text=<<ipfs-info-saver \"$(currentTiddler)$\">>/>\n\\end\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/PreferredSaver\"><<lingo PreferredSaver/Caption>></$link>\n\n<$select tiddler=\"$:/config/PreferredSaver\">\n<$list filter=\"[savers[]]\">\n<option value=<<currentTiddler>>><<ipfs-saver>></option>\n</$list>\n</$select>\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
"modified": "20200528094915385",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper tc-icon-ipfs-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"modified": "20200528094915385",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n <div class=\"tc-message-box\">\n <<lingo External/Hint>>\n <p><$ipfslink field=\"_canonical_uri\" tiddler=<<currentTiddler>>/></p>\n </div>\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n <$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n <div class=\"tc-tiddler-preview\">\n <$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n <div class=\"tc-tiddler-preview-preview\">\n <$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n <$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n </$transclude>\n </div>\n </div>\n </$reveal>\n <$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n <$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n </$reveal>\n</$list>"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"modified": "20200528094915385",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define current-tiddler-new-field-selector()\n[data-tiddler-title=\"$(currentTiddlerCSSescaped)$\"] .tc-edit-field-add-name input\n\\end\n\n\\define new-field-actions()\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/>\n\\end\n\n\\define new-field()\n<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button tooltip=<<lingo Fields/Add/Button/Hint>>>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$ipfslink value=<<currentField>> field=<<currentField>> tiddler=<<currentTiddler>>/>\n</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>> \n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=<<newFieldNameTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}}/>\n</span> \n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> \n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=<<newFieldNameTiddler>>>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$set name=\"newFieldName\" value={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$set>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}>\n<$keyboard key=\"((add-field))\" actions=<<new-field-actions>>>\n<$edit-text tiddler=<<newFieldValueTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}}/>\n</$keyboard>\n</$set>\n</span> \n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"modified": "20200528094915385",
"text": "\\define save-tiddler-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>\n<$fieldmangler>\n<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify \"$:/temp/NewTagName\">> newFieldNameTiddler=<<qualify \"$:/temp/NewFieldName\">> newFieldValueTiddler=<<qualify \"$:/temp/NewFieldValue\">>>\n<$keyboard key=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" actions=<<save-tiddler-actions>>>\n<$list filter=\"[all[shadows+tiddlers]list[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$vars>\n</$fieldmangler>\n</div>"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <b><<version>></b>, <<lingo Ipfs/Version/Prompt>> <b><<ipfs-plugin-version>></b>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/3box/profile": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/3box/profile",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/pin": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/pin",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/unpin": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/unpin",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/console/mobile": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/console/mobile",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ens/publish": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ens/publish",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipns/publish": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipns/publish",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export/content": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export/content",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export/attachment": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export/attachment",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/refresh": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/refresh",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/tiddler/pin": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/tiddler/pin",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/tiddler/unpin": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/tiddler/unpin",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/plugins/ipfs/ens-action.js": {
"title": "$:/plugins/ipfs/ens-action.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ens-action.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nENS Action\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const fileProtocol = 'file:'\n\n const name = 'ens-action'\n\n var EnsAction = function () {\n this.once = false\n }\n\n EnsAction.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n EnsAction.prototype.init = function () {\n // Init once\n if (this.once) {\n return\n }\n const self = this\n $tw.rootWidget.addEventListener('tm-ens-manager-open', function (event) {\n return self.handleOpenEnsManager(event)\n })\n $tw.rootWidget.addEventListener('tm-ens-resolve-and-open', async function (\n event\n ) {\n return await self.handleResolveEnsAndOpen(event)\n })\n $tw.rootWidget.addEventListener('tm-ens-publish', async function (event) {\n return await self.handlePublishToEns(event)\n })\n // Init once\n this.once = true\n }\n\n EnsAction.prototype.handleOpenEnsManager = function (event) {\n // Retrieve ENS domain\n const ensDomain = $tw.utils.getIpfsEnsDomain()\n // Check\n if (ensDomain == null) {\n window.open('https://app.ens.domains', '_blank', 'noopener,noreferrer')\n } else {\n window.open(\n `https://app.ens.domains/name/${ensDomain}`,\n '_blank',\n 'noopener,noreferrer'\n )\n }\n return true\n }\n\n EnsAction.prototype.handleResolveEnsAndOpen = async function (event) {\n const ensDomain = $tw.utils.getIpfsEnsDomain()\n if (ensDomain == null) {\n $tw.utils.alert(name, 'Undefined ENS domain...')\n return false\n }\n try {\n this.getLogger().info(`ENS domain: ${ensDomain}`)\n const { resolvedUrl } = await $tw.ipfs.resolveEns(ensDomain)\n if (resolvedUrl !== null) {\n window.open(resolvedUrl.toString(), '_blank', 'noopener,noreferrer')\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n return true\n }\n\n EnsAction.prototype.handlePublishToEns = async function (event) {\n const self = this\n const wiki = $tw.ipfs.getDocumentUrl()\n if (wiki.protocol === fileProtocol) {\n $tw.utils.alert(name, 'Undefined IPFS identifier...')\n return false\n }\n if (wiki.pathname === '/') {\n $tw.utils.alert(name, 'Unknown IPFS identifier...')\n return false\n }\n var cid = null\n var ensCid = null\n var ensResolvedUrl = null\n var ipnsKey = null\n try {\n var { cid, ipnsKey } = await $tw.ipfs.resolveUrl(true, false, wiki)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n const ensDomain = $tw.utils.getIpfsEnsDomain()\n if (ensDomain == null) {\n $tw.utils.alert(name, 'Undefined ENS domain...')\n return false\n }\n if (cid == null && ipnsKey !== null) {\n $tw.utils.alert(name, 'Nothing to publish to ENS...')\n return false\n }\n try {\n var {\n cid: ensCid,\n resolvedUrl: ensResolvedUrl\n } = await $tw.ipfs.resolveUrl(false, true, ensDomain)\n if (cid !== null && ensCid !== null && cid === ensCid) {\n $tw.utils.alert(\n name,\n 'The current resolved ENS domain content is up to date...'\n )\n return false\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n if (cid !== null) {\n $tw.utils.alert(name, `Publishing to ENS: ${ensDomain}`)\n $tw.ipfs\n .requestToUnpin(ensCid)\n .then(data => {\n if (data) {\n $tw.ipfs.removeFromPinUnpin(ensCid, ensResolvedUrl)\n }\n $tw.ipfs\n .setEns(ensDomain, cid)\n .then(data => {\n $tw.utils.alert(name, 'Successfully published to ENS...')\n })\n .catch(error => {\n $tw.ipfs.requestToPin(ensCid)\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n } else if (ipnsKey !== null) {\n $tw.utils.alert(name, `Publishing to ENS: ${ensDomain}`)\n $tw.ipfs\n .resolveUrl(true, false, wiki)\n .then(data => {\n const { cid: ipnsCid } = data\n $tw.ipfs\n .requestToUnpin(ensCid)\n .then(data => {\n if (data) {\n $tw.ipfs.removeFromPinUnpin(ensCid, ensResolvedUrl)\n }\n $tw.ipfs\n .setEns(ensDomain, ipnsCid)\n .then(data => {\n $tw.utils.alert(name, 'Successfully Published to ENS...')\n })\n .catch(error => {\n $tw.ipfs.requestToPin(ensCid)\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n return true\n }\n\n exports.EnsAction = EnsAction\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ens-wrapper.js": {
"title": "$:/plugins/ipfs/ens-wrapper.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ens-wrapper.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nENS Wrapper\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /**\n * https://github.com/purposeindustries/window-or-global\n * The MIT License (MIT) Copyright (c) Purpose Industries\n * version: 1.0.1\n */\n const root =\n (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this\n\n const name = 'ens-wrapper'\n\n var EnsWrapper = function (ipfsBundle) {\n this.account = null\n this.chainId = null\n this.ethereum = null\n this.provider = null\n this.web3 = null\n this.ipfsBundle = ipfsBundle\n this.boxLibrary = ipfsBundle.boxLibrary\n this.ensLibrary = ipfsBundle.ensLibrary\n }\n\n EnsWrapper.prototype.getLogger = function () {\n return root.log.getLogger(name)\n }\n\n EnsWrapper.prototype.load3BoxProfile = async function () {\n const { account } = await this.getEnabledWeb3Provider()\n return await this.boxLibrary.load3BoxProfile(\n this.getEthereumProvider(),\n account\n )\n }\n\n EnsWrapper.prototype.getChainId = function () {\n return this.chainId\n }\n\n EnsWrapper.prototype.getEthereumProvider = function () {\n if (this.ethereum == null) {\n const self = this\n this.ethereum = this.ensLibrary.getProvider()\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md\n this.ethereum.on('accountsChanged', function accountChanged (accounts) {\n self.accountChanged(accounts)\n })\n this.ethereum.on('chainChanged', function networkChanged (chainId) {\n self.networkChanged(chainId)\n })\n this.ethereum.on('close', function closeProvider (code, reason) {\n self.closeConnection(code, reason)\n })\n this.ethereum.on('networkChanged', function networkChanged (chainId) {\n self.networkChanged(chainId)\n })\n }\n return this.ethereum\n }\n\n EnsWrapper.prototype.accountChanged = async function (accounts) {\n if (\n accounts === undefined ||\n accounts == null ||\n Array.isArray(accounts) === false ||\n accounts.length === 0\n ) {\n this.web3 = null\n this.chainId = null\n this.account = null\n this.getLogger().info('Closing Ethereum connection...')\n } else if (this.account !== accounts[0]) {\n try {\n if (this.web3 == null && this.chainId == null) {\n const { web3, chainId } = await this.getWeb3Provider()\n this.web3 = web3\n this.chainId = chainId\n }\n this.account = accounts[0]\n const etherscan = this.getEtherscanRegistry()\n this.getLogger().info(\n `Current Ethereum account:\\n ${etherscan[this.chainId]}/address/${\n this.account\n }`\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n }\n }\n\n EnsWrapper.prototype.closeConnection = function (code, reason) {\n this.web3 = null\n this.chainId = null\n this.account = null\n this.getLogger().info(\n `Closing Ethereum Connection:\\n Reason: ${reason}\\n Code: ${code}`\n )\n }\n\n EnsWrapper.prototype.networkChanged = function (chainId) {\n if (this.chainId !== chainId) {\n const network = this.getNetwork()\n try {\n this.web3 = null\n this.chainId = chainId\n this.account = null\n this.getLogger().info(`Current Ethereum network:\\n ${network[chainId]}`)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n }\n }\n\n EnsWrapper.prototype.getEnabledWeb3Provider = async function () {\n var web3 = null\n var chainId = null\n var account = null\n const provider = this.getEthereumProvider()\n const network = this.getNetwork()\n const etherscan = this.getEtherscanRegistry()\n var msg = 'Reuse Web3 provider:'\n if (this.account == null) {\n try {\n var {\n web3,\n chainId,\n account\n } = await this.ensLibrary.getEnabledWeb3Provider(provider)\n } catch (error) {\n this.getLogger().error(error)\n throw new Error('Unable to retrieve an enabled Ethereum provider...')\n }\n this.web3 = web3\n this.chainId = chainId\n this.account = account\n msg = 'New Web3 provider:'\n }\n // Log\n this.getLogger().info(\n `${msg}\\n network: ${network[this.chainId]}\\n account: ${\n etherscan[this.chainId]\n }/address/${this.account}`\n )\n return {\n web3: this.web3,\n chainId: this.chainId,\n account: this.account\n }\n }\n\n EnsWrapper.prototype.getWeb3Provider = async function () {\n var web3 = null\n var chainId = null\n const provider = this.getEthereumProvider()\n const network = this.getNetwork()\n var info = 'Reuse Web3 provider:'\n if (this.web3 == null) {\n try {\n var { web3, chainId } = await this.ensLibrary.getWeb3Provider(provider)\n } catch (error) {\n this.getLogger().error(error)\n throw new Error('Unable to retrieve an Ethereum provider...')\n }\n this.web3 = web3\n this.chainId = chainId\n info = 'New Web3 provider:'\n }\n // Log\n this.getLogger().info(`${info}\\n network: ${network[this.chainId]}`)\n return {\n web3: this.web3,\n chainId: this.chainId\n }\n }\n\n EnsWrapper.prototype.getContentHash = async function (domain, web3) {\n try {\n var { content, protocol } = await this.ensLibrary.getContentHash(\n domain,\n web3\n )\n if (content !== null && protocol !== null) {\n // Convert CidV0 to CidV1\n content = this.ipfsBundle.cidV0ToCidV1(content)\n // Success\n return {\n content: content,\n protocol: protocol\n }\n }\n $tw.utils.alert(name, 'Unassigned ENS domain content...')\n return {\n content: null,\n protocol: null\n }\n } catch (error) {\n this.getLogger().error(error)\n throw new Error('Unable to fetch ENS domain content...')\n }\n }\n\n EnsWrapper.prototype.setContentHash = async function (\n domain,\n cid,\n web3,\n account\n ) {\n try {\n const isOwner = await this.ensLibrary.isOwner(domain, web3, account)\n if (isOwner === false) {\n const error = new Error(\n 'Unauthorized Owner. Unable to set ENS domain content...'\n )\n error.name = 'OwnerError'\n throw error\n }\n const cidV0 = this.ipfsBundle.cidV1ToCidV0(cid)\n await this.ensLibrary.setContentHash(domain, cidV0, web3, account)\n return {\n cidV0: cidV0\n }\n } catch (error) {\n if (error.name === 'OwnerError') {\n throw error\n }\n this.getLogger().error(error)\n throw new Error('Unable to set ENS domain content...')\n }\n }\n\n EnsWrapper.prototype.getEtherscanRegistry = function () {\n return this.ensLibrary.getEtherscanRegistry()\n }\n\n EnsWrapper.prototype.getNetwork = function () {\n return this.ensLibrary.getNetwork()\n }\n\n EnsWrapper.prototype.getENSRegistry = function () {\n return this.ensLibrary.getENSRegistry()\n }\n\n exports.EnsWrapper = EnsWrapper\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/loglevel/loglevel.js": {
"text": "/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods(level, loggerName) {\n /*jshint validthis:true */\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, loggerName);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this, level, loggerName);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, level, loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, defaultLevel, factory) {\n var self = this;\n var currentLevel;\n var storageKey = \"loglevel\";\n if (name) {\n storageKey += \":\" + name;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var location = cookie.indexOf(\n encodeURIComponent(storageKey) + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n return currentLevel;\n };\n\n self.setLevel = function (level, persist) {\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n currentLevel = level;\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(level);\n }\n replaceLoggingMethods.call(self, level, name);\n if (typeof console === undefinedType && level < self.levels.SILENT) {\n return \"No console available for logging\";\n }\n } else {\n throw \"log.setLevel() called with invalid level: \" + level;\n }\n };\n\n self.setDefaultLevel = function (level) {\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n // Initialize with the right level\n var initialLevel = getPersistedLevel();\n if (initialLevel == null) {\n initialLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n }\n self.setLevel(initialLevel, false);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n var defaultLogger = new Logger();\n\n var _loggersByName = {};\n defaultLogger.getLogger = function getLogger(name) {\n if (typeof name !== \"string\" || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n return defaultLogger;\n}));\n",
"type": "application/javascript",
"title": "$:/plugins/ipfs/loglevel/loglevel.js",
"global-module": "true",
"module-type": "library"
},
"$:/plugins/ipfs/loglevel/license": {
"text": "Copyright (c) 2013 Tim Perry\r\n\r\nPermission is hereby granted, free of charge, to any person\r\nobtaining a copy of this software and associated documentation\r\nfiles (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use,\r\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the\r\nSoftware is furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\r\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r\nOTHER DEALINGS IN THE SOFTWARE.\r\n",
"type": "text/plain",
"title": "$:/plugins/ipfs/loglevel/license"
},
"$:/plugins/ipfs/ipfs-action.js": {
"title": "$:/plugins/ipfs/ipfs-action.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-action.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Action\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const fileProtocol = 'file:'\n const ipfsKeyword = 'ipfs'\n const ipnsKeyword = 'ipns'\n\n const name = 'ipfs-action'\n\n var IpfsAction = function () {\n this.once = false\n this.console = false\n this.ipnsName = $tw.utils.getIpfsIpnsName()\n this.ipnsKey = $tw.utils.getIpfsIpnsKey()\n }\n\n IpfsAction.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsAction.prototype.init = function () {\n // Init once\n if (this.once) {\n return\n }\n const self = this\n // Widget\n $tw.rootWidget.addEventListener('tm-3box-profile', async function (event) {\n return await self.handle3BoxProfile(event)\n })\n $tw.rootWidget.addEventListener('tm-ipfs-export', async function (event) {\n return await self.handleExportToIpfs(event, false)\n })\n $tw.rootWidget.addEventListener('tm-ipfs-export-content', async function (\n event\n ) {\n return await self.handleExportToIpfs(event, true)\n })\n $tw.rootWidget.addEventListener('tm-ipns-fetch', async function (event) {\n return await self.handleFetchIpnsKey(event)\n })\n $tw.rootWidget.addEventListener('tm-ipns-generate', async function (event) {\n return await self.handleGenerateIpnsKey(event)\n })\n $tw.rootWidget.addEventListener('tm-console-mobile', async function (\n event\n ) {\n return await self.handleMobileConsole(event)\n })\n $tw.rootWidget.addEventListener(\n 'tm-ipfs-export-attachment',\n async function (event) {\n return await self.handleExportAttachmentToIpfs(event)\n }\n )\n $tw.rootWidget.addEventListener('tm-ipns-publish', async function (event) {\n return await self.handlePublishToIpns(event)\n })\n $tw.rootWidget.addEventListener('tm-ipns-remove', async function (event) {\n return await self.handleRemoveIpnsKey(event)\n })\n $tw.rootWidget.addEventListener('tm-ipns-rename', async function (event) {\n return await self.handleRenameIpnsName(event)\n })\n $tw.rootWidget.addEventListener('tm-ipns-resolve-and-open', async function (\n event\n ) {\n return await self.handleResolveIpnsKeyAndOpen(event)\n })\n // Init once\n this.once = true\n }\n\n IpfsAction.prototype.handle3BoxProfile = async function (event) {\n try {\n await $tw.ipfs.load3BoxProfile()\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n return true\n }\n\n IpfsAction.prototype.handleExportToIpfs = async function (event, child) {\n var cid = null\n var ipnsKey = null\n var ipnsName = null\n var normalizedUrl = null\n var added = null\n var fields = []\n const self = this\n const title = event.tiddlerTitle\n var tiddler = $tw.wiki.getTiddler(title)\n var exportUri = tiddler.getFieldString('_export_uri')\n try {\n var { cid, ipnsKey, ipnsName, normalizedUrl } = await $tw.ipfs.resolveUrl(\n true,\n true,\n exportUri\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n // Retrieve content\n const content = await this.exportTiddler(child, exportUri, tiddler)\n // Check\n if (content == null) {\n return false\n }\n this.getLogger().info(`Uploading Tiddler: ${content.length} bytes`)\n try {\n var { added } = await $tw.ipfs.addToIpfs(content)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n // Prepare New value\n fields.push({ key: '_export_uri', value: `/${ipfsKeyword}/${added}` })\n var tiddler = $tw.wiki.getTiddler(title)\n var updatedTiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n addTags: ['$:/isExported', '$:/isIpfs'],\n fields: fields\n })\n $tw.wiki.addTiddler(updatedTiddler)\n if (ipnsKey !== null) {\n $tw.utils.alert(name, `Publishing IPNS name: ${ipnsName}`)\n $tw.ipfs\n .pinToIpfs(added)\n .then(data => {\n $tw.ipfs\n .publishIpnsName(added, ipnsKey, ipnsName)\n .then(data => {\n fields.push({ key: '_export_uri', value: exportUri })\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n addTags: ['$:/isExported', '$:/isIpfs'],\n fields: fields\n })\n $tw.wiki.addTiddler(tiddler)\n $tw.utils.alert(\n name,\n `Successfully Published IPNS name: ${ipnsName}`\n )\n if ($tw.utils.getIpfsUnpin()) {\n $tw.ipfs\n .unpinFromIpfs(cid)\n .then(data => {\n if (data !== undefined && data !== null) {\n $tw.ipfs.removeFromPinUnpin(cid, normalizedUrl)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n $tw.ipfs.requestToUnpin(added)\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n } else if (\n normalizedUrl !== null &&\n normalizedUrl.hostname.endsWith('.eth')\n ) {\n $tw.utils.alert(name, `Publishing to ENS: ${normalizedUrl.hostname}`)\n $tw.ipfs\n .pinToIpfs(added)\n .then(data => {\n $tw.ipfs\n .setEns(normalizedUrl.hostname, added)\n .then(data => {\n fields.push({ key: '_export_uri', value: exportUri })\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n addTags: ['$:/isExported', '$:/isIpfs'],\n fields: fields\n })\n $tw.wiki.addTiddler(tiddler)\n $tw.utils.alert(name, 'Successfully Published to ENS...')\n if ($tw.utils.getIpfsUnpin()) {\n $tw.ipfs\n .unpinFromIpfs(cid)\n .then(data => {\n if (data !== undefined && data !== null) {\n $tw.ipfs.removeFromPinUnpin(cid, normalizedUrl)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n $tw.ipfs.requestToUnpin(added)\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n return true\n }\n\n IpfsAction.prototype.handleExportAttachmentToIpfs = async function (event) {\n const title = event.tiddlerTitle\n var tiddler = $tw.wiki.getTiddler(title)\n const { type, info } = $tw.utils.getContentType(title, tiddler.fields.type)\n var added = null\n if (info.encoding !== 'base64' && type !== 'image/svg+xml') {\n $tw.utils.alert(name, 'This Tiddler do not contain any Attachment...')\n return false\n }\n // Do not process if _canonical_uri is set and the text field is empty\n const canonicalUri = tiddler.getFieldString('_canonical_uri')\n if (\n canonicalUri !== undefined &&\n canonicalUri !== null &&\n canonicalUri.trim() !== ''\n ) {\n $tw.utils.alert(name, 'Attachment is already published...')\n return false\n }\n try {\n const content = this.getAttachmentContent(tiddler)\n if (content == null) {\n return false\n }\n this.getLogger().info(`Uploading attachment: ${content.length} bytes`)\n var { added } = await $tw.ipfs.addToIpfs(content)\n $tw.ipfs.requestToPin(added)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var addTags = []\n var removeTags = []\n if ($tw.crypto.hasPassword()) {\n addTags = ['$:/isAttachment', '$:/isIpfs']\n removeTags = ['$:/isEmbedded']\n } else {\n addTags = ['$:/isAttachment', '$:/isIpfs']\n removeTags = ['$:/isEmbedded']\n }\n // Update\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n addTags: addTags,\n removeTags: removeTags,\n fields: [\n { key: 'text', value: '' },\n { key: '_canonical_uri', value: `/${ipfsKeyword}/${added}` }\n ]\n })\n $tw.wiki.addTiddler(tiddler)\n return true\n }\n\n IpfsAction.prototype.getAttachmentContent = function (tiddler) {\n const { type, info } = $tw.utils.getContentType(\n tiddler.fields.title,\n tiddler.fields.type\n )\n if (info.encoding !== 'base64' && type !== 'image/svg+xml') {\n $tw.utils.alert(name, 'Unsupported Tiddler Content-Type...')\n return null\n }\n var text = tiddler.getFieldString('text')\n if (text === undefined || text == null || text === '') {\n $tw.utils.alert(name, 'Empty attachment content...')\n return null\n }\n if ($tw.crypto.hasPassword()) {\n try {\n // https://github.com/xmaysonnave/tiddlywiki-ipfs/issues/9\n if (info.encoding === 'base64') {\n text = atob(text)\n }\n text = $tw.crypto.encrypt(text, $tw.crypto.currentPassword)\n text = $tw.ipfs.StringToUint8Array(text)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(\n name,\n 'Failed to process encrypted Attachment content...'\n )\n return null\n }\n } else {\n try {\n if (info.encoding === 'base64') {\n text = $tw.ipfs.Base64ToUint8Array(text)\n } else {\n text = $tw.ipfs.StringToUint8Array(text)\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, 'Failed to process Attachment content...')\n return null\n }\n }\n return text\n }\n\n IpfsAction.prototype.handleRenameIpnsName = async function (event) {\n var ipnsKey = null\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n if (this.ipnsName == null || this.ipnsName === ipnsName) {\n $tw.utils.alert(name, 'Nothing to rename....')\n return false\n }\n try {\n var { ipnsKey } = await $tw.ipfs.renameIpnsName(this.ipnsName, ipnsName)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && this.ipnsKey !== ipnsKey) {\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: ipnsKey }]\n })\n $tw.wiki.addTiddler(tiddler)\n }\n this.ipnsKey = ipnsKey\n this.ipnsName = ipnsName\n return true\n }\n\n IpfsAction.prototype.handleGenerateIpnsKey = async function (event) {\n var ipnsKey = null\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var ipnsKey = await $tw.ipfs.generateIpnsKey(ipnsName)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && this.ipnsKey !== ipnsKey) {\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: ipnsKey }]\n })\n $tw.wiki.addTiddler(tiddler)\n }\n this.ipnsKey = ipnsKey\n this.ipnsName = ipnsName\n return true\n }\n\n IpfsAction.prototype.handleRemoveIpnsKey = async function (event) {\n var ipnsKey = null\n var normalizedUrl = null\n const self = this\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var { ipnsKey, normalizedUrl } = await $tw.ipfs.getIpnsIdentifiers(\n ipnsName\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n // Async\n $tw.ipfs\n .requestToUnpin(null, ipnsKey, normalizedUrl)\n .then(data => {\n $tw.ipfs\n .removeIpnsKey(ipnsName)\n .then(data => {\n $tw.utils.alert(name, 'Succesfully removed Ipns key....')\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/name')\n if (tiddler !== undefined) {\n const updatedTiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: '' }]\n })\n $tw.wiki.addTiddler(updatedTiddler)\n }\n tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined) {\n const updatedTiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: '' }]\n })\n $tw.wiki.addTiddler(updatedTiddler)\n }\n this.ipnsName = null\n this.ipnsKey = null\n return true\n }\n\n IpfsAction.prototype.handleFetchIpnsKey = async function (event) {\n var ipnsKey = null\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var { ipnsKey } = await $tw.ipfs.getIpnsIdentifiers(ipnsName)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && this.ipnsKey !== ipnsKey) {\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: ipnsKey }]\n })\n $tw.wiki.addTiddler(tiddler)\n this.ipnsKey = ipnsKey\n }\n this.ipnsName = ipnsName\n return true\n }\n\n IpfsAction.prototype.handleResolveIpnsKeyAndOpen = async function (event) {\n var ipnsKey = null\n var resolvedUrl = null\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var { ipnsKey, resolvedUrl } = await $tw.ipfs.resolveUrl(\n true,\n false,\n `/${ipnsKeyword}/${ipnsName}`\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && this.ipnsKey !== ipnsKey) {\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: ipnsKey }]\n })\n this.ipnsKey = ipnsKey\n $tw.wiki.addTiddler(tiddler)\n }\n this.ipnsName = ipnsName\n window.open(resolvedUrl.toString(), '_blank', 'noopener,noreferrer')\n return true\n }\n\n IpfsAction.prototype.handleMobileConsole = async function (tiddler) {\n // Load mobile console if applicable\n if (typeof window.eruda === 'undefined') {\n try {\n // Load eruda\n await $tw.ipfs.ipfsBundle.ipfsLoader.loadErudaLibrary()\n } catch (error) {\n this.getLogger().error(error)\n throw new Error(error.message)\n }\n const erudaContainer = window.document.createElement('div')\n window.document.body.appendChild(erudaContainer)\n window.eruda.init({\n container: erudaContainer,\n tool: ['console'],\n useShadowDom: true,\n autoScale: true\n })\n // Inherit font\n erudaContainer.style.fontFamily = 'inherit'\n // Preserve user preference if any, default is 80\n if (window.eruda.get().config.get('displaySize') === 80) {\n window.eruda.get().config.set('displaySize', 40)\n }\n // Preserve user preference if any, default is 0.95\n if (window.eruda.get().config.get('transparency') === 0.95) {\n window.eruda.get().config.set('transparency', 1)\n }\n // Hide Eruda button\n if (window.eruda._shadowRoot !== undefined) {\n const btn = window.eruda._shadowRoot.querySelector('.eruda-entry-btn')\n if (btn !== undefined) {\n btn.style.display = 'none'\n }\n }\n // Console settings\n const console = window.eruda.get('console')\n console.config.set('asyncRender', true)\n console.config.set('catchGlobalErr', true)\n console.config.set('displayExtraInfo', false)\n console.config.set('displayGetterVal', true)\n console.config.set('displayUnenumerable', true)\n console.config.set('jsExecution', true)\n console.config.set('maxLogNum', 'infinite')\n console.config.set('overrideConsole', true)\n this.getLogger().info('Mobile console has been loaded...')\n }\n if (this.console === false) {\n window.eruda.show()\n window.eruda.show('console')\n this.console = true\n } else {\n window.eruda.hide()\n this.console = false\n }\n }\n\n IpfsAction.prototype.handlePublishToIpns = async function (event) {\n var cid = null\n var ipnsKey = null\n var wikiCid = null\n var wikiIpnsKey = null\n const self = this\n const wiki = $tw.ipfs.getDocumentUrl()\n if (wiki.protocol === fileProtocol) {\n $tw.utils.alert(name, 'Undefined IPFS identifier...')\n return false\n }\n if (wiki.pathname === '/') {\n $tw.utils.alert(name, 'Unknown IPFS identifier...')\n return false\n }\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var { cid, ipnsKey } = await $tw.ipfs.resolveUrl(\n true,\n false,\n `/ipns/${ipnsName}`\n )\n var { cid: wikiCid, ipnsKey: wikiIpnsKey } = await $tw.ipfs.resolveUrl(\n true,\n true,\n wiki\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n if (wikiIpnsKey !== null && wikiIpnsKey === ipnsKey) {\n $tw.utils.alert(name, 'Default IPNS key matches current IPNS key....')\n return false\n }\n $tw.utils.alert(name, 'Publishing IPNS name: ' + ipnsName)\n $tw.ipfs\n .publishIpnsName(wikiCid, ipnsKey, ipnsName)\n .then(data => {\n $tw.ipfs.requestToUnpin(cid)\n $tw.utils.alert(name, 'Successfully Published IPNS name: ' + ipnsName)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n return true\n }\n\n IpfsAction.prototype.exportTiddlersAsJson = async function (\n exportFilter,\n exportUri,\n spaces\n ) {\n var tiddlers = $tw.wiki.filterTiddlers(exportFilter)\n var spaces =\n spaces === undefined ? $tw.config.preferences.jsonSpaces : spaces\n var data = []\n // Process Tiddlers\n for (var t = 0; t < tiddlers.length; t++) {\n // Load Tiddler\n var tiddler = $tw.wiki.getTiddler(tiddlers[t])\n // Process\n var fields = {}\n // Process fields\n for (var field in tiddler.fields) {\n // Discard\n if (field === 'tags' || field === '_export_uri') {\n continue\n }\n var ipnsKey = null\n var fieldValue = tiddler.getFieldString(field)\n if (field === '_canonical_uri' && fieldValue === exportUri) {\n continue\n }\n if (field === '_import_uri' && fieldValue === exportUri) {\n continue\n }\n try {\n var { ipnsKey } = await $tw.ipfs.resolveUrl(false, false, fieldValue)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return null\n }\n // IPNS\n if (ipnsKey !== null) {\n fieldValue = `/${ipnsKeyword}/${ipnsKey}`\n }\n // Store field\n fields[field] = fieldValue\n }\n // Process tags\n var tags = tiddler.fields.tags\n if (tags !== undefined && tags !== null) {\n var tagValues = ''\n for (var i = 0; i < tags.length; i++) {\n const tag = tags[i]\n // Discard\n if (tag === '$:/isExported' || tag === '$:/isImported') {\n continue\n }\n tagValues =\n (tagValues.length === 0 ? '[[' : `${tagValues} [[`) + `${tag}]]`\n }\n // Store tags\n fields.tags = tagValues\n }\n // Store\n data.push(fields)\n }\n return JSON.stringify(data, null, spaces)\n }\n\n IpfsAction.prototype.exportTiddler = async function (\n child,\n exportUri,\n tiddler\n ) {\n // Check\n if (tiddler === undefined || tiddler == null) {\n const error = new Error('Unknown Tiddler...')\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return null\n }\n // Title\n const title = tiddler.getFieldString('title')\n // Filter\n var exportFilter = `[[${tiddler.fields.title}]]`\n // Child filters\n if (child) {\n // Links\n const linked = $tw.wiki.getTiddlerLinks(title)\n this.getLogger().info(`Found ${linked.length} Tiddler link(s)...`)\n // Transcluded\n const transcluded = this.transcludeContent(title)\n this.getLogger().info(\n `Found ${transcluded.length} transcluded Tiddler reference(s)...`\n )\n const filtered = linked.concat(transcluded)\n // Process filtered content\n for (var i = 0; i < filtered.length; i++) {\n if (exportFilter.includes(`[[${filtered[i]}]]`) === false) {\n exportFilter = `${exportFilter} [[${filtered[i]}]]`\n }\n }\n }\n var content = null\n if (child || $tw.utils.getIpfsExport() === 'json') {\n content = await this.exportTiddlersAsJson(exportFilter, exportUri)\n } else if ($tw.utils.getIpfsExport() === 'static') {\n // Export Tiddler as Static River\n const options = {\n downloadType: 'text/plain',\n method: 'download',\n template: '$:/core/templates/exporters/StaticRiver',\n variables: {\n exportFilter: exportFilter\n }\n }\n content = $tw.wiki.renderTiddler(\n 'text/plain',\n '$:/core/templates/exporters/StaticRiver',\n options\n )\n } else {\n // Export Tiddler as tid\n const options = {\n downloadType: 'text/plain',\n method: 'download',\n template: '$:/core/templates/exporters/TidFile',\n variables: {\n exportFilter: exportFilter\n }\n }\n content = $tw.wiki.renderTiddler(\n 'text/plain',\n '$:/core/templates/exporters/TidFile',\n options\n )\n }\n if (content !== undefined && content !== null) {\n // Encrypt\n if ($tw.crypto.hasPassword()) {\n try {\n content = $tw.crypto.encrypt(content, $tw.crypto.currentPassword)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, 'Failed to encrypt content...')\n return null\n }\n }\n try {\n content = $tw.ipfs.StringToUint8Array(content)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, 'Failed to convert content...')\n return null\n }\n }\n return content\n }\n\n IpfsAction.prototype.transcludeContent = function (title) {\n var tiddlers = []\n // Build a transclude widget\n var transclude = $tw.wiki.makeTranscludeWidget(title)\n // Build a fake document element\n const container = $tw.fakeDocument.createElement('div')\n // Transclude\n transclude.render(container, null)\n // Process children\n this.locateTiddlers(transclude, tiddlers)\n // Return\n return tiddlers\n }\n\n IpfsAction.prototype.locateTiddlers = function (transclude, tiddlers) {\n // Children lookup\n for (var i = 0; i < transclude.children.length; i++) {\n // Current child\n const child = transclude.children[i]\n if (child.variables !== undefined && child.variables !== null) {\n // Locate Tiddler\n const currentTiddler = 'currentTiddler'\n const current = child.variables[currentTiddler]\n if (\n current !== undefined &&\n current !== null &&\n current.value !== undefined &&\n current.value !== null\n ) {\n if (tiddlers.indexOf(current.value) === -1) {\n tiddlers.push(current.value)\n }\n }\n }\n // Process children\n this.locateTiddlers(child, tiddlers)\n }\n }\n\n exports.IpfsAction = IpfsAction\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ipfs-bundle.js": {
"title": "$:/plugins/ipfs/ipfs-bundle.js",
"text": "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.IpfsBundle = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\nfunction _asyncIterator(iterable) {\n var method;\n\n if (typeof Symbol !== \"undefined\") {\n if (Symbol.asyncIterator) {\n method = iterable[Symbol.asyncIterator];\n if (method != null) return method.call(iterable);\n }\n\n if (Symbol.iterator) {\n method = iterable[Symbol.iterator];\n if (method != null) return method.call(iterable);\n }\n }\n\n throw new TypeError(\"Object is not async iterable\");\n}\n\nmodule.exports = _asyncIterator;\n},{}],2:[function(require,module,exports){\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;\n},{}],3:[function(require,module,exports){\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\n},{}],4:[function(require,module,exports){\nfunction _objectDestructuringEmpty(obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n}\n\nmodule.exports = _objectDestructuringEmpty;\n},{}],5:[function(require,module,exports){\nmodule.exports = require(\"regenerator-runtime\");\n\n},{\"regenerator-runtime\":77}],6:[function(require,module,exports){\n'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return _Buffer.alloc(0) }\n var psz = 0\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n\n},{\"safe-buffer\":78}],7:[function(require,module,exports){\n'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n\n},{}],8:[function(require,module,exports){\n(function (Buffer){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayLike(value)\n }\n\n if (value == null) {\n throw TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n buf = Buffer.from(buf)\n }\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (var i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"base64-js\":7,\"buffer\":8,\"ieee754\":37}],9:[function(require,module,exports){\n'use strict'\n\nconst mh = require('multihashes')\nconst { Buffer } = require('buffer')\nvar CIDUtil = {\n /**\n * Test if the given input is a valid CID object.\n * Returns an error message if it is not.\n * Returns undefined if it is a valid CID.\n *\n * @param {any} other\n * @returns {string}\n */\n checkCIDComponents: function (other) {\n if (other == null) {\n return 'null values are not valid CIDs'\n }\n\n if (!(other.version === 0 || other.version === 1)) {\n return 'Invalid version, must be a number equal to 1 or 0'\n }\n\n if (typeof other.codec !== 'string') {\n return 'codec must be string'\n }\n\n if (other.version === 0) {\n if (other.codec !== 'dag-pb') {\n return \"codec must be 'dag-pb' for CIDv0\"\n }\n if (other.multibaseName !== 'base58btc') {\n return \"multibaseName must be 'base58btc' for CIDv0\"\n }\n }\n\n if (!Buffer.isBuffer(other.multihash)) {\n return 'multihash must be a Buffer'\n }\n\n try {\n mh.validate(other.multihash)\n } catch (err) {\n let errorMsg = err.message\n if (!errorMsg) { // Just in case mh.validate() throws an error with empty error message\n errorMsg = 'Multihash validation failed'\n }\n return errorMsg\n }\n }\n}\n\nmodule.exports = CIDUtil\n\n},{\"buffer\":8,\"multihashes\":65}],10:[function(require,module,exports){\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst mh = require('multihashes')\nconst multibase = require('multibase')\nconst multicodec = require('multicodec')\nconst codecs = require('multicodec/src/base-table.json')\nconst CIDUtil = require('./cid-util')\nconst withIs = require('class-is')\n\n/**\n * @typedef {Object} SerializedCID\n * @param {string} codec\n * @param {number} version\n * @param {Buffer} multihash\n */\n\n/**\n * Test if the given input is a CID.\n * @function isCID\n * @memberof CID\n * @static\n * @param {any} other\n * @returns {bool}\n */\n\n/**\n * Class representing a CID `<mbase><version><mcodec><mhash>`\n * , as defined in [ipld/cid](https://github.com/multiformats/cid).\n * @class CID\n */\nclass CID {\n /**\n * Create a new CID.\n *\n * The algorithm for argument input is roughly:\n * ```\n * if (cid)\n * -> create a copy\n * else if (str)\n * if (1st char is on multibase table) -> CID String\n * else -> bs58 encoded multihash\n * else if (Buffer)\n * if (1st byte is 0 or 1) -> CID\n * else -> multihash\n * else if (Number)\n * -> construct CID by parts\n * ```\n *\n * @param {string|Buffer|CID} version\n * @param {string} [codec]\n * @param {Buffer} [multihash]\n * @param {string} [multibaseName]\n *\n * @example\n * new CID(<version>, <codec>, <multihash>, <multibaseName>)\n * new CID(<cidStr>)\n * new CID(<cid.buffer>)\n * new CID(<multihash>)\n * new CID(<bs58 encoded multihash>)\n * new CID(<cid>)\n */\n constructor (version, codec, multihash, multibaseName) {\n if (_CID.isCID(version)) {\n // version is an exising CID instance\n const cid = version\n this.version = cid.version\n this.codec = cid.codec\n this.multihash = Buffer.from(cid.multihash)\n // Default guard for when a CID < 0.7 is passed with no multibaseName\n this.multibaseName = cid.multibaseName || (cid.version === 0 ? 'base58btc' : 'base32')\n return\n }\n\n if (typeof version === 'string') {\n // e.g. 'base32' or false\n const baseName = multibase.isEncoded(version)\n if (baseName) {\n // version is a CID String encoded with multibase, so v1\n const cid = multibase.decode(version)\n this.version = parseInt(cid.slice(0, 1).toString('hex'), 16)\n this.codec = multicodec.getCodec(cid.slice(1))\n this.multihash = multicodec.rmPrefix(cid.slice(1))\n this.multibaseName = baseName\n } else {\n // version is a base58btc string multihash, so v0\n this.version = 0\n this.codec = 'dag-pb'\n this.multihash = mh.fromB58String(version)\n this.multibaseName = 'base58btc'\n }\n CID.validateCID(this)\n Object.defineProperty(this, 'string', { value: version })\n return\n }\n\n if (Buffer.isBuffer(version)) {\n const firstByte = version.slice(0, 1)\n const v = parseInt(firstByte.toString('hex'), 16)\n if (v === 1) {\n // version is a CID buffer\n const cid = version\n this.version = v\n this.codec = multicodec.getCodec(cid.slice(1))\n this.multihash = multicodec.rmPrefix(cid.slice(1))\n this.multibaseName = 'base32'\n } else {\n // version is a raw multihash buffer, so v0\n this.version = 0\n this.codec = 'dag-pb'\n this.multihash = version\n this.multibaseName = 'base58btc'\n }\n CID.validateCID(this)\n return\n }\n\n // otherwise, assemble the CID from the parameters\n\n /**\n * @type {number}\n */\n this.version = version\n\n /**\n * @type {string}\n */\n this.codec = codec\n\n /**\n * @type {Buffer}\n */\n this.multihash = multihash\n\n /**\n * @type {string}\n */\n this.multibaseName = multibaseName || (version === 0 ? 'base58btc' : 'base32')\n\n CID.validateCID(this)\n }\n\n /**\n * The CID as a `Buffer`\n *\n * @return {Buffer}\n * @readonly\n *\n * @memberOf CID\n */\n get buffer () {\n let buffer = this._buffer\n\n if (!buffer) {\n if (this.version === 0) {\n buffer = this.multihash\n } else if (this.version === 1) {\n buffer = Buffer.concat([\n Buffer.from('01', 'hex'),\n multicodec.getCodeVarint(this.codec),\n this.multihash\n ])\n } else {\n throw new Error('unsupported version')\n }\n\n // Cache this buffer so it doesn't have to be recreated\n Object.defineProperty(this, '_buffer', { value: buffer })\n }\n\n return buffer\n }\n\n /**\n * Get the prefix of the CID.\n *\n * @returns {Buffer}\n * @readonly\n */\n get prefix () {\n return Buffer.concat([\n Buffer.from(`0${this.version}`, 'hex'),\n multicodec.getCodeVarint(this.codec),\n mh.prefix(this.multihash)\n ])\n }\n\n /**\n * Convert to a CID of version `0`.\n *\n * @returns {CID}\n */\n toV0 () {\n if (this.codec !== 'dag-pb') {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n const { name, length } = mh.decode(this.multihash)\n\n if (name !== 'sha2-256') {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n if (length !== 32) {\n throw new Error('Cannot convert non 32 byte multihash CID to CIDv0')\n }\n\n return new _CID(0, this.codec, this.multihash)\n }\n\n /**\n * Convert to a CID of version `1`.\n *\n * @returns {CID}\n */\n toV1 () {\n return new _CID(1, this.codec, this.multihash)\n }\n\n /**\n * Encode the CID into a string.\n *\n * @param {string} [base=this.multibaseName] - Base encoding to use.\n * @returns {string}\n */\n toBaseEncodedString (base = this.multibaseName) {\n if (this.string && base === this.multibaseName) {\n return this.string\n }\n let str = null\n if (this.version === 0) {\n if (base !== 'base58btc') {\n throw new Error('not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()')\n }\n str = mh.toB58String(this.multihash)\n } else if (this.version === 1) {\n str = multibase.encode(base, this.buffer).toString()\n } else {\n throw new Error('unsupported version')\n }\n if (base === this.multibaseName) {\n // cache the string value\n Object.defineProperty(this, 'string', { value: str })\n }\n return str\n }\n\n /**\n * CID(QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n)\n *\n * @returns {String}\n */\n [Symbol.for('nodejs.util.inspect.custom')] () {\n return 'CID(' + this.toString() + ')'\n }\n\n toString (base) {\n return this.toBaseEncodedString(base)\n }\n\n /**\n * Serialize to a plain object.\n *\n * @returns {SerializedCID}\n */\n toJSON () {\n return {\n codec: this.codec,\n version: this.version,\n hash: this.multihash\n }\n }\n\n /**\n * Compare equality with another CID.\n *\n * @param {CID} other\n * @returns {bool}\n */\n equals (other) {\n return this.codec === other.codec &&\n this.version === other.version &&\n this.multihash.equals(other.multihash)\n }\n\n /**\n * Test if the given input is a valid CID object.\n * Throws if it is not.\n *\n * @param {any} other\n * @returns {void}\n */\n static validateCID (other) {\n const errorMsg = CIDUtil.checkCIDComponents(other)\n if (errorMsg) {\n throw new Error(errorMsg)\n }\n }\n}\n\nconst _CID = withIs(CID, {\n className: 'CID',\n symbolName: '@ipld/js-cid/CID'\n})\n\n_CID.codecs = codecs\n\nmodule.exports = _CID\n\n},{\"./cid-util\":9,\"buffer\":8,\"class-is\":11,\"multibase\":56,\"multicodec\":59,\"multicodec/src/base-table.json\":57,\"multihashes\":65}],11:[function(require,module,exports){\n'use strict';\n\nfunction withIs(Class, { className, symbolName }) {\n const symbol = Symbol.for(symbolName);\n\n const ClassIsWrapper = {\n // The code below assigns the class wrapper to an object to trick\n // JavaScript engines to show the name of the extended class when\n // logging an instances.\n // We are assigning an anonymous class (class wrapper) to the object\n // with key `className` to keep the correct name.\n // If this is not supported it falls back to logging `ClassIsWrapper`.\n [className]: class extends Class {\n constructor(...args) {\n super(...args);\n Object.defineProperty(this, symbol, { value: true });\n }\n\n get [Symbol.toStringTag]() {\n return className;\n }\n },\n }[className];\n\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\n\n return ClassIsWrapper;\n}\n\nfunction withIsProto(Class, { className, symbolName, withoutNew }) {\n const symbol = Symbol.for(symbolName);\n\n /* eslint-disable object-shorthand */\n const ClassIsWrapper = {\n [className]: function (...args) {\n if (withoutNew && !(this instanceof ClassIsWrapper)) {\n return new ClassIsWrapper(...args);\n }\n\n const _this = Class.call(this, ...args) || this;\n\n if (_this && !_this[symbol]) {\n Object.defineProperty(_this, symbol, { value: true });\n }\n\n return _this;\n },\n }[className];\n /* eslint-enable object-shorthand */\n\n ClassIsWrapper.prototype = Object.create(Class.prototype);\n ClassIsWrapper.prototype.constructor = ClassIsWrapper;\n\n Object.defineProperty(ClassIsWrapper.prototype, Symbol.toStringTag, {\n get() {\n return className;\n },\n });\n\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\n\n return ClassIsWrapper;\n}\n\nmodule.exports = withIs;\nmodule.exports.proto = withIsProto;\n\n},{}],12:[function(require,module,exports){\nmodule.exports={\n \"identity\": 0,\n \"ip4\": 4,\n \"tcp\": 6,\n \"sha1\": 17,\n \"sha2-256\": 18,\n \"sha2-512\": 19,\n \"sha3-512\": 20,\n \"sha3-384\": 21,\n \"sha3-256\": 22,\n \"sha3-224\": 23,\n \"shake-128\": 24,\n \"shake-256\": 25,\n \"keccak-224\": 26,\n \"keccak-256\": 27,\n \"keccak-384\": 28,\n \"keccak-512\": 29,\n \"dccp\": 33,\n \"murmur3-128\": 34,\n \"murmur3-32\": 35,\n \"ip6\": 41,\n \"ip6zone\": 42,\n \"path\": 47,\n \"multicodec\": 48,\n \"multihash\": 49,\n \"multiaddr\": 50,\n \"multibase\": 51,\n \"dns\": 53,\n \"dns4\": 54,\n \"dns6\": 55,\n \"dnsaddr\": 56,\n \"protobuf\": 80,\n \"cbor\": 81,\n \"raw\": 85,\n \"dbl-sha2-256\": 86,\n \"rlp\": 96,\n \"bencode\": 99,\n \"dag-pb\": 112,\n \"dag-cbor\": 113,\n \"libp2p-key\": 114,\n \"git-raw\": 120,\n \"torrent-info\": 123,\n \"torrent-file\": 124,\n \"leofcoin-block\": 129,\n \"leofcoin-tx\": 130,\n \"leofcoin-pr\": 131,\n \"sctp\": 132,\n \"eth-block\": 144,\n \"eth-block-list\": 145,\n \"eth-tx-trie\": 146,\n \"eth-tx\": 147,\n \"eth-tx-receipt-trie\": 148,\n \"eth-tx-receipt\": 149,\n \"eth-state-trie\": 150,\n \"eth-account-snapshot\": 151,\n \"eth-storage-trie\": 152,\n \"bitcoin-block\": 176,\n \"bitcoin-tx\": 177,\n \"zcash-block\": 192,\n \"zcash-tx\": 193,\n \"stellar-block\": 208,\n \"stellar-tx\": 209,\n \"md4\": 212,\n \"md5\": 213,\n \"bmt\": 214,\n \"decred-block\": 224,\n \"decred-tx\": 225,\n \"ipld-ns\": 226,\n \"ipfs-ns\": 227,\n \"swarm-ns\": 228,\n \"ipns-ns\": 229,\n \"zeronet\": 230,\n \"ed25519-pub\": 237,\n \"dash-block\": 240,\n \"dash-tx\": 241,\n \"swarm-manifest\": 250,\n \"swarm-feed\": 251,\n \"udp\": 273,\n \"p2p-webrtc-star\": 275,\n \"p2p-webrtc-direct\": 276,\n \"p2p-stardust\": 277,\n \"p2p-circuit\": 290,\n \"dag-json\": 297,\n \"udt\": 301,\n \"utp\": 302,\n \"unix\": 400,\n \"p2p\": 421,\n \"ipfs\": 421,\n \"https\": 443,\n \"onion\": 444,\n \"onion3\": 445,\n \"garlic64\": 446,\n \"garlic32\": 447,\n \"tls\": 448,\n \"quic\": 460,\n \"ws\": 477,\n \"wss\": 478,\n \"p2p-websocket-star\": 479,\n \"http\": 480,\n \"json\": 512,\n \"messagepack\": 513,\n \"x11\": 4352,\n \"blake2b-8\": 45569,\n \"blake2b-16\": 45570,\n \"blake2b-24\": 45571,\n \"blake2b-32\": 45572,\n \"blake2b-40\": 45573,\n \"blake2b-48\": 45574,\n \"blake2b-56\": 45575,\n \"blake2b-64\": 45576,\n \"blake2b-72\": 45577,\n \"blake2b-80\": 45578,\n \"blake2b-88\": 45579,\n \"blake2b-96\": 45580,\n \"blake2b-104\": 45581,\n \"blake2b-112\": 45582,\n \"blake2b-120\": 45583,\n \"blake2b-128\": 45584,\n \"blake2b-136\": 45585,\n \"blake2b-144\": 45586,\n \"blake2b-152\": 45587,\n \"blake2b-160\": 45588,\n \"blake2b-168\": 45589,\n \"blake2b-176\": 45590,\n \"blake2b-184\": 45591,\n \"blake2b-192\": 45592,\n \"blake2b-200\": 45593,\n \"blake2b-208\": 45594,\n \"blake2b-216\": 45595,\n \"blake2b-224\": 45596,\n \"blake2b-232\": 45597,\n \"blake2b-240\": 45598,\n \"blake2b-248\": 45599,\n \"blake2b-256\": 45600,\n \"blake2b-264\": 45601,\n \"blake2b-272\": 45602,\n \"blake2b-280\": 45603,\n \"blake2b-288\": 45604,\n \"blake2b-296\": 45605,\n \"blake2b-304\": 45606,\n \"blake2b-312\": 45607,\n \"blake2b-320\": 45608,\n \"blake2b-328\": 45609,\n \"blake2b-336\": 45610,\n \"blake2b-344\": 45611,\n \"blake2b-352\": 45612,\n \"blake2b-360\": 45613,\n \"blake2b-368\": 45614,\n \"blake2b-376\": 45615,\n \"blake2b-384\": 45616,\n \"blake2b-392\": 45617,\n \"blake2b-400\": 45618,\n \"blake2b-408\": 45619,\n \"blake2b-416\": 45620,\n \"blake2b-424\": 45621,\n \"blake2b-432\": 45622,\n \"blake2b-440\": 45623,\n \"blake2b-448\": 45624,\n \"blake2b-456\": 45625,\n \"blake2b-464\": 45626,\n \"blake2b-472\": 45627,\n \"blake2b-480\": 45628,\n \"blake2b-488\": 45629,\n \"blake2b-496\": 45630,\n \"blake2b-504\": 45631,\n \"blake2b-512\": 45632,\n \"blake2s-8\": 45633,\n \"blake2s-16\": 45634,\n \"blake2s-24\": 45635,\n \"blake2s-32\": 45636,\n \"blake2s-40\": 45637,\n \"blake2s-48\": 45638,\n \"blake2s-56\": 45639,\n \"blake2s-64\": 45640,\n \"blake2s-72\": 45641,\n \"blake2s-80\": 45642,\n \"blake2s-88\": 45643,\n \"blake2s-96\": 45644,\n \"blake2s-104\": 45645,\n \"blake2s-112\": 45646,\n \"blake2s-120\": 45647,\n \"blake2s-128\": 45648,\n \"blake2s-136\": 45649,\n \"blake2s-144\": 45650,\n \"blake2s-152\": 45651,\n \"blake2s-160\": 45652,\n \"blake2s-168\": 45653,\n \"blake2s-176\": 45654,\n \"blake2s-184\": 45655,\n \"blake2s-192\": 45656,\n \"blake2s-200\": 45657,\n \"blake2s-208\": 45658,\n \"blake2s-216\": 45659,\n \"blake2s-224\": 45660,\n \"blake2s-232\": 45661,\n \"blake2s-240\": 45662,\n \"blake2s-248\": 45663,\n \"blake2s-256\": 45664,\n \"skein256-8\": 45825,\n \"skein256-16\": 45826,\n \"skein256-24\": 45827,\n \"skein256-32\": 45828,\n \"skein256-40\": 45829,\n \"skein256-48\": 45830,\n \"skein256-56\": 45831,\n \"skein256-64\": 45832,\n \"skein256-72\": 45833,\n \"skein256-80\": 45834,\n \"skein256-88\": 45835,\n \"skein256-96\": 45836,\n \"skein256-104\": 45837,\n \"skein256-112\": 45838,\n \"skein256-120\": 45839,\n \"skein256-128\": 45840,\n \"skein256-136\": 45841,\n \"skein256-144\": 45842,\n \"skein256-152\": 45843,\n \"skein256-160\": 45844,\n \"skein256-168\": 45845,\n \"skein256-176\": 45846,\n \"skein256-184\": 45847,\n \"skein256-192\": 45848,\n \"skein256-200\": 45849,\n \"skein256-208\": 45850,\n \"skein256-216\": 45851,\n \"skein256-224\": 45852,\n \"skein256-232\": 45853,\n \"skein256-240\": 45854,\n \"skein256-248\": 45855,\n \"skein256-256\": 45856,\n \"skein512-8\": 45857,\n \"skein512-16\": 45858,\n \"skein512-24\": 45859,\n \"skein512-32\": 45860,\n \"skein512-40\": 45861,\n \"skein512-48\": 45862,\n \"skein512-56\": 45863,\n \"skein512-64\": 45864,\n \"skein512-72\": 45865,\n \"skein512-80\": 45866,\n \"skein512-88\": 45867,\n \"skein512-96\": 45868,\n \"skein512-104\": 45869,\n \"skein512-112\": 45870,\n \"skein512-120\": 45871,\n \"skein512-128\": 45872,\n \"skein512-136\": 45873,\n \"skein512-144\": 45874,\n \"skein512-152\": 45875,\n \"skein512-160\": 45876,\n \"skein512-168\": 45877,\n \"skein512-176\": 45878,\n \"skein512-184\": 45879,\n \"skein512-192\": 45880,\n \"skein512-200\": 45881,\n \"skein512-208\": 45882,\n \"skein512-216\": 45883,\n \"skein512-224\": 45884,\n \"skein512-232\": 45885,\n \"skein512-240\": 45886,\n \"skein512-248\": 45887,\n \"skein512-256\": 45888,\n \"skein512-264\": 45889,\n \"skein512-272\": 45890,\n \"skein512-280\": 45891,\n \"skein512-288\": 45892,\n \"skein512-296\": 45893,\n \"skein512-304\": 45894,\n \"skein512-312\": 45895,\n \"skein512-320\": 45896,\n \"skein512-328\": 45897,\n \"skein512-336\": 45898,\n \"skein512-344\": 45899,\n \"skein512-352\": 45900,\n \"skein512-360\": 45901,\n \"skein512-368\": 45902,\n \"skein512-376\": 45903,\n \"skein512-384\": 45904,\n \"skein512-392\": 45905,\n \"skein512-400\": 45906,\n \"skein512-408\": 45907,\n \"skein512-416\": 45908,\n \"skein512-424\": 45909,\n \"skein512-432\": 45910,\n \"skein512-440\": 45911,\n \"skein512-448\": 45912,\n \"skein512-456\": 45913,\n \"skein512-464\": 45914,\n \"skein512-472\": 45915,\n \"skein512-480\": 45916,\n \"skein512-488\": 45917,\n \"skein512-496\": 45918,\n \"skein512-504\": 45919,\n \"skein512-512\": 45920,\n \"skein1024-8\": 45921,\n \"skein1024-16\": 45922,\n \"skein1024-24\": 45923,\n \"skein1024-32\": 45924,\n \"skein1024-40\": 45925,\n \"skein1024-48\": 45926,\n \"skein1024-56\": 45927,\n \"skein1024-64\": 45928,\n \"skein1024-72\": 45929,\n \"skein1024-80\": 45930,\n \"skein1024-88\": 45931,\n \"skein1024-96\": 45932,\n \"skein1024-104\": 45933,\n \"skein1024-112\": 45934,\n \"skein1024-120\": 45935,\n \"skein1024-128\": 45936,\n \"skein1024-136\": 45937,\n \"skein1024-144\": 45938,\n \"skein1024-152\": 45939,\n \"skein1024-160\": 45940,\n \"skein1024-168\": 45941,\n \"skein1024-176\": 45942,\n \"skein1024-184\": 45943,\n \"skein1024-192\": 45944,\n \"skein1024-200\": 45945,\n \"skein1024-208\": 45946,\n \"skein1024-216\": 45947,\n \"skein1024-224\": 45948,\n \"skein1024-232\": 45949,\n \"skein1024-240\": 45950,\n \"skein1024-248\": 45951,\n \"skein1024-256\": 45952,\n \"skein1024-264\": 45953,\n \"skein1024-272\": 45954,\n \"skein1024-280\": 45955,\n \"skein1024-288\": 45956,\n \"skein1024-296\": 45957,\n \"skein1024-304\": 45958,\n \"skein1024-312\": 45959,\n \"skein1024-320\": 45960,\n \"skein1024-328\": 45961,\n \"skein1024-336\": 45962,\n \"skein1024-344\": 45963,\n \"skein1024-352\": 45964,\n \"skein1024-360\": 45965,\n \"skein1024-368\": 45966,\n \"skein1024-376\": 45967,\n \"skein1024-384\": 45968,\n \"skein1024-392\": 45969,\n \"skein1024-400\": 45970,\n \"skein1024-408\": 45971,\n \"skein1024-416\": 45972,\n \"skein1024-424\": 45973,\n \"skein1024-432\": 45974,\n \"skein1024-440\": 45975,\n \"skein1024-448\": 45976,\n \"skein1024-456\": 45977,\n \"skein1024-464\": 45978,\n \"skein1024-472\": 45979,\n \"skein1024-480\": 45980,\n \"skein1024-488\": 45981,\n \"skein1024-496\": 45982,\n \"skein1024-504\": 45983,\n \"skein1024-512\": 45984,\n \"skein1024-520\": 45985,\n \"skein1024-528\": 45986,\n \"skein1024-536\": 45987,\n \"skein1024-544\": 45988,\n \"skein1024-552\": 45989,\n \"skein1024-560\": 45990,\n \"skein1024-568\": 45991,\n \"skein1024-576\": 45992,\n \"skein1024-584\": 45993,\n \"skein1024-592\": 45994,\n \"skein1024-600\": 45995,\n \"skein1024-608\": 45996,\n \"skein1024-616\": 45997,\n \"skein1024-624\": 45998,\n \"skein1024-632\": 45999,\n \"skein1024-640\": 46000,\n \"skein1024-648\": 46001,\n \"skein1024-656\": 46002,\n \"skein1024-664\": 46003,\n \"skein1024-672\": 46004,\n \"skein1024-680\": 46005,\n \"skein1024-688\": 46006,\n \"skein1024-696\": 46007,\n \"skein1024-704\": 46008,\n \"skein1024-712\": 46009,\n \"skein1024-720\": 46010,\n \"skein1024-728\": 46011,\n \"skein1024-736\": 46012,\n \"skein1024-744\": 46013,\n \"skein1024-752\": 46014,\n \"skein1024-760\": 46015,\n \"skein1024-768\": 46016,\n \"skein1024-776\": 46017,\n \"skein1024-784\": 46018,\n \"skein1024-792\": 46019,\n \"skein1024-800\": 46020,\n \"skein1024-808\": 46021,\n \"skein1024-816\": 46022,\n \"skein1024-824\": 46023,\n \"skein1024-832\": 46024,\n \"skein1024-840\": 46025,\n \"skein1024-848\": 46026,\n \"skein1024-856\": 46027,\n \"skein1024-864\": 46028,\n \"skein1024-872\": 46029,\n \"skein1024-880\": 46030,\n \"skein1024-888\": 46031,\n \"skein1024-896\": 46032,\n \"skein1024-904\": 46033,\n \"skein1024-912\": 46034,\n \"skein1024-920\": 46035,\n \"skein1024-928\": 46036,\n \"skein1024-936\": 46037,\n \"skein1024-944\": 46038,\n \"skein1024-952\": 46039,\n \"skein1024-960\": 46040,\n \"skein1024-968\": 46041,\n \"skein1024-976\": 46042,\n \"skein1024-984\": 46043,\n \"skein1024-992\": 46044,\n \"skein1024-1000\": 46045,\n \"skein1024-1008\": 46046,\n \"skein1024-1016\": 46047,\n \"skein1024-1024\": 46048,\n \"holochain-adr-v0\": 8417572,\n \"holochain-adr-v1\": 8483108,\n \"holochain-key-v0\": 9728292,\n \"holochain-key-v1\": 9793828,\n \"holochain-sig-v0\": 10645796,\n \"holochain-sig-v1\": 10711332\n}\n},{}],13:[function(require,module,exports){\n'use strict'\n\nconst table = require('./base-table.json')\n\n// map for codecConstant -> code\nconst constants = {}\n\nfor (const [name, code] of Object.entries(table)) {\n constants[name.toUpperCase().replace(/-/g, '_')] = code\n}\n\nmodule.exports = Object.freeze(constants)\n\n},{\"./base-table.json\":12}],14:[function(require,module,exports){\n/**\n * Implementation of the multicodec specification.\n *\n * @module multicodec\n * @example\n * const multicodec = require('multicodec')\n *\n * const prefixedProtobuf = multicodec.addPrefix('protobuf', protobufBuffer)\n * // prefixedProtobuf 0x50...\n *\n */\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst varint = require('varint')\nconst intTable = require('./int-table')\nconst codecNameToCodeVarint = require('./varint-table')\nconst util = require('./util')\n\nexports = module.exports\n\n/**\n * Prefix a buffer with a multicodec-packed.\n *\n * @param {string|number} multicodecStrOrCode\n * @param {Buffer} data\n * @returns {Buffer}\n */\nexports.addPrefix = (multicodecStrOrCode, data) => {\n let prefix\n\n if (Buffer.isBuffer(multicodecStrOrCode)) {\n prefix = util.varintBufferEncode(multicodecStrOrCode)\n } else {\n if (codecNameToCodeVarint[multicodecStrOrCode]) {\n prefix = codecNameToCodeVarint[multicodecStrOrCode]\n } else {\n throw new Error('multicodec not recognized')\n }\n }\n return Buffer.concat([prefix, data])\n}\n\n/**\n * Decapsulate the multicodec-packed prefix from the data.\n *\n * @param {Buffer} data\n * @returns {Buffer}\n */\nexports.rmPrefix = (data) => {\n varint.decode(data)\n return data.slice(varint.decode.bytes)\n}\n\n/**\n * Get the codec of the prefixed data.\n * @param {Buffer} prefixedData\n * @returns {string}\n */\nexports.getCodec = (prefixedData) => {\n const code = varint.decode(prefixedData)\n const codecName = intTable.get(code)\n if (codecName === undefined) {\n throw new Error(`Code ${code} not found`)\n }\n return codecName\n}\n\n/**\n * Get the name of the codec.\n * @param {number} codec\n * @returns {string}\n */\nexports.getName = (codec) => {\n return intTable.get(codec)\n}\n\n/**\n * Get the code of the codec\n * @param {string} name\n * @returns {number}\n */\nexports.getNumber = (name) => {\n const code = codecNameToCodeVarint[name]\n if (code === undefined) {\n throw new Error('Codec `' + name + '` not found')\n }\n return util.varintBufferDecode(code)[0]\n}\n\n/**\n * Get the code of the prefixed data.\n * @param {Buffer} prefixedData\n * @returns {number}\n */\nexports.getCode = (prefixedData) => {\n return varint.decode(prefixedData)\n}\n\n/**\n * Get the code as varint of a codec name.\n * @param {string} codecName\n * @returns {Buffer}\n */\nexports.getCodeVarint = (codecName) => {\n const code = codecNameToCodeVarint[codecName]\n if (code === undefined) {\n throw new Error('Codec `' + codecName + '` not found')\n }\n return code\n}\n\n/**\n * Get the varint of a code.\n * @param {Number} code\n * @returns {Array.<number>}\n */\nexports.getVarint = (code) => {\n return varint.encode(code)\n}\n\n// Make the constants top-level constants\nconst constants = require('./constants')\nObject.assign(exports, constants)\n\n// Human friendly names for printing, e.g. in error messages\nexports.print = require('./print')\n\n},{\"./constants\":13,\"./int-table\":15,\"./print\":16,\"./util\":17,\"./varint-table\":18,\"buffer\":8,\"varint\":88}],15:[function(require,module,exports){\n'use strict'\nconst baseTable = require('./base-table.json')\n\n// map for hexString -> codecName\nconst nameTable = new Map()\n\nfor (const encodingName in baseTable) {\n const code = baseTable[encodingName]\n nameTable.set(code, encodingName)\n}\n\nmodule.exports = Object.freeze(nameTable)\n\n},{\"./base-table.json\":12}],16:[function(require,module,exports){\n'use strict'\n\nconst table = require('./base-table.json')\n\n// map for code -> print friendly name\nconst tableByCode = {}\n\nfor (const [name, code] of Object.entries(table)) {\n if (tableByCode[code] === undefined) tableByCode[code] = name\n}\n\nmodule.exports = Object.freeze(tableByCode)\n\n},{\"./base-table.json\":12}],17:[function(require,module,exports){\n'use strict'\nconst varint = require('varint')\nconst { Buffer } = require('buffer')\n\nmodule.exports = {\n numberToBuffer,\n bufferToNumber,\n varintBufferEncode,\n varintBufferDecode,\n varintEncode\n}\n\nfunction bufferToNumber (buf) {\n return parseInt(buf.toString('hex'), 16)\n}\n\nfunction numberToBuffer (num) {\n let hexString = num.toString(16)\n if (hexString.length % 2 === 1) {\n hexString = '0' + hexString\n }\n return Buffer.from(hexString, 'hex')\n}\n\nfunction varintBufferEncode (input) {\n return Buffer.from(varint.encode(bufferToNumber(input)))\n}\n\nfunction varintBufferDecode (input) {\n return numberToBuffer(varint.decode(input))\n}\n\nfunction varintEncode (num) {\n return Buffer.from(varint.encode(num))\n}\n\n},{\"buffer\":8,\"varint\":88}],18:[function(require,module,exports){\n'use strict'\n\nconst baseTable = require('./base-table.json')\nconst varintEncode = require('./util').varintEncode\n\n// map for codecName -> codeVarintBuffer\nconst varintTable = {}\n\nfor (const encodingName in baseTable) {\n const code = baseTable[encodingName]\n varintTable[encodingName] = varintEncode(code)\n}\n\nmodule.exports = Object.freeze(varintTable)\n\n},{\"./base-table.json\":12,\"./util\":17}],19:[function(require,module,exports){\narguments[4][9][0].apply(exports,arguments)\n},{\"buffer\":8,\"dup\":9,\"multihashes\":65}],20:[function(require,module,exports){\narguments[4][10][0].apply(exports,arguments)\n},{\"./cid-util\":19,\"buffer\":8,\"class-is\":11,\"dup\":10,\"multibase\":26,\"multicodec\":14,\"multicodec/src/base-table.json\":12,\"multihashes\":65}],21:[function(require,module,exports){\n'use strict'\n\nclass Base {\n constructor (name, code, implementation, alphabet) {\n this.name = name\n this.code = code\n this.alphabet = alphabet\n if (implementation && alphabet) {\n this.engine = implementation(alphabet)\n }\n }\n\n encode (stringOrBuffer) {\n return this.engine.encode(stringOrBuffer)\n }\n\n decode (stringOrBuffer) {\n return this.engine.decode(stringOrBuffer)\n }\n\n isImplemented () {\n return this.engine\n }\n}\n\nmodule.exports = Base\n\n},{}],22:[function(require,module,exports){\n'use strict'\nconst { Buffer } = require('buffer')\n\nmodule.exports = function base16 (alphabet) {\n return {\n encode (input) {\n if (typeof input === 'string') {\n return Buffer.from(input).toString('hex')\n }\n return input.toString('hex')\n },\n decode (input) {\n for (const char of input) {\n if (alphabet.indexOf(char) < 0) {\n throw new Error('invalid base16 character')\n }\n }\n return Buffer.from(input, 'hex')\n }\n }\n}\n\n},{\"buffer\":8}],23:[function(require,module,exports){\n'use strict'\n\nfunction decode (input, alphabet) {\n input = input.replace(new RegExp('=', 'g'), '')\n const length = input.length\n\n let bits = 0\n let value = 0\n\n let index = 0\n const output = new Uint8Array((length * 5 / 8) | 0)\n\n for (let i = 0; i < length; i++) {\n value = (value << 5) | alphabet.indexOf(input[i])\n bits += 5\n\n if (bits >= 8) {\n output[index++] = (value >>> (bits - 8)) & 255\n bits -= 8\n }\n }\n\n return output.buffer\n}\n\nfunction encode (buffer, alphabet) {\n const length = buffer.byteLength\n const view = new Uint8Array(buffer)\n const padding = alphabet.indexOf('=') === alphabet.length - 1\n\n if (padding) {\n alphabet = alphabet.substring(0, alphabet.length - 1)\n }\n\n let bits = 0\n let value = 0\n let output = ''\n\n for (let i = 0; i < length; i++) {\n value = (value << 8) | view[i]\n bits += 8\n\n while (bits >= 5) {\n output += alphabet[(value >>> (bits - 5)) & 31]\n bits -= 5\n }\n }\n\n if (bits > 0) {\n output += alphabet[(value << (5 - bits)) & 31]\n }\n\n if (padding) {\n while ((output.length % 8) !== 0) {\n output += '='\n }\n }\n\n return output\n}\n\nmodule.exports = function base32 (alphabet) {\n return {\n encode (input) {\n if (typeof input === 'string') {\n return encode(Uint8Array.from(input), alphabet)\n }\n\n return encode(input, alphabet)\n },\n decode (input) {\n for (const char of input) {\n if (alphabet.indexOf(char) < 0) {\n throw new Error('invalid base32 character')\n }\n }\n\n return decode(input, alphabet)\n }\n }\n}\n\n},{}],24:[function(require,module,exports){\n'use strict'\nconst { Buffer } = require('buffer')\n\nmodule.exports = function base64 (alphabet) {\n // The alphabet is only used to know:\n // 1. If padding is enabled (must contain '=')\n // 2. If the output must be url-safe (must contain '-' and '_')\n // 3. If the input of the output function is valid\n // The alphabets from RFC 4648 are always used.\n const padding = alphabet.indexOf('=') > -1\n const url = alphabet.indexOf('-') > -1 && alphabet.indexOf('_') > -1\n\n return {\n encode (input) {\n let output = ''\n\n if (typeof input === 'string') {\n output = Buffer.from(input).toString('base64')\n } else {\n output = input.toString('base64')\n }\n\n if (url) {\n output = output.replace(/\\+/g, '-').replace(/\\//g, '_')\n }\n\n const pad = output.indexOf('=')\n if (pad > 0 && !padding) {\n output = output.substring(0, pad)\n }\n\n return output\n },\n decode (input) {\n for (const char of input) {\n if (alphabet.indexOf(char) < 0) {\n throw new Error('invalid base64 character')\n }\n }\n\n return Buffer.from(input, 'base64')\n }\n }\n}\n\n},{\"buffer\":8}],25:[function(require,module,exports){\n'use strict'\n\nconst Base = require('./base.js')\nconst baseX = require('base-x')\nconst base16 = require('./base16')\nconst base32 = require('./base32')\nconst base64 = require('./base64')\n\n// name, code, implementation, alphabet\nconst constants = [\n ['base1', '1', '', '1'],\n ['base2', '0', baseX, '01'],\n ['base8', '7', baseX, '01234567'],\n ['base10', '9', baseX, '0123456789'],\n ['base16', 'f', base16, '0123456789abcdef'],\n ['base32', 'b', base32, 'abcdefghijklmnopqrstuvwxyz234567'],\n ['base32pad', 'c', base32, 'abcdefghijklmnopqrstuvwxyz234567='],\n ['base32hex', 'v', base32, '0123456789abcdefghijklmnopqrstuv'],\n ['base32hexpad', 't', base32, '0123456789abcdefghijklmnopqrstuv='],\n ['base32z', 'h', base32, 'ybndrfg8ejkmcpqxot1uwisza345h769'],\n ['base58flickr', 'Z', baseX, '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'],\n ['base58btc', 'z', baseX, '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'],\n ['base64', 'm', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'],\n ['base64pad', 'M', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='],\n ['base64url', 'u', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'],\n ['base64urlpad', 'U', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=']\n]\n\nconst names = constants.reduce((prev, tupple) => {\n prev[tupple[0]] = new Base(tupple[0], tupple[1], tupple[2], tupple[3])\n return prev\n}, {})\n\nconst codes = constants.reduce((prev, tupple) => {\n prev[tupple[1]] = names[tupple[0]]\n return prev\n}, {})\n\nmodule.exports = {\n names: names,\n codes: codes\n}\n\n},{\"./base.js\":21,\"./base16\":22,\"./base32\":23,\"./base64\":24,\"base-x\":6}],26:[function(require,module,exports){\n/**\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\n * @module Multibase\n */\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst constants = require('./constants')\n\nexports = module.exports = multibase\nexports.encode = encode\nexports.decode = decode\nexports.isEncoded = isEncoded\nexports.names = Object.freeze(Object.keys(constants.names))\nexports.codes = Object.freeze(Object.keys(constants.codes))\n\nconst errNotSupported = new Error('Unsupported encoding')\n\n/**\n * Create a new buffer with the multibase varint+code.\n *\n * @param {string|number} nameOrCode - The multibase name or code number.\n * @param {Buffer} buf - The data to be prefixed with multibase.\n * @memberof Multibase\n * @returns {Buffer}\n */\nfunction multibase (nameOrCode, buf) {\n if (!buf) {\n throw new Error('requires an encoded buffer')\n }\n const base = getBase(nameOrCode)\n const codeBuf = Buffer.from(base.code)\n\n const name = base.name\n validEncode(name, buf)\n return Buffer.concat([codeBuf, buf])\n}\n\n/**\n * Encode data with the specified base and add the multibase prefix.\n *\n * @param {string|number} nameOrCode - The multibase name or code number.\n * @param {Buffer} buf - The data to be encoded.\n * @returns {Buffer}\n * @memberof Multibase\n */\nfunction encode (nameOrCode, buf) {\n const base = getBase(nameOrCode)\n const name = base.name\n\n return multibase(name, Buffer.from(base.encode(buf)))\n}\n\n/**\n * Takes a buffer or string encoded with multibase header, decodes it and\n * returns the decoded buffer\n *\n * @param {Buffer|string} bufOrString\n * @returns {Buffer}\n * @memberof Multibase\n *\n */\nfunction decode (bufOrString) {\n if (Buffer.isBuffer(bufOrString)) {\n bufOrString = bufOrString.toString()\n }\n\n const code = bufOrString.substring(0, 1)\n bufOrString = bufOrString.substring(1, bufOrString.length)\n\n if (typeof bufOrString === 'string') {\n bufOrString = Buffer.from(bufOrString)\n }\n\n const base = getBase(code)\n return Buffer.from(base.decode(bufOrString.toString()))\n}\n\n/**\n * Is the given data multibase encoded?\n *\n * @param {Buffer|string} bufOrString\n * @returns {boolean}\n * @memberof Multibase\n */\nfunction isEncoded (bufOrString) {\n if (Buffer.isBuffer(bufOrString)) {\n bufOrString = bufOrString.toString()\n }\n\n // Ensure bufOrString is a string\n if (Object.prototype.toString.call(bufOrString) !== '[object String]') {\n return false\n }\n\n const code = bufOrString.substring(0, 1)\n try {\n const base = getBase(code)\n return base.name\n } catch (err) {\n return false\n }\n}\n\n/**\n * @param {string} name\n * @param {Buffer} buf\n * @private\n * @returns {undefined}\n */\nfunction validEncode (name, buf) {\n const base = getBase(name)\n base.decode(buf.toString())\n}\n\nfunction getBase (nameOrCode) {\n let base\n\n if (constants.names[nameOrCode]) {\n base = constants.names[nameOrCode]\n } else if (constants.codes[nameOrCode]) {\n base = constants.codes[nameOrCode]\n } else {\n throw errNotSupported\n }\n\n if (!base.isImplemented()) {\n throw new Error('Base ' + nameOrCode + ' is not implemented yet')\n }\n\n return base\n}\n\n},{\"./constants\":25,\"buffer\":8}],27:[function(require,module,exports){\narguments[4][12][0].apply(exports,arguments)\n},{\"dup\":12}],28:[function(require,module,exports){\narguments[4][13][0].apply(exports,arguments)\n},{\"./base-table.json\":27,\"dup\":13}],29:[function(require,module,exports){\n(function (Buffer){\n/**\n * Implementation of the multicodec specification.\n *\n * @module multicodec\n * @example\n * const multicodec = require('multicodec')\n *\n * const prefixedProtobuf = multicodec.addPrefix('protobuf', protobufBuffer)\n * // prefixedProtobuf 0x50...\n *\n */\n'use strict'\n\nconst varint = require('varint')\nconst intTable = require('./int-table')\nconst codecNameToCodeVarint = require('./varint-table')\nconst util = require('./util')\n\nexports = module.exports\n\n/**\n * Prefix a buffer with a multicodec-packed.\n *\n * @param {string|number} multicodecStrOrCode\n * @param {Buffer} data\n * @returns {Buffer}\n */\nexports.addPrefix = (multicodecStrOrCode, data) => {\n let prefix\n\n if (Buffer.isBuffer(multicodecStrOrCode)) {\n prefix = util.varintBufferEncode(multicodecStrOrCode)\n } else {\n if (codecNameToCodeVarint[multicodecStrOrCode]) {\n prefix = codecNameToCodeVarint[multicodecStrOrCode]\n } else {\n throw new Error('multicodec not recognized')\n }\n }\n return Buffer.concat([prefix, data])\n}\n\n/**\n * Decapsulate the multicodec-packed prefix from the data.\n *\n * @param {Buffer} data\n * @returns {Buffer}\n */\nexports.rmPrefix = (data) => {\n varint.decode(data)\n return data.slice(varint.decode.bytes)\n}\n\n/**\n * Get the codec of the prefixed data.\n * @param {Buffer} prefixedData\n * @returns {string}\n */\nexports.getCodec = (prefixedData) => {\n const code = varint.decode(prefixedData)\n const codecName = intTable.get(code)\n if (codecName === undefined) {\n throw new Error(`Code ${code} not found`)\n }\n return codecName\n}\n\n/**\n * Get the name of the codec.\n * @param {number} codec\n * @returns {string}\n */\nexports.getName = (codec) => {\n return intTable.get(codec)\n}\n\n/**\n * Get the code of the codec\n * @param {string} name\n * @returns {number}\n */\nexports.getNumber = (name) => {\n const code = codecNameToCodeVarint[name]\n if (code === undefined) {\n throw new Error('Codec `' + name + '` not found')\n }\n return util.varintBufferDecode(code)[0]\n}\n\n/**\n * Get the code of the prefixed data.\n * @param {Buffer} prefixedData\n * @returns {number}\n */\nexports.getCode = (prefixedData) => {\n return varint.decode(prefixedData)\n}\n\n/**\n * Get the code as varint of a codec name.\n * @param {string} codecName\n * @returns {Buffer}\n */\nexports.getCodeVarint = (codecName) => {\n const code = codecNameToCodeVarint[codecName]\n if (code === undefined) {\n throw new Error('Codec `' + codecName + '` not found')\n }\n return code\n}\n\n/**\n * Get the varint of a code.\n * @param {Number} code\n * @returns {Array.<number>}\n */\nexports.getVarint = (code) => {\n return varint.encode(code)\n}\n\n// Make the constants top-level constants\nconst constants = require('./constants')\nObject.assign(exports, constants)\n\n// Human friendly names for printing, e.g. in error messages\nexports.print = require('./print')\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./constants\":28,\"./int-table\":30,\"./print\":31,\"./util\":32,\"./varint-table\":33,\"buffer\":8,\"varint\":88}],30:[function(require,module,exports){\narguments[4][15][0].apply(exports,arguments)\n},{\"./base-table.json\":27,\"dup\":15}],31:[function(require,module,exports){\narguments[4][16][0].apply(exports,arguments)\n},{\"./base-table.json\":27,\"dup\":16}],32:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nconst varint = require('varint')\n\nmodule.exports = {\n numberToBuffer,\n bufferToNumber,\n varintBufferEncode,\n varintBufferDecode,\n varintEncode\n}\n\nfunction bufferToNumber (buf) {\n return parseInt(buf.toString('hex'), 16)\n}\n\nfunction numberToBuffer (num) {\n let hexString = num.toString(16)\n if (hexString.length % 2 === 1) {\n hexString = '0' + hexString\n }\n return Buffer.from(hexString, 'hex')\n}\n\nfunction varintBufferEncode (input) {\n return Buffer.from(varint.encode(bufferToNumber(input)))\n}\n\nfunction varintBufferDecode (input) {\n return numberToBuffer(varint.decode(input))\n}\n\nfunction varintEncode (num) {\n return Buffer.from(varint.encode(num))\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":8,\"varint\":88}],33:[function(require,module,exports){\narguments[4][18][0].apply(exports,arguments)\n},{\"./base-table.json\":27,\"./util\":32,\"dup\":18}],34:[function(require,module,exports){\n/*\r\n\tISC License\r\n\r\n\tCopyright (c) 2019, Pierre-Louis Despaigne\r\n\r\n\tPermission to use, copy, modify, and/or distribute this software for any\r\n\tpurpose with or without fee is hereby granted, provided that the above\r\n\tcopyright notice and this permission notice appear in all copies.\r\n\r\n\tTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\r\n\tWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\r\n\tMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\r\n\tANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\r\n\tWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\r\n\tACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\r\n\tOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r\n*/\r\n\r\nconst CID = require('cids');\r\n\r\n/**\r\n * Take any ipfsHash and convert it to a CID v1 encoded in base32.\r\n * @param {string} ipfsHash a regular ipfs hash either a cid v0 or v1 (v1 will remain unchanged)\r\n * @return {string} the resulting ipfs hash as a cid v1\r\n */\r\nconst cidV0ToV1Base32 = (ipfsHash) => {\r\n\tlet cid = new CID(ipfsHash);\r\n\tif (cid.version === 0) {\r\n\t\tcid = cid.toV1();\r\n\t}\r\n\treturn cid.toString('base32');\r\n}\r\n\r\nexports.cidV0ToV1Base32 = cidV0ToV1Base32;\r\n\n},{\"cids\":20}],35:[function(require,module,exports){\n/*\r\n\tISC License\r\n\r\n\tCopyright (c) 2019, Pierre-Louis Despaigne\r\n\r\n\tPermission to use, copy, modify, and/or distribute this software for any\r\n\tpurpose with or without fee is hereby granted, provided that the above\r\n\tcopyright notice and this permission notice appear in all copies.\r\n\r\n\tTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\r\n\tWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\r\n\tMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\r\n\tANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\r\n\tWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\r\n\tACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\r\n\tOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r\n*/\r\n\r\nconst multiC = require('multicodec');\r\n\r\nconst { hexStringToBuffer, profiles } = require('./profiles');\r\nconst { cidV0ToV1Base32 } = require('./helpers');\r\n\r\nmodule.exports = {\r\n\r\n\t//export some helpers functions\r\n\thelpers: {\r\n\t\tcidV0ToV1Base32,\r\n\t},\r\n\r\n\t/**\r\n\t* Decode a Content Hash.\r\n\t* @param {string} hash an hex string containing a content hash\r\n\t* @return {string} the decoded content\r\n\t*/\r\n\tdecode: function (contentHash) {\r\n\t\tconst buffer = hexStringToBuffer(contentHash);\r\n\t\tconst codec = multiC.getCodec(buffer);\r\n\t\tconst value = multiC.rmPrefix(buffer);\r\n\t\tlet profile = profiles[codec];\r\n\t\tif (!profile) profile = profiles['default'];\r\n\t\treturn profile.decode(value);\r\n\t},\r\n\r\n\t/**\r\n\t* Encode an IPFS address into a content hash\r\n\t* @param {string} ipfsHash string containing an IPFS address\r\n\t* @return {string} the resulting content hash\r\n\t*/\r\n\tfromIpfs: function (ipfsHash) {\r\n\t\treturn this.encode('ipfs-ns', ipfsHash);\r\n\t},\r\n\r\n\t/**\r\n\t* Encode a Swarm address into a content hash\r\n\t* @param {string} swarmHash string containing a Swarm address\r\n\t* @return {string} the resulting content hash\r\n\t*/\r\n\tfromSwarm: function (swarmHash) {\r\n\t\treturn this.encode('swarm-ns', swarmHash);\r\n\t},\r\n\r\n\t/**\r\n\t* General purpose encoding function\r\n * @param {string} codec \r\n * @param {string} value \r\n */\r\n\tencode: function (codec, value) {\r\n\t\tlet profile = profiles[codec];\r\n\t\tif (!profile) profile = profiles['default'];\r\n\t\tconst encodedValue = profile.encode(value);\r\n\t\treturn multiC.addPrefix(codec, encodedValue).toString('hex');\r\n\t},\r\n\r\n\t/**\r\n\t* Extract the codec of a content hash\r\n\t* @param {string} hash hex string containing a content hash\r\n\t* @return {string} the extracted codec\r\n\t*/\r\n\tgetCodec: function (hash) {\r\n\t\tlet buffer = hexStringToBuffer(hash);\r\n\t\treturn multiC.getCodec(buffer);\r\n\t},\r\n}\r\n\n},{\"./helpers\":34,\"./profiles\":36,\"multicodec\":29}],36:[function(require,module,exports){\n(function (Buffer){\n/*\r\n\tISC License\r\n\r\n\tCopyright (c) 2019, Pierre-Louis Despaigne\r\n\r\n\tPermission to use, copy, modify, and/or distribute this software for any\r\n\tpurpose with or without fee is hereby granted, provided that the above\r\n\tcopyright notice and this permission notice appear in all copies.\r\n\r\n\tTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\r\n\tWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\r\n\tMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\r\n\tANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\r\n\tWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\r\n\tACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\r\n\tOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r\n*/\r\n\r\nconst CID = require('cids');\r\nconst multiH = require('multihashes');\r\n\r\n/**\r\n * Convert an hexadecimal string to a Buffer, the string can start with or without '0x'\r\n * @param {string} hex an hexadecimal value\r\n * @return {Buffer} the resulting Buffer\r\n */\r\nconst hexStringToBuffer = (hex) => {\r\n\tlet prefix = hex.slice(0, 2);\r\n\tlet value = hex.slice(2);\r\n\tlet res = '';\r\n\tif (prefix === '0x') res = value;\r\n\telse res = hex;\r\n\treturn multiH.fromHexString(res);\r\n}\r\n\r\n/**\r\n* list of known encoding,\r\n* encoding should be a function that takes a `string` input,\r\n* and return a `Buffer` result\r\n*/\r\nconst encodes = {\r\n /**\r\n * @param {string} value\r\n * @return {Buffer}\r\n */\r\n swarm: (value) => {\r\n const multihash = multiH.encode(hexStringToBuffer(value), 'keccak-256');\r\n\t\treturn new CID(1, 'swarm-manifest', multihash).buffer;\r\n },\r\n /**\r\n * @param {string} value\r\n * @return {Buffer}\r\n */\r\n ipfs: (value) => {\r\n const multihash = multiH.fromB58String(value);\r\n return new CID(1, 'dag-pb', multihash).buffer;\r\n },\r\n /**\r\n * @param {string} value\r\n * @return {Buffer}\r\n */\r\n utf8: (value) => {\r\n return Buffer.from(value, 'utf8');\r\n },\r\n};\r\n\r\n/** \r\n* list of known decoding,\r\n* decoding should be a function that takes a `Buffer` input,\r\n* and return a `string` result\r\n*/\r\nconst decodes = {\r\n /**\r\n * @param {Buffer} value \r\n */\r\n hexMultiHash: (value) => {\r\n const cid = new CID(value);\r\n return multiH.decode(cid.multihash).digest.toString('hex');\r\n },\r\n /**\r\n * @param {Buffer} value \r\n */\r\n b58MultiHash: (value) => {\r\n const cid = new CID(value);\r\n return multiH.toB58String(cid.multihash);\r\n },\r\n /**\r\n * @param {Buffer} value \r\n */\r\n utf8: (value) => {\r\n return value.toString('utf8');\r\n },\r\n};\r\n\r\n/**\r\n* list of known encoding/decoding for a given codec,\r\n* `encode` should be chosen among the `encodes` functions\r\n* `decode` should be chosen among the `decodes` functions\r\n*/\r\nconst profiles = {\r\n 'swarm-ns': {\r\n encode: encodes.swarm,\r\n decode: decodes.hexMultiHash,\r\n },\r\n 'ipfs-ns': {\r\n encode: encodes.ipfs,\r\n decode: decodes.b58MultiHash,\r\n },\r\n 'ipns-ns': {\r\n encode: encodes.ipfs,\r\n decode: decodes.b58MultiHash,\r\n },\r\n 'default': {\r\n encode: encodes.utf8,\r\n decode: decodes.utf8,\r\n },\r\n};\r\n\r\nexports.hexStringToBuffer = hexStringToBuffer;\r\nexports.profiles = profiles;\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":8,\"cids\":20,\"multihashes\":65}],37:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n\n},{}],38:[function(require,module,exports){\n'use strict'\n\nmodule.exports = {\n DEFAULT_HTTP_API: '/ip4/127.0.0.1/tcp/5001'\n}\n\n},{}],39:[function(require,module,exports){\n'use strict'\n\nmodule.exports = {\n httpClient: 'httpClient',\n windowIpfs: 'windowIpfs',\n jsIpfs: 'jsIpfs',\n webExt: 'webExt'\n}\n\n},{}],40:[function(require,module,exports){\n(function (global){\n'use strict'\n/* global self */\n\n// Establish the root object, `window` in the browser, `self` in Service Worker. or `global` on the server.\n// Credit: https://github.com/megawac/underscore/commit/365311c9a440438531ca1c6bfd49e3c7c5f46079\nmodule.exports = (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],41:[function(require,module,exports){\n'use strict'\n\nconst root = require('./constants/root')\nconst mergeOptions = require('merge-options')\nconst tryWebExt = require('./providers/webext')\nconst tryWindow = require('./providers/window-ipfs')\nconst tryHttpClient = require('./providers/http-client')\nconst tryJsIpfs = require('./providers/js-ipfs')\n\nconst defaultGlobalOpts = {\n connectionTest: async (ipfs) => {\n // ipfs connection is working if we can fetch data via async iterator API\n const cid = 'QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn'\n for await (const file of ipfs.get(cid)) {\n return file.type === 'dir' && file.name === cid\n }\n }\n}\n\nconst makeProvider = (fn, defaults = {}) => {\n return (options = {}) => {\n return (globalOpts) => {\n options = mergeOptions(defaultGlobalOpts, defaults, globalOpts, options)\n return fn(options)\n }\n }\n}\n\nconst providers = {\n httpClient: makeProvider((options) => {\n return tryHttpClient({ root, ...options })\n }),\n windowIpfs: makeProvider(options => {\n return tryWindow({ root, ...options })\n }),\n jsIpfs: makeProvider(options => {\n return tryJsIpfs(options)\n }),\n webExt: makeProvider(options => {\n return tryWebExt({ root, ...options })\n })\n}\n\nconst defaultProviders = [\n providers.windowIpfs(),\n providers.httpClient()\n]\n\nasync function getIpfs ({ providers = defaultProviders, ...options } = {}) {\n for (const provider of providers) {\n try {\n const res = await provider(options)\n if (res) return res\n } catch (err) {\n // provider failed unexpectedly, log error and move to the next one\n console.error('[ipfs-provider]', err) // eslint-disable-line no-console\n }\n }\n}\n\nmodule.exports = {\n getIpfs,\n providers,\n makeProvider\n}\n\n},{\"./constants/root\":40,\"./providers/http-client\":42,\"./providers/js-ipfs\":43,\"./providers/webext\":44,\"./providers/window-ipfs\":45,\"merge-options\":50}],42:[function(require,module,exports){\n'use strict'\n\nconst { URL } = require('iso-url')\nconst PROVIDERS = require('../constants/providers')\nconst { DEFAULT_HTTP_API } = require('../constants/defaults')\n\n/*\n * This provider lazy-loads https://github.com/ipfs/js-ipfs-http-client\n * so it is not included as a dependency if not used.\n *\n * HTTP Client init fallback:\n * 1. Use constructor returned by loadHttpClientModule function\n * 2. Fallback to window.IpfsHttpClient\n *\n * API URL fallback order:\n * 1. Try user specified API address\n * 2. Try current origin\n * 3. Try DEFAULT_HTTP_API\n*/\nasync function tryHttpClient ({ loadHttpClientModule, apiAddress, root, connectionTest }) {\n // Find HTTP client\n let httpClient\n if (loadHttpClientModule) httpClient = await loadHttpClientModule()\n\n // Final fallback to window.IpfsHttpClient or error\n if (!httpClient) {\n if (root.IpfsHttpClient) {\n httpClient = root.IpfsHttpClient\n } else {\n throw new Error('ipfs-provider could not initialize js-ipfs-http-client: make sure its constructor is returned by loadHttpClientModule function or exposed at window.IpfsHttpClient')\n }\n }\n\n // Allow the use of `import` or `require` on `loadHttpClientModule` fn\n httpClient = httpClient.default || httpClient // TODO: create 'import' demo in examples/\n\n // Explicit custom apiAddress provided. Only try that.\n if (apiAddress) {\n return maybeApi({ apiAddress, connectionTest, httpClient })\n }\n\n // Current origin is not localhost:5001 so try with current origin info\n const { location } = root\n if (location && !(location.port === '5001' && location.hostname.match(/^127.0.0.1$|^localhost$/))) {\n const origin = new URL(location.origin)\n origin.pathname = '/'\n const res = await maybeApi({\n apiAddress: origin.toString(),\n connectionTest,\n httpClient\n })\n if (res) return res\n }\n\n // ...otherwise try /ip4/127.0.0.1/tcp/5001\n return maybeApi({ apiAddress: DEFAULT_HTTP_API, connectionTest, httpClient })\n}\n\n// Init and test an api client against provded API address.\n// Returns js-ipfs-http-client instance or null\nasync function maybeApi ({ apiAddress, connectionTest, httpClient }) {\n try {\n const ipfs = httpClient(apiAddress)\n await connectionTest(ipfs)\n return { ipfs, provider: PROVIDERS.httpClient, apiAddress }\n } catch (error) {\n // Failed to connect to ipfs-api in `apiAddress`\n // console.error('[ipfs-provider:httpClient]', error)\n return null\n }\n}\n\nmodule.exports = tryHttpClient\n\n},{\"../constants/defaults\":38,\"../constants/providers\":39,\"iso-url\":47}],43:[function(require,module,exports){\n'use strict'\n\nconst PROVIDERS = require('../constants/providers')\n\nfunction createIpfs (ipfsModule, opts) {\n // Allow the use of `import` or `require` on `getJsIpfs` fn\n ipfsModule = ipfsModule.default || ipfsModule\n return ipfsModule.create(opts)\n}\n\nasync function tryJsIpfs ({ connectionTest, loadJsIpfsModule, options, init = createIpfs }) {\n const ipfsModule = await loadJsIpfsModule()\n const ipfs = await init(ipfsModule, options)\n await connectionTest(ipfs)\n return { ipfs, provider: PROVIDERS.jsIpfs }\n}\n\nmodule.exports = tryJsIpfs\n\n},{\"../constants/providers\":39}],44:[function(require,module,exports){\n'use strict'\n\nconst PROVIDERS = require('../constants/providers')\n\nasync function tryWebExt ({ root, connectionTest }) {\n // Opportunistic optimizations when running inside of web extension (eg. ipfs-companion)\n if (typeof root.chrome === 'object' && root.chrome.extension && root.chrome.extension.getBackgroundPage) {\n // Note: under some vendors getBackgroundPage() will return null if window is in incognito mode\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1329304\n let bg = null\n try {\n bg = root.chrome.extension.getBackgroundPage()\n } catch (err) {\n // not in browser extension\n return null\n }\n // If extension is exposing IPFS API as `ipfs` on the background page\n // it can be used directly for the best performance\n if (bg && bg.ipfs) {\n const { ipfs } = bg\n await connectionTest(ipfs)\n return { ipfs, provider: PROVIDERS.webExt }\n }\n /* Other endpoints can be added here in the future.\n For example, Companion could provide API for other browser extensions:\n https://github.com/ipfs-shipyard/ipfs-companion/issues/307 */\n }\n}\n\nmodule.exports = tryWebExt\n\n},{\"../constants/providers\":39}],45:[function(require,module,exports){\n'use strict'\n\nconst PROVIDERS = require('../constants/providers')\n\nasync function tryWindow ({ root, permissions, connectionTest }) {\n if (root.ipfs) {\n // files.get is required for testing if API works, ensure we request it\n if (!(permissions && permissions.commands && permissions.commands.includes('files.get'))) {\n permissions = permissions || {}\n permissions = JSON.parse(JSON.stringify(permissions)) // deep copy to work with freezed objects\n permissions.commands = permissions.commands || []\n permissions.commands.push('files.get')\n }\n // try window.ipfs.enable first: https://github.com/ipfs-shipyard/ipfs-companion/issues/589\n const ipfs = typeof root.ipfs.enable === 'function'\n ? await root.ipfs.enable(permissions)\n : root.ipfs\n await connectionTest(ipfs)\n return { ipfs, provider: PROVIDERS.windowIpfs }\n }\n}\n\nmodule.exports = tryWindow\n\n},{\"../constants/providers\":39}],46:[function(require,module,exports){\n'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n\n},{}],47:[function(require,module,exports){\n'use strict';\n\nconst {\n URLWithLegacySupport,\n format,\n URLSearchParams,\n defaultBase\n} = require('./src/url');\nconst relative = require('./src/relative');\n\nmodule.exports = {\n URL: URLWithLegacySupport,\n URLSearchParams,\n format,\n relative,\n defaultBase\n};\n\n},{\"./src/relative\":48,\"./src/url\":49}],48:[function(require,module,exports){\n'use strict';\n\nconst { URLWithLegacySupport, format } = require('./url');\n\nmodule.exports = (url, location = {}, protocolMap = {}, defaultProtocol) => {\n let protocol = location.protocol ?\n location.protocol.replace(':', '') :\n 'http';\n\n // Check protocol map\n protocol = (protocolMap[protocol] || defaultProtocol || protocol) + ':';\n let urlParsed;\n\n try {\n urlParsed = new URLWithLegacySupport(url);\n } catch (err) {\n urlParsed = {};\n }\n\n const base = Object.assign({}, location, {\n protocol: protocol || urlParsed.protocol,\n host: location.host || urlParsed.host\n });\n\n return new URLWithLegacySupport(url, format(base)).toString();\n};\n\n},{\"./url\":49}],49:[function(require,module,exports){\n'use strict';\n\nconst defaultBase = self.location ?\n self.location.protocol + '//' + self.location.host :\n '';\nconst URL = self.URL;\n\nclass URLWithLegacySupport {\n constructor(url = '', base = defaultBase) {\n this.super = new URL(url, base);\n this.path = this.pathname + this.search;\n this.auth =\n this.username && this.password ?\n this.username + ':' + this.password :\n null;\n\n this.query =\n this.search && this.search.startsWith('?') ?\n this.search.slice(1) :\n null;\n }\n\n get hash() {\n return this.super.hash;\n }\n get host() {\n return this.super.host;\n }\n get hostname() {\n return this.super.hostname;\n }\n get href() {\n return this.super.href;\n }\n get origin() {\n return this.super.origin;\n }\n get password() {\n return this.super.password;\n }\n get pathname() {\n return this.super.pathname;\n }\n get port() {\n return this.super.port;\n }\n get protocol() {\n return this.super.protocol;\n }\n get search() {\n return this.super.search;\n }\n get searchParams() {\n return this.super.searchParams;\n }\n get username() {\n return this.super.username;\n }\n\n set hash(hash) {\n this.super.hash = hash;\n }\n set host(host) {\n this.super.host = host;\n }\n set hostname(hostname) {\n this.super.hostname = hostname;\n }\n set href(href) {\n this.super.href = href;\n }\n set origin(origin) {\n this.super.origin = origin;\n }\n set password(password) {\n this.super.password = password;\n }\n set pathname(pathname) {\n this.super.pathname = pathname;\n }\n set port(port) {\n this.super.port = port;\n }\n set protocol(protocol) {\n this.super.protocol = protocol;\n }\n set search(search) {\n this.super.search = search;\n }\n set searchParams(searchParams) {\n this.super.searchParams = searchParams;\n }\n set username(username) {\n this.super.username = username;\n }\n\n createObjectURL(o) {\n return this.super.createObjectURL(o);\n }\n revokeObjectURL(o) {\n this.super.revokeObjectURL(o);\n }\n toJSON() {\n return this.super.toJSON();\n }\n toString() {\n return this.super.toString();\n }\n format() {\n return this.toString();\n }\n}\n\nfunction format(obj) {\n if (typeof obj === 'string') {\n const url = new URL(obj);\n\n return url.toString();\n }\n\n if (!(obj instanceof URL)) {\n const userPass =\n obj.username && obj.password ?\n `${obj.username}:${obj.password}@` :\n '';\n const auth = obj.auth ? obj.auth + '@' : '';\n const port = obj.port ? ':' + obj.port : '';\n const protocol = obj.protocol ? obj.protocol + '//' : '';\n const host = obj.host || '';\n const hostname = obj.hostname || '';\n const search = obj.search || (obj.query ? '?' + obj.query : '');\n const hash = obj.hash || '';\n const pathname = obj.pathname || '';\n const path = obj.path || pathname + search;\n\n return `${protocol}${userPass || auth}${host ||\n hostname + port}${path}${hash}`;\n }\n}\n\nmodule.exports = {\n URLWithLegacySupport,\n URLSearchParams: self.URLSearchParams,\n defaultBase,\n format\n};\n\n},{}],50:[function(require,module,exports){\n'use strict';\nconst isOptionObject = require('is-plain-obj');\n\nconst {hasOwnProperty} = Object.prototype;\nconst {propertyIsEnumerable} = Object;\nconst defineProperty = (obj, name, value) => Object.defineProperty(obj, name, {\n\tvalue,\n\twritable: true,\n\tenumerable: true,\n\tconfigurable: true\n});\n\nconst globalThis = this;\nconst defaultMergeOpts = {\n\tconcatArrays: false,\n\tignoreUndefined: false\n};\n\nconst getEnumerableOwnPropertyKeys = value => {\n\tconst keys = [];\n\n\tfor (const key in value) {\n\t\tif (hasOwnProperty.call(value, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\n\t/* istanbul ignore else */\n\tif (Object.getOwnPropertySymbols) {\n\t\tconst symbols = Object.getOwnPropertySymbols(value);\n\n\t\tfor (const symbol of symbols) {\n\t\t\tif (propertyIsEnumerable.call(value, symbol)) {\n\t\t\t\tkeys.push(symbol);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn keys;\n};\n\nfunction clone(value) {\n\tif (Array.isArray(value)) {\n\t\treturn cloneArray(value);\n\t}\n\n\tif (isOptionObject(value)) {\n\t\treturn cloneOptionObject(value);\n\t}\n\n\treturn value;\n}\n\nfunction cloneArray(array) {\n\tconst result = array.slice(0, 0);\n\n\tgetEnumerableOwnPropertyKeys(array).forEach(key => {\n\t\tdefineProperty(result, key, clone(array[key]));\n\t});\n\n\treturn result;\n}\n\nfunction cloneOptionObject(obj) {\n\tconst result = Object.getPrototypeOf(obj) === null ? Object.create(null) : {};\n\n\tgetEnumerableOwnPropertyKeys(obj).forEach(key => {\n\t\tdefineProperty(result, key, clone(obj[key]));\n\t});\n\n\treturn result;\n}\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {string[]} keys keys to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n */\nconst mergeKeys = (merged, source, keys, config) => {\n\tkeys.forEach(key => {\n\t\tif (typeof source[key] === 'undefined' && config.ignoreUndefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Do not recurse into prototype chain of merged\n\t\tif (key in merged && merged[key] !== Object.getPrototypeOf(merged)) {\n\t\t\tdefineProperty(merged, key, merge(merged[key], source[key], config));\n\t\t} else {\n\t\t\tdefineProperty(merged, key, clone(source[key]));\n\t\t}\n\t});\n\n\treturn merged;\n};\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n *\n * see [Array.prototype.concat ( ...arguments )](http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.concat)\n */\nconst concatArrays = (merged, source, config) => {\n\tlet result = merged.slice(0, 0);\n\tlet resultIndex = 0;\n\n\t[merged, source].forEach(array => {\n\t\tconst indices = [];\n\n\t\t// `result.concat(array)` with cloning\n\t\tfor (let k = 0; k < array.length; k++) {\n\t\t\tif (!hasOwnProperty.call(array, k)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tindices.push(String(k));\n\n\t\t\tif (array === merged) {\n\t\t\t\t// Already cloned\n\t\t\t\tdefineProperty(result, resultIndex++, array[k]);\n\t\t\t} else {\n\t\t\t\tdefineProperty(result, resultIndex++, clone(array[k]));\n\t\t\t}\n\t\t}\n\n\t\t// Merge non-index keys\n\t\tresult = mergeKeys(result, array, getEnumerableOwnPropertyKeys(array).filter(key => !indices.includes(key)), config);\n\t});\n\n\treturn result;\n};\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n */\nfunction merge(merged, source, config) {\n\tif (config.concatArrays && Array.isArray(merged) && Array.isArray(source)) {\n\t\treturn concatArrays(merged, source, config);\n\t}\n\n\tif (!isOptionObject(source) || !isOptionObject(merged)) {\n\t\treturn clone(source);\n\t}\n\n\treturn mergeKeys(merged, source, getEnumerableOwnPropertyKeys(source), config);\n}\n\nmodule.exports = function (...options) {\n\tconst config = merge(clone(defaultMergeOpts), (this !== globalThis && this) || {}, defaultMergeOpts);\n\tlet merged = {_: {}};\n\n\tfor (const option of options) {\n\t\tif (option === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isOptionObject(option)) {\n\t\t\tthrow new TypeError('`' + option + '` is not an Option Object');\n\t\t}\n\n\t\tmerged = merge(merged, {_: option}, config);\n\t}\n\n\treturn merged._;\n};\n\n},{\"is-plain-obj\":46}],51:[function(require,module,exports){\narguments[4][21][0].apply(exports,arguments)\n},{\"dup\":21}],52:[function(require,module,exports){\narguments[4][22][0].apply(exports,arguments)\n},{\"buffer\":8,\"dup\":22}],53:[function(require,module,exports){\narguments[4][23][0].apply(exports,arguments)\n},{\"dup\":23}],54:[function(require,module,exports){\narguments[4][24][0].apply(exports,arguments)\n},{\"buffer\":8,\"dup\":24}],55:[function(require,module,exports){\narguments[4][25][0].apply(exports,arguments)\n},{\"./base.js\":51,\"./base16\":52,\"./base32\":53,\"./base64\":54,\"base-x\":6,\"dup\":25}],56:[function(require,module,exports){\n/**\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\n * @module Multibase\n */\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst constants = require('./constants')\n\nexports = module.exports = multibase\nexports.encode = encode\nexports.decode = decode\nexports.isEncoded = isEncoded\nexports.names = Object.freeze(Object.keys(constants.names))\nexports.codes = Object.freeze(Object.keys(constants.codes))\n\n/**\n * Create a new buffer with the multibase varint+code.\n *\n * @param {string|number} nameOrCode - The multibase name or code number.\n * @param {Buffer} buf - The data to be prefixed with multibase.\n * @memberof Multibase\n * @returns {Buffer}\n */\nfunction multibase (nameOrCode, buf) {\n if (!buf) {\n throw new Error('requires an encoded buffer')\n }\n const base = getBase(nameOrCode)\n const codeBuf = Buffer.from(base.code)\n\n const name = base.name\n validEncode(name, buf)\n return Buffer.concat([codeBuf, buf])\n}\n\n/**\n * Encode data with the specified base and add the multibase prefix.\n *\n * @param {string|number} nameOrCode - The multibase name or code number.\n * @param {Buffer} buf - The data to be encoded.\n * @returns {Buffer}\n * @memberof Multibase\n */\nfunction encode (nameOrCode, buf) {\n const base = getBase(nameOrCode)\n const name = base.name\n\n return multibase(name, Buffer.from(base.encode(buf)))\n}\n\n/**\n * Takes a buffer or string encoded with multibase header, decodes it and\n * returns the decoded buffer\n *\n * @param {Buffer|string} bufOrString\n * @returns {Buffer}\n * @memberof Multibase\n *\n */\nfunction decode (bufOrString) {\n if (Buffer.isBuffer(bufOrString)) {\n bufOrString = bufOrString.toString()\n }\n\n const code = bufOrString.substring(0, 1)\n bufOrString = bufOrString.substring(1, bufOrString.length)\n\n if (typeof bufOrString === 'string') {\n bufOrString = Buffer.from(bufOrString)\n }\n\n const base = getBase(code)\n return Buffer.from(base.decode(bufOrString.toString()))\n}\n\n/**\n * Is the given data multibase encoded?\n *\n * @param {Buffer|string} bufOrString\n * @returns {boolean}\n * @memberof Multibase\n */\nfunction isEncoded (bufOrString) {\n if (Buffer.isBuffer(bufOrString)) {\n bufOrString = bufOrString.toString()\n }\n\n // Ensure bufOrString is a string\n if (Object.prototype.toString.call(bufOrString) !== '[object String]') {\n return false\n }\n\n const code = bufOrString.substring(0, 1)\n try {\n const base = getBase(code)\n return base.name\n } catch (err) {\n return false\n }\n}\n\n/**\n * @param {string} name\n * @param {Buffer} buf\n * @private\n * @returns {undefined}\n */\nfunction validEncode (name, buf) {\n const base = getBase(name)\n base.decode(buf.toString())\n}\n\nfunction getBase (nameOrCode) {\n let base\n\n if (constants.names[nameOrCode]) {\n base = constants.names[nameOrCode]\n } else if (constants.codes[nameOrCode]) {\n base = constants.codes[nameOrCode]\n } else {\n throw new Error('Unsupported encoding')\n }\n\n if (!base.isImplemented()) {\n throw new Error('Base ' + nameOrCode + ' is not implemented yet')\n }\n\n return base\n}\n\n},{\"./constants\":55,\"buffer\":8}],57:[function(require,module,exports){\narguments[4][12][0].apply(exports,arguments)\n},{\"dup\":12}],58:[function(require,module,exports){\narguments[4][13][0].apply(exports,arguments)\n},{\"./base-table.json\":57,\"dup\":13}],59:[function(require,module,exports){\narguments[4][14][0].apply(exports,arguments)\n},{\"./constants\":58,\"./int-table\":60,\"./print\":61,\"./util\":62,\"./varint-table\":63,\"buffer\":8,\"dup\":14,\"varint\":88}],60:[function(require,module,exports){\narguments[4][15][0].apply(exports,arguments)\n},{\"./base-table.json\":57,\"dup\":15}],61:[function(require,module,exports){\narguments[4][16][0].apply(exports,arguments)\n},{\"./base-table.json\":57,\"dup\":16}],62:[function(require,module,exports){\narguments[4][17][0].apply(exports,arguments)\n},{\"buffer\":8,\"dup\":17,\"varint\":88}],63:[function(require,module,exports){\narguments[4][18][0].apply(exports,arguments)\n},{\"./base-table.json\":57,\"./util\":62,\"dup\":18}],64:[function(require,module,exports){\n/* eslint quote-props: off */\n/* eslint key-spacing: off */\n'use strict'\n\nexports.names = Object.freeze({\n 'identity': 0x0,\n 'sha1': 0x11,\n 'sha2-256': 0x12,\n 'sha2-512': 0x13,\n 'dbl-sha2-256': 0x56,\n 'sha3-224': 0x17,\n 'sha3-256': 0x16,\n 'sha3-384': 0x15,\n 'sha3-512': 0x14,\n 'shake-128': 0x18,\n 'shake-256': 0x19,\n 'keccak-224': 0x1A,\n 'keccak-256': 0x1B,\n 'keccak-384': 0x1C,\n 'keccak-512': 0x1D,\n 'murmur3-128': 0x22,\n 'murmur3-32': 0x23,\n 'md4': 0xd4,\n 'md5': 0xd5,\n 'blake2b-8': 0xb201,\n 'blake2b-16': 0xb202,\n 'blake2b-24': 0xb203,\n 'blake2b-32': 0xb204,\n 'blake2b-40': 0xb205,\n 'blake2b-48': 0xb206,\n 'blake2b-56': 0xb207,\n 'blake2b-64': 0xb208,\n 'blake2b-72': 0xb209,\n 'blake2b-80': 0xb20a,\n 'blake2b-88': 0xb20b,\n 'blake2b-96': 0xb20c,\n 'blake2b-104': 0xb20d,\n 'blake2b-112': 0xb20e,\n 'blake2b-120': 0xb20f,\n 'blake2b-128': 0xb210,\n 'blake2b-136': 0xb211,\n 'blake2b-144': 0xb212,\n 'blake2b-152': 0xb213,\n 'blake2b-160': 0xb214,\n 'blake2b-168': 0xb215,\n 'blake2b-176': 0xb216,\n 'blake2b-184': 0xb217,\n 'blake2b-192': 0xb218,\n 'blake2b-200': 0xb219,\n 'blake2b-208': 0xb21a,\n 'blake2b-216': 0xb21b,\n 'blake2b-224': 0xb21c,\n 'blake2b-232': 0xb21d,\n 'blake2b-240': 0xb21e,\n 'blake2b-248': 0xb21f,\n 'blake2b-256': 0xb220,\n 'blake2b-264': 0xb221,\n 'blake2b-272': 0xb222,\n 'blake2b-280': 0xb223,\n 'blake2b-288': 0xb224,\n 'blake2b-296': 0xb225,\n 'blake2b-304': 0xb226,\n 'blake2b-312': 0xb227,\n 'blake2b-320': 0xb228,\n 'blake2b-328': 0xb229,\n 'blake2b-336': 0xb22a,\n 'blake2b-344': 0xb22b,\n 'blake2b-352': 0xb22c,\n 'blake2b-360': 0xb22d,\n 'blake2b-368': 0xb22e,\n 'blake2b-376': 0xb22f,\n 'blake2b-384': 0xb230,\n 'blake2b-392': 0xb231,\n 'blake2b-400': 0xb232,\n 'blake2b-408': 0xb233,\n 'blake2b-416': 0xb234,\n 'blake2b-424': 0xb235,\n 'blake2b-432': 0xb236,\n 'blake2b-440': 0xb237,\n 'blake2b-448': 0xb238,\n 'blake2b-456': 0xb239,\n 'blake2b-464': 0xb23a,\n 'blake2b-472': 0xb23b,\n 'blake2b-480': 0xb23c,\n 'blake2b-488': 0xb23d,\n 'blake2b-496': 0xb23e,\n 'blake2b-504': 0xb23f,\n 'blake2b-512': 0xb240,\n 'blake2s-8': 0xb241,\n 'blake2s-16': 0xb242,\n 'blake2s-24': 0xb243,\n 'blake2s-32': 0xb244,\n 'blake2s-40': 0xb245,\n 'blake2s-48': 0xb246,\n 'blake2s-56': 0xb247,\n 'blake2s-64': 0xb248,\n 'blake2s-72': 0xb249,\n 'blake2s-80': 0xb24a,\n 'blake2s-88': 0xb24b,\n 'blake2s-96': 0xb24c,\n 'blake2s-104': 0xb24d,\n 'blake2s-112': 0xb24e,\n 'blake2s-120': 0xb24f,\n 'blake2s-128': 0xb250,\n 'blake2s-136': 0xb251,\n 'blake2s-144': 0xb252,\n 'blake2s-152': 0xb253,\n 'blake2s-160': 0xb254,\n 'blake2s-168': 0xb255,\n 'blake2s-176': 0xb256,\n 'blake2s-184': 0xb257,\n 'blake2s-192': 0xb258,\n 'blake2s-200': 0xb259,\n 'blake2s-208': 0xb25a,\n 'blake2s-216': 0xb25b,\n 'blake2s-224': 0xb25c,\n 'blake2s-232': 0xb25d,\n 'blake2s-240': 0xb25e,\n 'blake2s-248': 0xb25f,\n 'blake2s-256': 0xb260,\n 'Skein256-8': 0xb301,\n 'Skein256-16': 0xb302,\n 'Skein256-24': 0xb303,\n 'Skein256-32': 0xb304,\n 'Skein256-40': 0xb305,\n 'Skein256-48': 0xb306,\n 'Skein256-56': 0xb307,\n 'Skein256-64': 0xb308,\n 'Skein256-72': 0xb309,\n 'Skein256-80': 0xb30a,\n 'Skein256-88': 0xb30b,\n 'Skein256-96': 0xb30c,\n 'Skein256-104': 0xb30d,\n 'Skein256-112': 0xb30e,\n 'Skein256-120': 0xb30f,\n 'Skein256-128': 0xb310,\n 'Skein256-136': 0xb311,\n 'Skein256-144': 0xb312,\n 'Skein256-152': 0xb313,\n 'Skein256-160': 0xb314,\n 'Skein256-168': 0xb315,\n 'Skein256-176': 0xb316,\n 'Skein256-184': 0xb317,\n 'Skein256-192': 0xb318,\n 'Skein256-200': 0xb319,\n 'Skein256-208': 0xb31a,\n 'Skein256-216': 0xb31b,\n 'Skein256-224': 0xb31c,\n 'Skein256-232': 0xb31d,\n 'Skein256-240': 0xb31e,\n 'Skein256-248': 0xb31f,\n 'Skein256-256': 0xb320,\n 'Skein512-8': 0xb321,\n 'Skein512-16': 0xb322,\n 'Skein512-24': 0xb323,\n 'Skein512-32': 0xb324,\n 'Skein512-40': 0xb325,\n 'Skein512-48': 0xb326,\n 'Skein512-56': 0xb327,\n 'Skein512-64': 0xb328,\n 'Skein512-72': 0xb329,\n 'Skein512-80': 0xb32a,\n 'Skein512-88': 0xb32b,\n 'Skein512-96': 0xb32c,\n 'Skein512-104': 0xb32d,\n 'Skein512-112': 0xb32e,\n 'Skein512-120': 0xb32f,\n 'Skein512-128': 0xb330,\n 'Skein512-136': 0xb331,\n 'Skein512-144': 0xb332,\n 'Skein512-152': 0xb333,\n 'Skein512-160': 0xb334,\n 'Skein512-168': 0xb335,\n 'Skein512-176': 0xb336,\n 'Skein512-184': 0xb337,\n 'Skein512-192': 0xb338,\n 'Skein512-200': 0xb339,\n 'Skein512-208': 0xb33a,\n 'Skein512-216': 0xb33b,\n 'Skein512-224': 0xb33c,\n 'Skein512-232': 0xb33d,\n 'Skein512-240': 0xb33e,\n 'Skein512-248': 0xb33f,\n 'Skein512-256': 0xb340,\n 'Skein512-264': 0xb341,\n 'Skein512-272': 0xb342,\n 'Skein512-280': 0xb343,\n 'Skein512-288': 0xb344,\n 'Skein512-296': 0xb345,\n 'Skein512-304': 0xb346,\n 'Skein512-312': 0xb347,\n 'Skein512-320': 0xb348,\n 'Skein512-328': 0xb349,\n 'Skein512-336': 0xb34a,\n 'Skein512-344': 0xb34b,\n 'Skein512-352': 0xb34c,\n 'Skein512-360': 0xb34d,\n 'Skein512-368': 0xb34e,\n 'Skein512-376': 0xb34f,\n 'Skein512-384': 0xb350,\n 'Skein512-392': 0xb351,\n 'Skein512-400': 0xb352,\n 'Skein512-408': 0xb353,\n 'Skein512-416': 0xb354,\n 'Skein512-424': 0xb355,\n 'Skein512-432': 0xb356,\n 'Skein512-440': 0xb357,\n 'Skein512-448': 0xb358,\n 'Skein512-456': 0xb359,\n 'Skein512-464': 0xb35a,\n 'Skein512-472': 0xb35b,\n 'Skein512-480': 0xb35c,\n 'Skein512-488': 0xb35d,\n 'Skein512-496': 0xb35e,\n 'Skein512-504': 0xb35f,\n 'Skein512-512': 0xb360,\n 'Skein1024-8': 0xb361,\n 'Skein1024-16': 0xb362,\n 'Skein1024-24': 0xb363,\n 'Skein1024-32': 0xb364,\n 'Skein1024-40': 0xb365,\n 'Skein1024-48': 0xb366,\n 'Skein1024-56': 0xb367,\n 'Skein1024-64': 0xb368,\n 'Skein1024-72': 0xb369,\n 'Skein1024-80': 0xb36a,\n 'Skein1024-88': 0xb36b,\n 'Skein1024-96': 0xb36c,\n 'Skein1024-104': 0xb36d,\n 'Skein1024-112': 0xb36e,\n 'Skein1024-120': 0xb36f,\n 'Skein1024-128': 0xb370,\n 'Skein1024-136': 0xb371,\n 'Skein1024-144': 0xb372,\n 'Skein1024-152': 0xb373,\n 'Skein1024-160': 0xb374,\n 'Skein1024-168': 0xb375,\n 'Skein1024-176': 0xb376,\n 'Skein1024-184': 0xb377,\n 'Skein1024-192': 0xb378,\n 'Skein1024-200': 0xb379,\n 'Skein1024-208': 0xb37a,\n 'Skein1024-216': 0xb37b,\n 'Skein1024-224': 0xb37c,\n 'Skein1024-232': 0xb37d,\n 'Skein1024-240': 0xb37e,\n 'Skein1024-248': 0xb37f,\n 'Skein1024-256': 0xb380,\n 'Skein1024-264': 0xb381,\n 'Skein1024-272': 0xb382,\n 'Skein1024-280': 0xb383,\n 'Skein1024-288': 0xb384,\n 'Skein1024-296': 0xb385,\n 'Skein1024-304': 0xb386,\n 'Skein1024-312': 0xb387,\n 'Skein1024-320': 0xb388,\n 'Skein1024-328': 0xb389,\n 'Skein1024-336': 0xb38a,\n 'Skein1024-344': 0xb38b,\n 'Skein1024-352': 0xb38c,\n 'Skein1024-360': 0xb38d,\n 'Skein1024-368': 0xb38e,\n 'Skein1024-376': 0xb38f,\n 'Skein1024-384': 0xb390,\n 'Skein1024-392': 0xb391,\n 'Skein1024-400': 0xb392,\n 'Skein1024-408': 0xb393,\n 'Skein1024-416': 0xb394,\n 'Skein1024-424': 0xb395,\n 'Skein1024-432': 0xb396,\n 'Skein1024-440': 0xb397,\n 'Skein1024-448': 0xb398,\n 'Skein1024-456': 0xb399,\n 'Skein1024-464': 0xb39a,\n 'Skein1024-472': 0xb39b,\n 'Skein1024-480': 0xb39c,\n 'Skein1024-488': 0xb39d,\n 'Skein1024-496': 0xb39e,\n 'Skein1024-504': 0xb39f,\n 'Skein1024-512': 0xb3a0,\n 'Skein1024-520': 0xb3a1,\n 'Skein1024-528': 0xb3a2,\n 'Skein1024-536': 0xb3a3,\n 'Skein1024-544': 0xb3a4,\n 'Skein1024-552': 0xb3a5,\n 'Skein1024-560': 0xb3a6,\n 'Skein1024-568': 0xb3a7,\n 'Skein1024-576': 0xb3a8,\n 'Skein1024-584': 0xb3a9,\n 'Skein1024-592': 0xb3aa,\n 'Skein1024-600': 0xb3ab,\n 'Skein1024-608': 0xb3ac,\n 'Skein1024-616': 0xb3ad,\n 'Skein1024-624': 0xb3ae,\n 'Skein1024-632': 0xb3af,\n 'Skein1024-640': 0xb3b0,\n 'Skein1024-648': 0xb3b1,\n 'Skein1024-656': 0xb3b2,\n 'Skein1024-664': 0xb3b3,\n 'Skein1024-672': 0xb3b4,\n 'Skein1024-680': 0xb3b5,\n 'Skein1024-688': 0xb3b6,\n 'Skein1024-696': 0xb3b7,\n 'Skein1024-704': 0xb3b8,\n 'Skein1024-712': 0xb3b9,\n 'Skein1024-720': 0xb3ba,\n 'Skein1024-728': 0xb3bb,\n 'Skein1024-736': 0xb3bc,\n 'Skein1024-744': 0xb3bd,\n 'Skein1024-752': 0xb3be,\n 'Skein1024-760': 0xb3bf,\n 'Skein1024-768': 0xb3c0,\n 'Skein1024-776': 0xb3c1,\n 'Skein1024-784': 0xb3c2,\n 'Skein1024-792': 0xb3c3,\n 'Skein1024-800': 0xb3c4,\n 'Skein1024-808': 0xb3c5,\n 'Skein1024-816': 0xb3c6,\n 'Skein1024-824': 0xb3c7,\n 'Skein1024-832': 0xb3c8,\n 'Skein1024-840': 0xb3c9,\n 'Skein1024-848': 0xb3ca,\n 'Skein1024-856': 0xb3cb,\n 'Skein1024-864': 0xb3cc,\n 'Skein1024-872': 0xb3cd,\n 'Skein1024-880': 0xb3ce,\n 'Skein1024-888': 0xb3cf,\n 'Skein1024-896': 0xb3d0,\n 'Skein1024-904': 0xb3d1,\n 'Skein1024-912': 0xb3d2,\n 'Skein1024-920': 0xb3d3,\n 'Skein1024-928': 0xb3d4,\n 'Skein1024-936': 0xb3d5,\n 'Skein1024-944': 0xb3d6,\n 'Skein1024-952': 0xb3d7,\n 'Skein1024-960': 0xb3d8,\n 'Skein1024-968': 0xb3d9,\n 'Skein1024-976': 0xb3da,\n 'Skein1024-984': 0xb3db,\n 'Skein1024-992': 0xb3dc,\n 'Skein1024-1000': 0xb3dd,\n 'Skein1024-1008': 0xb3de,\n 'Skein1024-1016': 0xb3df,\n 'Skein1024-1024': 0xb3e0\n})\n\nexports.codes = Object.freeze({\n 0x0: 'identity',\n\n // sha family\n 0x11: 'sha1',\n 0x12: 'sha2-256',\n 0x13: 'sha2-512',\n 0x56: 'dbl-sha2-256',\n 0x17: 'sha3-224',\n 0x16: 'sha3-256',\n 0x15: 'sha3-384',\n 0x14: 'sha3-512',\n 0x18: 'shake-128',\n 0x19: 'shake-256',\n 0x1A: 'keccak-224',\n 0x1B: 'keccak-256',\n 0x1C: 'keccak-384',\n 0x1D: 'keccak-512',\n\n 0x22: 'murmur3-128',\n 0x23: 'murmur3-32',\n\n 0xd4: 'md4',\n 0xd5: 'md5',\n\n // blake2\n 0xb201: 'blake2b-8',\n 0xb202: 'blake2b-16',\n 0xb203: 'blake2b-24',\n 0xb204: 'blake2b-32',\n 0xb205: 'blake2b-40',\n 0xb206: 'blake2b-48',\n 0xb207: 'blake2b-56',\n 0xb208: 'blake2b-64',\n 0xb209: 'blake2b-72',\n 0xb20a: 'blake2b-80',\n 0xb20b: 'blake2b-88',\n 0xb20c: 'blake2b-96',\n 0xb20d: 'blake2b-104',\n 0xb20e: 'blake2b-112',\n 0xb20f: 'blake2b-120',\n 0xb210: 'blake2b-128',\n 0xb211: 'blake2b-136',\n 0xb212: 'blake2b-144',\n 0xb213: 'blake2b-152',\n 0xb214: 'blake2b-160',\n 0xb215: 'blake2b-168',\n 0xb216: 'blake2b-176',\n 0xb217: 'blake2b-184',\n 0xb218: 'blake2b-192',\n 0xb219: 'blake2b-200',\n 0xb21a: 'blake2b-208',\n 0xb21b: 'blake2b-216',\n 0xb21c: 'blake2b-224',\n 0xb21d: 'blake2b-232',\n 0xb21e: 'blake2b-240',\n 0xb21f: 'blake2b-248',\n 0xb220: 'blake2b-256',\n 0xb221: 'blake2b-264',\n 0xb222: 'blake2b-272',\n 0xb223: 'blake2b-280',\n 0xb224: 'blake2b-288',\n 0xb225: 'blake2b-296',\n 0xb226: 'blake2b-304',\n 0xb227: 'blake2b-312',\n 0xb228: 'blake2b-320',\n 0xb229: 'blake2b-328',\n 0xb22a: 'blake2b-336',\n 0xb22b: 'blake2b-344',\n 0xb22c: 'blake2b-352',\n 0xb22d: 'blake2b-360',\n 0xb22e: 'blake2b-368',\n 0xb22f: 'blake2b-376',\n 0xb230: 'blake2b-384',\n 0xb231: 'blake2b-392',\n 0xb232: 'blake2b-400',\n 0xb233: 'blake2b-408',\n 0xb234: 'blake2b-416',\n 0xb235: 'blake2b-424',\n 0xb236: 'blake2b-432',\n 0xb237: 'blake2b-440',\n 0xb238: 'blake2b-448',\n 0xb239: 'blake2b-456',\n 0xb23a: 'blake2b-464',\n 0xb23b: 'blake2b-472',\n 0xb23c: 'blake2b-480',\n 0xb23d: 'blake2b-488',\n 0xb23e: 'blake2b-496',\n 0xb23f: 'blake2b-504',\n 0xb240: 'blake2b-512',\n 0xb241: 'blake2s-8',\n 0xb242: 'blake2s-16',\n 0xb243: 'blake2s-24',\n 0xb244: 'blake2s-32',\n 0xb245: 'blake2s-40',\n 0xb246: 'blake2s-48',\n 0xb247: 'blake2s-56',\n 0xb248: 'blake2s-64',\n 0xb249: 'blake2s-72',\n 0xb24a: 'blake2s-80',\n 0xb24b: 'blake2s-88',\n 0xb24c: 'blake2s-96',\n 0xb24d: 'blake2s-104',\n 0xb24e: 'blake2s-112',\n 0xb24f: 'blake2s-120',\n 0xb250: 'blake2s-128',\n 0xb251: 'blake2s-136',\n 0xb252: 'blake2s-144',\n 0xb253: 'blake2s-152',\n 0xb254: 'blake2s-160',\n 0xb255: 'blake2s-168',\n 0xb256: 'blake2s-176',\n 0xb257: 'blake2s-184',\n 0xb258: 'blake2s-192',\n 0xb259: 'blake2s-200',\n 0xb25a: 'blake2s-208',\n 0xb25b: 'blake2s-216',\n 0xb25c: 'blake2s-224',\n 0xb25d: 'blake2s-232',\n 0xb25e: 'blake2s-240',\n 0xb25f: 'blake2s-248',\n 0xb260: 'blake2s-256',\n\n // skein\n 0xb301: 'Skein256-8',\n 0xb302: 'Skein256-16',\n 0xb303: 'Skein256-24',\n 0xb304: 'Skein256-32',\n 0xb305: 'Skein256-40',\n 0xb306: 'Skein256-48',\n 0xb307: 'Skein256-56',\n 0xb308: 'Skein256-64',\n 0xb309: 'Skein256-72',\n 0xb30a: 'Skein256-80',\n 0xb30b: 'Skein256-88',\n 0xb30c: 'Skein256-96',\n 0xb30d: 'Skein256-104',\n 0xb30e: 'Skein256-112',\n 0xb30f: 'Skein256-120',\n 0xb310: 'Skein256-128',\n 0xb311: 'Skein256-136',\n 0xb312: 'Skein256-144',\n 0xb313: 'Skein256-152',\n 0xb314: 'Skein256-160',\n 0xb315: 'Skein256-168',\n 0xb316: 'Skein256-176',\n 0xb317: 'Skein256-184',\n 0xb318: 'Skein256-192',\n 0xb319: 'Skein256-200',\n 0xb31a: 'Skein256-208',\n 0xb31b: 'Skein256-216',\n 0xb31c: 'Skein256-224',\n 0xb31d: 'Skein256-232',\n 0xb31e: 'Skein256-240',\n 0xb31f: 'Skein256-248',\n 0xb320: 'Skein256-256',\n 0xb321: 'Skein512-8',\n 0xb322: 'Skein512-16',\n 0xb323: 'Skein512-24',\n 0xb324: 'Skein512-32',\n 0xb325: 'Skein512-40',\n 0xb326: 'Skein512-48',\n 0xb327: 'Skein512-56',\n 0xb328: 'Skein512-64',\n 0xb329: 'Skein512-72',\n 0xb32a: 'Skein512-80',\n 0xb32b: 'Skein512-88',\n 0xb32c: 'Skein512-96',\n 0xb32d: 'Skein512-104',\n 0xb32e: 'Skein512-112',\n 0xb32f: 'Skein512-120',\n 0xb330: 'Skein512-128',\n 0xb331: 'Skein512-136',\n 0xb332: 'Skein512-144',\n 0xb333: 'Skein512-152',\n 0xb334: 'Skein512-160',\n 0xb335: 'Skein512-168',\n 0xb336: 'Skein512-176',\n 0xb337: 'Skein512-184',\n 0xb338: 'Skein512-192',\n 0xb339: 'Skein512-200',\n 0xb33a: 'Skein512-208',\n 0xb33b: 'Skein512-216',\n 0xb33c: 'Skein512-224',\n 0xb33d: 'Skein512-232',\n 0xb33e: 'Skein512-240',\n 0xb33f: 'Skein512-248',\n 0xb340: 'Skein512-256',\n 0xb341: 'Skein512-264',\n 0xb342: 'Skein512-272',\n 0xb343: 'Skein512-280',\n 0xb344: 'Skein512-288',\n 0xb345: 'Skein512-296',\n 0xb346: 'Skein512-304',\n 0xb347: 'Skein512-312',\n 0xb348: 'Skein512-320',\n 0xb349: 'Skein512-328',\n 0xb34a: 'Skein512-336',\n 0xb34b: 'Skein512-344',\n 0xb34c: 'Skein512-352',\n 0xb34d: 'Skein512-360',\n 0xb34e: 'Skein512-368',\n 0xb34f: 'Skein512-376',\n 0xb350: 'Skein512-384',\n 0xb351: 'Skein512-392',\n 0xb352: 'Skein512-400',\n 0xb353: 'Skein512-408',\n 0xb354: 'Skein512-416',\n 0xb355: 'Skein512-424',\n 0xb356: 'Skein512-432',\n 0xb357: 'Skein512-440',\n 0xb358: 'Skein512-448',\n 0xb359: 'Skein512-456',\n 0xb35a: 'Skein512-464',\n 0xb35b: 'Skein512-472',\n 0xb35c: 'Skein512-480',\n 0xb35d: 'Skein512-488',\n 0xb35e: 'Skein512-496',\n 0xb35f: 'Skein512-504',\n 0xb360: 'Skein512-512',\n 0xb361: 'Skein1024-8',\n 0xb362: 'Skein1024-16',\n 0xb363: 'Skein1024-24',\n 0xb364: 'Skein1024-32',\n 0xb365: 'Skein1024-40',\n 0xb366: 'Skein1024-48',\n 0xb367: 'Skein1024-56',\n 0xb368: 'Skein1024-64',\n 0xb369: 'Skein1024-72',\n 0xb36a: 'Skein1024-80',\n 0xb36b: 'Skein1024-88',\n 0xb36c: 'Skein1024-96',\n 0xb36d: 'Skein1024-104',\n 0xb36e: 'Skein1024-112',\n 0xb36f: 'Skein1024-120',\n 0xb370: 'Skein1024-128',\n 0xb371: 'Skein1024-136',\n 0xb372: 'Skein1024-144',\n 0xb373: 'Skein1024-152',\n 0xb374: 'Skein1024-160',\n 0xb375: 'Skein1024-168',\n 0xb376: 'Skein1024-176',\n 0xb377: 'Skein1024-184',\n 0xb378: 'Skein1024-192',\n 0xb379: 'Skein1024-200',\n 0xb37a: 'Skein1024-208',\n 0xb37b: 'Skein1024-216',\n 0xb37c: 'Skein1024-224',\n 0xb37d: 'Skein1024-232',\n 0xb37e: 'Skein1024-240',\n 0xb37f: 'Skein1024-248',\n 0xb380: 'Skein1024-256',\n 0xb381: 'Skein1024-264',\n 0xb382: 'Skein1024-272',\n 0xb383: 'Skein1024-280',\n 0xb384: 'Skein1024-288',\n 0xb385: 'Skein1024-296',\n 0xb386: 'Skein1024-304',\n 0xb387: 'Skein1024-312',\n 0xb388: 'Skein1024-320',\n 0xb389: 'Skein1024-328',\n 0xb38a: 'Skein1024-336',\n 0xb38b: 'Skein1024-344',\n 0xb38c: 'Skein1024-352',\n 0xb38d: 'Skein1024-360',\n 0xb38e: 'Skein1024-368',\n 0xb38f: 'Skein1024-376',\n 0xb390: 'Skein1024-384',\n 0xb391: 'Skein1024-392',\n 0xb392: 'Skein1024-400',\n 0xb393: 'Skein1024-408',\n 0xb394: 'Skein1024-416',\n 0xb395: 'Skein1024-424',\n 0xb396: 'Skein1024-432',\n 0xb397: 'Skein1024-440',\n 0xb398: 'Skein1024-448',\n 0xb399: 'Skein1024-456',\n 0xb39a: 'Skein1024-464',\n 0xb39b: 'Skein1024-472',\n 0xb39c: 'Skein1024-480',\n 0xb39d: 'Skein1024-488',\n 0xb39e: 'Skein1024-496',\n 0xb39f: 'Skein1024-504',\n 0xb3a0: 'Skein1024-512',\n 0xb3a1: 'Skein1024-520',\n 0xb3a2: 'Skein1024-528',\n 0xb3a3: 'Skein1024-536',\n 0xb3a4: 'Skein1024-544',\n 0xb3a5: 'Skein1024-552',\n 0xb3a6: 'Skein1024-560',\n 0xb3a7: 'Skein1024-568',\n 0xb3a8: 'Skein1024-576',\n 0xb3a9: 'Skein1024-584',\n 0xb3aa: 'Skein1024-592',\n 0xb3ab: 'Skein1024-600',\n 0xb3ac: 'Skein1024-608',\n 0xb3ad: 'Skein1024-616',\n 0xb3ae: 'Skein1024-624',\n 0xb3af: 'Skein1024-632',\n 0xb3b0: 'Skein1024-640',\n 0xb3b1: 'Skein1024-648',\n 0xb3b2: 'Skein1024-656',\n 0xb3b3: 'Skein1024-664',\n 0xb3b4: 'Skein1024-672',\n 0xb3b5: 'Skein1024-680',\n 0xb3b6: 'Skein1024-688',\n 0xb3b7: 'Skein1024-696',\n 0xb3b8: 'Skein1024-704',\n 0xb3b9: 'Skein1024-712',\n 0xb3ba: 'Skein1024-720',\n 0xb3bb: 'Skein1024-728',\n 0xb3bc: 'Skein1024-736',\n 0xb3bd: 'Skein1024-744',\n 0xb3be: 'Skein1024-752',\n 0xb3bf: 'Skein1024-760',\n 0xb3c0: 'Skein1024-768',\n 0xb3c1: 'Skein1024-776',\n 0xb3c2: 'Skein1024-784',\n 0xb3c3: 'Skein1024-792',\n 0xb3c4: 'Skein1024-800',\n 0xb3c5: 'Skein1024-808',\n 0xb3c6: 'Skein1024-816',\n 0xb3c7: 'Skein1024-824',\n 0xb3c8: 'Skein1024-832',\n 0xb3c9: 'Skein1024-840',\n 0xb3ca: 'Skein1024-848',\n 0xb3cb: 'Skein1024-856',\n 0xb3cc: 'Skein1024-864',\n 0xb3cd: 'Skein1024-872',\n 0xb3ce: 'Skein1024-880',\n 0xb3cf: 'Skein1024-888',\n 0xb3d0: 'Skein1024-896',\n 0xb3d1: 'Skein1024-904',\n 0xb3d2: 'Skein1024-912',\n 0xb3d3: 'Skein1024-920',\n 0xb3d4: 'Skein1024-928',\n 0xb3d5: 'Skein1024-936',\n 0xb3d6: 'Skein1024-944',\n 0xb3d7: 'Skein1024-952',\n 0xb3d8: 'Skein1024-960',\n 0xb3d9: 'Skein1024-968',\n 0xb3da: 'Skein1024-976',\n 0xb3db: 'Skein1024-984',\n 0xb3dc: 'Skein1024-992',\n 0xb3dd: 'Skein1024-1000',\n 0xb3de: 'Skein1024-1008',\n 0xb3df: 'Skein1024-1016',\n 0xb3e0: 'Skein1024-1024'\n})\n\nexports.defaultLengths = Object.freeze({\n 0x11: 20,\n 0x12: 32,\n 0x13: 64,\n 0x56: 32,\n 0x17: 28,\n 0x16: 32,\n 0x15: 48,\n 0x14: 64,\n 0x18: 32,\n 0x19: 64,\n 0x1A: 28,\n 0x1B: 32,\n 0x1C: 48,\n 0x1D: 64,\n 0x22: 32,\n\n 0xb201: 0x01,\n 0xb202: 0x02,\n 0xb203: 0x03,\n 0xb204: 0x04,\n 0xb205: 0x05,\n 0xb206: 0x06,\n 0xb207: 0x07,\n 0xb208: 0x08,\n 0xb209: 0x09,\n 0xb20a: 0x0a,\n 0xb20b: 0x0b,\n 0xb20c: 0x0c,\n 0xb20d: 0x0d,\n 0xb20e: 0x0e,\n 0xb20f: 0x0f,\n 0xb210: 0x10,\n 0xb211: 0x11,\n 0xb212: 0x12,\n 0xb213: 0x13,\n 0xb214: 0x14,\n 0xb215: 0x15,\n 0xb216: 0x16,\n 0xb217: 0x17,\n 0xb218: 0x18,\n 0xb219: 0x19,\n 0xb21a: 0x1a,\n 0xb21b: 0x1b,\n 0xb21c: 0x1c,\n 0xb21d: 0x1d,\n 0xb21e: 0x1e,\n 0xb21f: 0x1f,\n 0xb220: 0x20,\n 0xb221: 0x21,\n 0xb222: 0x22,\n 0xb223: 0x23,\n 0xb224: 0x24,\n 0xb225: 0x25,\n 0xb226: 0x26,\n 0xb227: 0x27,\n 0xb228: 0x28,\n 0xb229: 0x29,\n 0xb22a: 0x2a,\n 0xb22b: 0x2b,\n 0xb22c: 0x2c,\n 0xb22d: 0x2d,\n 0xb22e: 0x2e,\n 0xb22f: 0x2f,\n 0xb230: 0x30,\n 0xb231: 0x31,\n 0xb232: 0x32,\n 0xb233: 0x33,\n 0xb234: 0x34,\n 0xb235: 0x35,\n 0xb236: 0x36,\n 0xb237: 0x37,\n 0xb238: 0x38,\n 0xb239: 0x39,\n 0xb23a: 0x3a,\n 0xb23b: 0x3b,\n 0xb23c: 0x3c,\n 0xb23d: 0x3d,\n 0xb23e: 0x3e,\n 0xb23f: 0x3f,\n 0xb240: 0x40,\n 0xb241: 0x01,\n 0xb242: 0x02,\n 0xb243: 0x03,\n 0xb244: 0x04,\n 0xb245: 0x05,\n 0xb246: 0x06,\n 0xb247: 0x07,\n 0xb248: 0x08,\n 0xb249: 0x09,\n 0xb24a: 0x0a,\n 0xb24b: 0x0b,\n 0xb24c: 0x0c,\n 0xb24d: 0x0d,\n 0xb24e: 0x0e,\n 0xb24f: 0x0f,\n 0xb250: 0x10,\n 0xb251: 0x11,\n 0xb252: 0x12,\n 0xb253: 0x13,\n 0xb254: 0x14,\n 0xb255: 0x15,\n 0xb256: 0x16,\n 0xb257: 0x17,\n 0xb258: 0x18,\n 0xb259: 0x19,\n 0xb25a: 0x1a,\n 0xb25b: 0x1b,\n 0xb25c: 0x1c,\n 0xb25d: 0x1d,\n 0xb25e: 0x1e,\n 0xb25f: 0x1f,\n 0xb260: 0x20,\n 0xb301: 0x01,\n 0xb302: 0x02,\n 0xb303: 0x03,\n 0xb304: 0x04,\n 0xb305: 0x05,\n 0xb306: 0x06,\n 0xb307: 0x07,\n 0xb308: 0x08,\n 0xb309: 0x09,\n 0xb30a: 0x0a,\n 0xb30b: 0x0b,\n 0xb30c: 0x0c,\n 0xb30d: 0x0d,\n 0xb30e: 0x0e,\n 0xb30f: 0x0f,\n 0xb310: 0x10,\n 0xb311: 0x11,\n 0xb312: 0x12,\n 0xb313: 0x13,\n 0xb314: 0x14,\n 0xb315: 0x15,\n 0xb316: 0x16,\n 0xb317: 0x17,\n 0xb318: 0x18,\n 0xb319: 0x19,\n 0xb31a: 0x1a,\n 0xb31b: 0x1b,\n 0xb31c: 0x1c,\n 0xb31d: 0x1d,\n 0xb31e: 0x1e,\n 0xb31f: 0x1f,\n 0xb320: 0x20,\n 0xb321: 0x01,\n 0xb322: 0x02,\n 0xb323: 0x03,\n 0xb324: 0x04,\n 0xb325: 0x05,\n 0xb326: 0x06,\n 0xb327: 0x07,\n 0xb328: 0x08,\n 0xb329: 0x09,\n 0xb32a: 0x0a,\n 0xb32b: 0x0b,\n 0xb32c: 0x0c,\n 0xb32d: 0x0d,\n 0xb32e: 0x0e,\n 0xb32f: 0x0f,\n 0xb330: 0x10,\n 0xb331: 0x11,\n 0xb332: 0x12,\n 0xb333: 0x13,\n 0xb334: 0x14,\n 0xb335: 0x15,\n 0xb336: 0x16,\n 0xb337: 0x17,\n 0xb338: 0x18,\n 0xb339: 0x19,\n 0xb33a: 0x1a,\n 0xb33b: 0x1b,\n 0xb33c: 0x1c,\n 0xb33d: 0x1d,\n 0xb33e: 0x1e,\n 0xb33f: 0x1f,\n 0xb340: 0x20,\n 0xb341: 0x21,\n 0xb342: 0x22,\n 0xb343: 0x23,\n 0xb344: 0x24,\n 0xb345: 0x25,\n 0xb346: 0x26,\n 0xb347: 0x27,\n 0xb348: 0x28,\n 0xb349: 0x29,\n 0xb34a: 0x2a,\n 0xb34b: 0x2b,\n 0xb34c: 0x2c,\n 0xb34d: 0x2d,\n 0xb34e: 0x2e,\n 0xb34f: 0x2f,\n 0xb350: 0x30,\n 0xb351: 0x31,\n 0xb352: 0x32,\n 0xb353: 0x33,\n 0xb354: 0x34,\n 0xb355: 0x35,\n 0xb356: 0x36,\n 0xb357: 0x37,\n 0xb358: 0x38,\n 0xb359: 0x39,\n 0xb35a: 0x3a,\n 0xb35b: 0x3b,\n 0xb35c: 0x3c,\n 0xb35d: 0x3d,\n 0xb35e: 0x3e,\n 0xb35f: 0x3f,\n 0xb360: 0x40,\n 0xb361: 0x01,\n 0xb362: 0x02,\n 0xb363: 0x03,\n 0xb364: 0x04,\n 0xb365: 0x05,\n 0xb366: 0x06,\n 0xb367: 0x07,\n 0xb368: 0x08,\n 0xb369: 0x09,\n 0xb36a: 0x0a,\n 0xb36b: 0x0b,\n 0xb36c: 0x0c,\n 0xb36d: 0x0d,\n 0xb36e: 0x0e,\n 0xb36f: 0x0f,\n 0xb370: 0x10,\n 0xb371: 0x11,\n 0xb372: 0x12,\n 0xb373: 0x13,\n 0xb374: 0x14,\n 0xb375: 0x15,\n 0xb376: 0x16,\n 0xb377: 0x17,\n 0xb378: 0x18,\n 0xb379: 0x19,\n 0xb37a: 0x1a,\n 0xb37b: 0x1b,\n 0xb37c: 0x1c,\n 0xb37d: 0x1d,\n 0xb37e: 0x1e,\n 0xb37f: 0x1f,\n 0xb380: 0x20,\n 0xb381: 0x21,\n 0xb382: 0x22,\n 0xb383: 0x23,\n 0xb384: 0x24,\n 0xb385: 0x25,\n 0xb386: 0x26,\n 0xb387: 0x27,\n 0xb388: 0x28,\n 0xb389: 0x29,\n 0xb38a: 0x2a,\n 0xb38b: 0x2b,\n 0xb38c: 0x2c,\n 0xb38d: 0x2d,\n 0xb38e: 0x2e,\n 0xb38f: 0x2f,\n 0xb390: 0x30,\n 0xb391: 0x31,\n 0xb392: 0x32,\n 0xb393: 0x33,\n 0xb394: 0x34,\n 0xb395: 0x35,\n 0xb396: 0x36,\n 0xb397: 0x37,\n 0xb398: 0x38,\n 0xb399: 0x39,\n 0xb39a: 0x3a,\n 0xb39b: 0x3b,\n 0xb39c: 0x3c,\n 0xb39d: 0x3d,\n 0xb39e: 0x3e,\n 0xb39f: 0x3f,\n 0xb3a0: 0x40,\n 0xb3a1: 0x41,\n 0xb3a2: 0x42,\n 0xb3a3: 0x43,\n 0xb3a4: 0x44,\n 0xb3a5: 0x45,\n 0xb3a6: 0x46,\n 0xb3a7: 0x47,\n 0xb3a8: 0x48,\n 0xb3a9: 0x49,\n 0xb3aa: 0x4a,\n 0xb3ab: 0x4b,\n 0xb3ac: 0x4c,\n 0xb3ad: 0x4d,\n 0xb3ae: 0x4e,\n 0xb3af: 0x4f,\n 0xb3b0: 0x50,\n 0xb3b1: 0x51,\n 0xb3b2: 0x52,\n 0xb3b3: 0x53,\n 0xb3b4: 0x54,\n 0xb3b5: 0x55,\n 0xb3b6: 0x56,\n 0xb3b7: 0x57,\n 0xb3b8: 0x58,\n 0xb3b9: 0x59,\n 0xb3ba: 0x5a,\n 0xb3bb: 0x5b,\n 0xb3bc: 0x5c,\n 0xb3bd: 0x5d,\n 0xb3be: 0x5e,\n 0xb3bf: 0x5f,\n 0xb3c0: 0x60,\n 0xb3c1: 0x61,\n 0xb3c2: 0x62,\n 0xb3c3: 0x63,\n 0xb3c4: 0x64,\n 0xb3c5: 0x65,\n 0xb3c6: 0x66,\n 0xb3c7: 0x67,\n 0xb3c8: 0x68,\n 0xb3c9: 0x69,\n 0xb3ca: 0x6a,\n 0xb3cb: 0x6b,\n 0xb3cc: 0x6c,\n 0xb3cd: 0x6d,\n 0xb3ce: 0x6e,\n 0xb3cf: 0x6f,\n 0xb3d0: 0x70,\n 0xb3d1: 0x71,\n 0xb3d2: 0x72,\n 0xb3d3: 0x73,\n 0xb3d4: 0x74,\n 0xb3d5: 0x75,\n 0xb3d6: 0x76,\n 0xb3d7: 0x77,\n 0xb3d8: 0x78,\n 0xb3d9: 0x79,\n 0xb3da: 0x7a,\n 0xb3db: 0x7b,\n 0xb3dc: 0x7c,\n 0xb3dd: 0x7d,\n 0xb3de: 0x7e,\n 0xb3df: 0x7f,\n 0xb3e0: 0x80\n})\n\n},{}],65:[function(require,module,exports){\n/**\n * Multihash implementation in JavaScript.\n *\n * @module multihash\n */\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst multibase = require('multibase')\nconst varint = require('varint')\nconst cs = require('./constants')\n\nexports.names = cs.names\nexports.codes = cs.codes\nexports.defaultLengths = cs.defaultLengths\n\n/**\n * Convert the given multihash to a hex encoded string.\n *\n * @param {Buffer} hash\n * @returns {string}\n */\nexports.toHexString = function toHexString (hash) {\n if (!Buffer.isBuffer(hash)) {\n throw new Error('must be passed a buffer')\n }\n\n return hash.toString('hex')\n}\n\n/**\n * Convert the given hex encoded string to a multihash.\n *\n * @param {string} hash\n * @returns {Buffer}\n */\nexports.fromHexString = function fromHexString (hash) {\n return Buffer.from(hash, 'hex')\n}\n\n/**\n * Convert the given multihash to a base58 encoded string.\n *\n * @param {Buffer} hash\n * @returns {string}\n */\nexports.toB58String = function toB58String (hash) {\n if (!Buffer.isBuffer(hash)) {\n throw new Error('must be passed a buffer')\n }\n\n return multibase.encode('base58btc', hash).toString().slice(1)\n}\n\n/**\n * Convert the given base58 encoded string to a multihash.\n *\n * @param {string|Buffer} hash\n * @returns {Buffer}\n */\nexports.fromB58String = function fromB58String (hash) {\n let encoded = hash\n if (Buffer.isBuffer(hash)) {\n encoded = hash.toString()\n }\n\n return multibase.decode('z' + encoded)\n}\n\n/**\n * Decode a hash from the given multihash.\n *\n * @param {Buffer} buf\n * @returns {{code: number, name: string, length: number, digest: Buffer}} result\n */\nexports.decode = function decode (buf) {\n if (!(Buffer.isBuffer(buf))) {\n throw new Error('multihash must be a Buffer')\n }\n\n if (buf.length < 2) {\n throw new Error('multihash too short. must be > 2 bytes.')\n }\n\n const code = varint.decode(buf)\n if (!exports.isValidCode(code)) {\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\n }\n buf = buf.slice(varint.decode.bytes)\n\n const len = varint.decode(buf)\n if (len < 0) {\n throw new Error(`multihash invalid length: ${len}`)\n }\n buf = buf.slice(varint.decode.bytes)\n\n if (buf.length !== len) {\n throw new Error(`multihash length inconsistent: 0x${buf.toString('hex')}`)\n }\n\n return {\n code: code,\n name: cs.codes[code],\n length: len,\n digest: buf\n }\n}\n\n/**\n * Encode a hash digest along with the specified function code.\n *\n * > **Note:** the length is derived from the length of the digest itself.\n *\n * @param {Buffer} digest\n * @param {string|number} code\n * @param {number} [length]\n * @returns {Buffer}\n */\nexports.encode = function encode (digest, code, length) {\n if (!digest || code === undefined) {\n throw new Error('multihash encode requires at least two args: digest, code')\n }\n\n // ensure it's a hashfunction code.\n const hashfn = exports.coerceCode(code)\n\n if (!(Buffer.isBuffer(digest))) {\n throw new Error('digest should be a Buffer')\n }\n\n if (length == null) {\n length = digest.length\n }\n\n if (length && digest.length !== length) {\n throw new Error('digest length should be equal to specified length.')\n }\n\n return Buffer.concat([\n Buffer.from(varint.encode(hashfn)),\n Buffer.from(varint.encode(length)),\n digest\n ])\n}\n\n/**\n * Converts a hash function name into the matching code.\n * If passed a number it will return the number if it's a valid code.\n * @param {string|number} name\n * @returns {number}\n */\nexports.coerceCode = function coerceCode (name) {\n let code = name\n\n if (typeof name === 'string') {\n if (cs.names[name] === undefined) {\n throw new Error(`Unrecognized hash function named: ${name}`)\n }\n code = cs.names[name]\n }\n\n if (typeof code !== 'number') {\n throw new Error(`Hash function code should be a number. Got: ${code}`)\n }\n\n if (cs.codes[code] === undefined && !exports.isAppCode(code)) {\n throw new Error(`Unrecognized function code: ${code}`)\n }\n\n return code\n}\n\n/**\n * Checks wether a code is part of the app range\n *\n * @param {number} code\n * @returns {boolean}\n */\nexports.isAppCode = function appCode (code) {\n return code > 0 && code < 0x10\n}\n\n/**\n * Checks whether a multihash code is valid.\n *\n * @param {number} code\n * @returns {boolean}\n */\nexports.isValidCode = function validCode (code) {\n if (exports.isAppCode(code)) {\n return true\n }\n\n if (cs.codes[code]) {\n return true\n }\n\n return false\n}\n\n/**\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\n *\n * @param {Buffer} multihash\n * @returns {undefined}\n * @throws {Error}\n */\nfunction validate (multihash) {\n exports.decode(multihash) // throws if bad.\n}\nexports.validate = validate\n\n/**\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\n *\n * @param {Buffer} multihash\n * @returns {undefined}\n * @throws {Error}\n */\nexports.prefix = function prefix (multihash) {\n validate(multihash)\n\n return multihash.slice(0, 2)\n}\n\n},{\"./constants\":64,\"buffer\":8,\"multibase\":56,\"varint\":88}],66:[function(require,module,exports){\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}],67:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],68:[function(require,module,exports){\nmodule.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./src/ProfileHover.jsx\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/3box/lib/api.js\":\n/*!**************************************!*\\\n !*** ./node_modules/3box/lib/api.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \\\"./node_modules/@babel/runtime/helpers/classCallCheck.js\\\"));\\n\\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \\\"./node_modules/@babel/runtime/helpers/createClass.js\\\"));\\n\\nvar graphQLRequest = __webpack_require__(/*! graphql-request */ \\\"./node_modules/graphql-request/dist/src/index.js\\\").request;\\n\\nvar utils = __webpack_require__(/*! ./utils/index */ \\\"./node_modules/3box/lib/utils/index.js\\\");\\n\\nvar verifier = __webpack_require__(/*! ./utils/verifier */ \\\"./node_modules/3box/lib/utils/verifier.js\\\");\\n\\nvar _require = __webpack_require__(/*! ./utils/id */ \\\"./node_modules/3box/lib/utils/id.js\\\"),\\n isSupportedDID = _require.isSupportedDID;\\n\\nvar config = __webpack_require__(/*! ./config.js */ \\\"./node_modules/3box/lib/config.js\\\");\\n\\nvar GRAPHQL_SERVER_URL = config.graphql_server_url;\\nvar PROFILE_SERVER_URL = config.profile_server_url;\\nvar ADDRESS_SERVER_URL = config.address_server_url;\\n/**\\n * @class\\n */\\n\\nvar BoxApi =\\n/*#__PURE__*/\\nfunction () {\\n function BoxApi() {\\n (0, _classCallCheck2[\\\"default\\\"])(this, BoxApi);\\n }\\n\\n (0, _createClass2[\\\"default\\\"])(BoxApi, null, [{\\n key: \\\"getRootStoreAddress\\\",\\n value: function () {\\n var _getRootStoreAddress = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(identifier) {\\n var serverUrl,\\n res,\\n _args = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n serverUrl = _args.length > 1 && _args[1] !== undefined ? _args[1] : ADDRESS_SERVER_URL;\\n _context.next = 3;\\n return utils.fetchJson(serverUrl + '/odbAddress/' + identifier);\\n\\n case 3:\\n res = _context.sent;\\n return _context.abrupt(\\\"return\\\", res.data.rootStoreAddress);\\n\\n case 5:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee);\\n }));\\n\\n function getRootStoreAddress(_x) {\\n return _getRootStoreAddress.apply(this, arguments);\\n }\\n\\n return getRootStoreAddress;\\n }()\\n /**\\n * Get the names of all spaces a user has\\n *\\n * @param {String} address An ethereum address\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Object} an array with all spaces as strings\\n */\\n\\n }, {\\n key: \\\"listSpaces\\\",\\n value: function () {\\n var _listSpaces = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(address) {\\n var _ref,\\n profileServer,\\n serverUrl,\\n _args2 = arguments;\\n\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n _ref = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {}, profileServer = _ref.profileServer;\\n serverUrl = profileServer || PROFILE_SERVER_URL;\\n _context2.prev = 2;\\n\\n if (!isSupportedDID(address)) {\\n _context2.next = 9;\\n break;\\n }\\n\\n _context2.next = 6;\\n return utils.fetchJson(serverUrl + '/list-spaces?did=' + address);\\n\\n case 6:\\n return _context2.abrupt(\\\"return\\\", _context2.sent);\\n\\n case 9:\\n _context2.next = 11;\\n return utils.fetchJson(serverUrl + '/list-spaces?address=' + encodeURIComponent(address));\\n\\n case 11:\\n return _context2.abrupt(\\\"return\\\", _context2.sent);\\n\\n case 12:\\n _context2.next = 17;\\n break;\\n\\n case 14:\\n _context2.prev = 14;\\n _context2.t0 = _context2[\\\"catch\\\"](2);\\n return _context2.abrupt(\\\"return\\\", []);\\n\\n case 17:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2, null, [[2, 14]]);\\n }));\\n\\n function listSpaces(_x2) {\\n return _listSpaces.apply(this, arguments);\\n }\\n\\n return listSpaces;\\n }()\\n /**\\n * Get the public data in a space of a given address with the given name\\n *\\n * @param {String} address An ethereum address\\n * @param {String} name A space name\\n * @param {Object} opts Optional parameters\\n * @param {Function} opts.blocklist A function that takes an address and returns true if the user has been blocked\\n * @param {String} opts.metadata flag to retrieve metadata\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Object} a json object with the public space data\\n */\\n\\n }, {\\n key: \\\"getSpace\\\",\\n value: function () {\\n var _getSpace = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee3(address, name) {\\n var _ref2,\\n profileServer,\\n metadata,\\n blocklist,\\n serverUrl,\\n url,\\n _args3 = arguments;\\n\\n return _regenerator[\\\"default\\\"].wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n _ref2 = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : {}, profileServer = _ref2.profileServer, metadata = _ref2.metadata, blocklist = _ref2.blocklist;\\n\\n if (!(blocklist && blocklist(address))) {\\n _context3.next = 3;\\n break;\\n }\\n\\n throw new Error(\\\"user with \\\".concat(address, \\\" is blocked\\\"));\\n\\n case 3:\\n serverUrl = profileServer || PROFILE_SERVER_URL;\\n url = \\\"\\\".concat(serverUrl, \\\"/space\\\");\\n _context3.prev = 5;\\n\\n // Add first parameter: address or did\\n if (isSupportedDID(address)) {\\n url = \\\"\\\".concat(url, \\\"?did=\\\").concat(address);\\n } else {\\n url = \\\"\\\".concat(url, \\\"?address=\\\").concat(encodeURIComponent(address.toLowerCase()));\\n } // Add name:\\n\\n\\n url = \\\"\\\".concat(url, \\\"&name=\\\").concat(encodeURIComponent(name)); // Add metadata:\\n\\n if (metadata) {\\n url = \\\"\\\".concat(url, \\\"&metadata=\\\").concat(encodeURIComponent(metadata));\\n } // Query:\\n // we await explicitly to make sure the error is catch'd in the correct scope\\n\\n\\n _context3.next = 11;\\n return utils.fetchJson(url);\\n\\n case 11:\\n return _context3.abrupt(\\\"return\\\", _context3.sent);\\n\\n case 14:\\n _context3.prev = 14;\\n _context3.t0 = _context3[\\\"catch\\\"](5);\\n return _context3.abrupt(\\\"return\\\", {});\\n\\n case 17:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3, null, [[5, 14]]);\\n }));\\n\\n function getSpace(_x3, _x4) {\\n return _getSpace.apply(this, arguments);\\n }\\n\\n return getSpace;\\n }() // TODO consumes address now, could also give root DID to get space DID\\n\\n }, {\\n key: \\\"getSpaceDID\\\",\\n value: function () {\\n var _getSpaceDID = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee4(address, space) {\\n var opts,\\n conf,\\n _args4 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee4$(_context4) {\\n while (1) {\\n switch (_context4.prev = _context4.next) {\\n case 0:\\n opts = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : {};\\n _context4.next = 3;\\n return BoxApi.getConfig(address, opts);\\n\\n case 3:\\n conf = _context4.sent;\\n\\n if (!(!conf.spaces[space] || !conf.spaces[space].DID)) {\\n _context4.next = 6;\\n break;\\n }\\n\\n throw new Error(\\\"Could not find appropriate DID for address \\\".concat(address));\\n\\n case 6:\\n return _context4.abrupt(\\\"return\\\", conf.spaces[space].DID);\\n\\n case 7:\\n case \\\"end\\\":\\n return _context4.stop();\\n }\\n }\\n }, _callee4);\\n }));\\n\\n function getSpaceDID(_x5, _x6) {\\n return _getSpaceDID.apply(this, arguments);\\n }\\n\\n return getSpaceDID;\\n }()\\n /**\\n * Get all posts that are made to a thread.\\n *\\n * @param {String} space The name of the space the thread is in\\n * @param {String} name The name of the thread\\n * @param {String} firstModerator The DID (or ethereum address) of the first moderator\\n * @param {Boolean} members True if only members are allowed to post\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Array<Object>} An array of posts\\n */\\n\\n }, {\\n key: \\\"getThread\\\",\\n value: function () {\\n var _getThread = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee5(space, name, firstModerator, members) {\\n var opts,\\n serverUrl,\\n url,\\n _args5 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee5$(_context5) {\\n while (1) {\\n switch (_context5.prev = _context5.next) {\\n case 0:\\n opts = _args5.length > 4 && _args5[4] !== undefined ? _args5[4] : {};\\n serverUrl = opts.profileServer || PROFILE_SERVER_URL;\\n\\n if (!firstModerator.startsWith('0x')) {\\n _context5.next = 6;\\n break;\\n }\\n\\n _context5.next = 5;\\n return BoxApi.getSpaceDID(firstModerator, space, opts);\\n\\n case 5:\\n firstModerator = _context5.sent;\\n\\n case 6:\\n _context5.prev = 6;\\n url = \\\"\\\".concat(serverUrl, \\\"/thread?space=\\\").concat(encodeURIComponent(space), \\\"&name=\\\").concat(encodeURIComponent(name));\\n url += \\\"&mod=\\\".concat(encodeURIComponent(firstModerator), \\\"&members=\\\").concat(encodeURIComponent(members));\\n _context5.next = 11;\\n return utils.fetchJson(url);\\n\\n case 11:\\n return _context5.abrupt(\\\"return\\\", _context5.sent);\\n\\n case 14:\\n _context5.prev = 14;\\n _context5.t0 = _context5[\\\"catch\\\"](6);\\n throw new Error(_context5.t0);\\n\\n case 17:\\n case \\\"end\\\":\\n return _context5.stop();\\n }\\n }\\n }, _callee5, null, [[6, 14]]);\\n }));\\n\\n function getThread(_x7, _x8, _x9, _x10) {\\n return _getThread.apply(this, arguments);\\n }\\n\\n return getThread;\\n }()\\n /**\\n * Get all posts that are made to a thread.\\n *\\n * @param {String} address The orbitdb-address of the thread\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Array<Object>} An array of posts\\n */\\n\\n }, {\\n key: \\\"getThreadByAddress\\\",\\n value: function () {\\n var _getThreadByAddress = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee6(address) {\\n var opts,\\n serverUrl,\\n _args6 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee6$(_context6) {\\n while (1) {\\n switch (_context6.prev = _context6.next) {\\n case 0:\\n opts = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : {};\\n serverUrl = opts.profileServer || PROFILE_SERVER_URL;\\n _context6.prev = 2;\\n _context6.next = 5;\\n return utils.fetchJson(\\\"\\\".concat(serverUrl, \\\"/thread?address=\\\").concat(encodeURIComponent(address)));\\n\\n case 5:\\n return _context6.abrupt(\\\"return\\\", _context6.sent);\\n\\n case 8:\\n _context6.prev = 8;\\n _context6.t0 = _context6[\\\"catch\\\"](2);\\n throw new Error(_context6.t0);\\n\\n case 11:\\n case \\\"end\\\":\\n return _context6.stop();\\n }\\n }\\n }, _callee6, null, [[2, 8]]);\\n }));\\n\\n function getThreadByAddress(_x11) {\\n return _getThreadByAddress.apply(this, arguments);\\n }\\n\\n return getThreadByAddress;\\n }()\\n /**\\n * Get the configuration of a users 3Box\\n *\\n * @param {String} address The ethereum address\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Array<Object>} An array of posts\\n */\\n\\n }, {\\n key: \\\"getConfig\\\",\\n value: function () {\\n var _getConfig = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee7(address) {\\n var opts,\\n serverUrl,\\n isAddr,\\n _args7 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee7$(_context7) {\\n while (1) {\\n switch (_context7.prev = _context7.next) {\\n case 0:\\n opts = _args7.length > 1 && _args7[1] !== undefined ? _args7[1] : {};\\n serverUrl = opts.profileServer || PROFILE_SERVER_URL;\\n isAddr = address.startsWith('0x'); // assume 3ID if not address\\n\\n _context7.prev = 3;\\n _context7.next = 6;\\n return utils.fetchJson(\\\"\\\".concat(serverUrl, \\\"/config?\\\").concat(isAddr ? 'address' : 'did', \\\"=\\\").concat(encodeURIComponent(address)));\\n\\n case 6:\\n return _context7.abrupt(\\\"return\\\", _context7.sent);\\n\\n case 9:\\n _context7.prev = 9;\\n _context7.t0 = _context7[\\\"catch\\\"](3);\\n throw new Error(_context7.t0);\\n\\n case 12:\\n case \\\"end\\\":\\n return _context7.stop();\\n }\\n }\\n }, _callee7, null, [[3, 9]]);\\n }));\\n\\n function getConfig(_x12) {\\n return _getConfig.apply(this, arguments);\\n }\\n\\n return getConfig;\\n }()\\n /**\\n * Get the public profile of a given address\\n *\\n * @param {String} address An ethereum address\\n * @param {Object} opts Optional parameters\\n * @param {Function} opts.blocklist A function that takes an address and returns true if the user has been blocked\\n * @param {String} opts.metadata flag to retrieve metadata\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Object} a json object with the profile for the given address\\n */\\n\\n }, {\\n key: \\\"getProfile\\\",\\n value: function () {\\n var _getProfile = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee8(address) {\\n var _ref3,\\n profileServer,\\n metadata,\\n blocklist,\\n serverUrl,\\n url,\\n _args8 = arguments;\\n\\n return _regenerator[\\\"default\\\"].wrap(function _callee8$(_context8) {\\n while (1) {\\n switch (_context8.prev = _context8.next) {\\n case 0:\\n _ref3 = _args8.length > 1 && _args8[1] !== undefined ? _args8[1] : {}, profileServer = _ref3.profileServer, metadata = _ref3.metadata, blocklist = _ref3.blocklist;\\n\\n if (!(blocklist && blocklist(address))) {\\n _context8.next = 3;\\n break;\\n }\\n\\n throw new Error(\\\"user with \\\".concat(address, \\\" is blocked\\\"));\\n\\n case 3:\\n serverUrl = profileServer || PROFILE_SERVER_URL;\\n url = \\\"\\\".concat(serverUrl, \\\"/profile\\\");\\n _context8.prev = 5;\\n\\n // Add first parameter: address or did\\n if (isSupportedDID(address)) {\\n url = \\\"\\\".concat(url, \\\"?did=\\\").concat(address);\\n } else {\\n url = \\\"\\\".concat(url, \\\"?address=\\\").concat(encodeURIComponent(address.toLowerCase()));\\n } // Add metadata:\\n\\n\\n if (metadata) {\\n url = \\\"\\\".concat(url, \\\"&metadata=\\\").concat(encodeURIComponent(metadata));\\n } // Query:\\n // we await explicitly to make sure the error is catch'd in the correct scope\\n\\n\\n _context8.next = 10;\\n return utils.fetchJson(url);\\n\\n case 10:\\n return _context8.abrupt(\\\"return\\\", _context8.sent);\\n\\n case 13:\\n _context8.prev = 13;\\n _context8.t0 = _context8[\\\"catch\\\"](5);\\n return _context8.abrupt(\\\"return\\\", {});\\n\\n case 16:\\n case \\\"end\\\":\\n return _context8.stop();\\n }\\n }\\n }, _callee8, null, [[5, 13]]);\\n }));\\n\\n function getProfile(_x13) {\\n return _getProfile.apply(this, arguments);\\n }\\n\\n return getProfile;\\n }()\\n /**\\n * Get a list of public profiles for given addresses. This relies on 3Box profile API.\\n *\\n * @param {Array} address An array of ethereum addresses\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Object} a json object with each key an address and value the profile\\n */\\n\\n }, {\\n key: \\\"getProfiles\\\",\\n value: function () {\\n var _getProfiles = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee9(addressArray) {\\n var opts,\\n req,\\n url,\\n _args9 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee9$(_context9) {\\n while (1) {\\n switch (_context9.prev = _context9.next) {\\n case 0:\\n opts = _args9.length > 1 && _args9[1] !== undefined ? _args9[1] : {};\\n opts = Object.assign({\\n profileServer: PROFILE_SERVER_URL\\n }, opts);\\n req = {\\n addressList: [],\\n didList: []\\n }; // Split addresses on ethereum / dids\\n\\n addressArray.forEach(function (address) {\\n if (isSupportedDID(address)) {\\n req.didList.push(address);\\n } else {\\n req.addressList.push(address);\\n }\\n });\\n url = \\\"\\\".concat(opts.profileServer, \\\"/profileList\\\");\\n return _context9.abrupt(\\\"return\\\", utils.fetchJson(url, req));\\n\\n case 6:\\n case \\\"end\\\":\\n return _context9.stop();\\n }\\n }\\n }, _callee9);\\n }));\\n\\n function getProfiles(_x14) {\\n return _getProfiles.apply(this, arguments);\\n }\\n\\n return getProfiles;\\n }()\\n /**\\n * GraphQL for 3Box profile API\\n *\\n * @param {Object} query A graphQL query object.\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.graphqlServer URL of graphQL 3Box profile service\\n * @return {Object} a json object with each key an address and value the profile\\n */\\n\\n }, {\\n key: \\\"profileGraphQL\\\",\\n value: function () {\\n var _profileGraphQL = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee10(query) {\\n var opts,\\n _args10 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee10$(_context10) {\\n while (1) {\\n switch (_context10.prev = _context10.next) {\\n case 0:\\n opts = _args10.length > 1 && _args10[1] !== undefined ? _args10[1] : {};\\n opts = Object.assign({\\n graphqlServer: GRAPHQL_SERVER_URL\\n }, opts);\\n return _context10.abrupt(\\\"return\\\", graphQLRequest(opts.graphqlServer, query));\\n\\n case 3:\\n case \\\"end\\\":\\n return _context10.stop();\\n }\\n }\\n }, _callee10);\\n }));\\n\\n function profileGraphQL(_x15) {\\n return _profileGraphQL.apply(this, arguments);\\n }\\n\\n return profileGraphQL;\\n }()\\n /**\\n * Verifies the proofs of social accounts that is present in the profile.\\n *\\n * @param {Object} profile A user profile object, received from the `getProfile` function\\n * @return {Object} An object containing the accounts that have been verified\\n */\\n\\n }, {\\n key: \\\"getVerifiedAccounts\\\",\\n value: function () {\\n var _getVerifiedAccounts = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee11(profile) {\\n var verifs, didVerified, dids;\\n return _regenerator[\\\"default\\\"].wrap(function _callee11$(_context11) {\\n while (1) {\\n switch (_context11.prev = _context11.next) {\\n case 0:\\n verifs = {};\\n _context11.prev = 1;\\n _context11.next = 4;\\n return verifier.verifyDID(profile.proof_did);\\n\\n case 4:\\n didVerified = _context11.sent;\\n dids = [didVerified.did];\\n verifs.did = didVerified.did;\\n\\n if (didVerified.muport) {\\n verifs.muport = didVerified.muport;\\n dids.push(didVerified.muport);\\n }\\n\\n if (!profile.proof_github) {\\n _context11.next = 17;\\n break;\\n }\\n\\n _context11.prev = 9;\\n _context11.next = 12;\\n return verifier.verifyGithub(dids, profile.proof_github);\\n\\n case 12:\\n verifs.github = _context11.sent;\\n _context11.next = 17;\\n break;\\n\\n case 15:\\n _context11.prev = 15;\\n _context11.t0 = _context11[\\\"catch\\\"](9);\\n\\n case 17:\\n if (!profile.proof_twitter) {\\n _context11.next = 26;\\n break;\\n }\\n\\n _context11.prev = 18;\\n _context11.next = 21;\\n return verifier.verifyTwitter(dids, profile.proof_twitter);\\n\\n case 21:\\n verifs.twitter = _context11.sent;\\n _context11.next = 26;\\n break;\\n\\n case 24:\\n _context11.prev = 24;\\n _context11.t1 = _context11[\\\"catch\\\"](18);\\n\\n case 26:\\n if (!profile.ethereum_proof) {\\n _context11.next = 35;\\n break;\\n }\\n\\n _context11.prev = 27;\\n _context11.next = 30;\\n return verifier.verifyEthereum(profile.ethereum_proof, verifs.did);\\n\\n case 30:\\n verifs.ethereum = _context11.sent;\\n _context11.next = 35;\\n break;\\n\\n case 33:\\n _context11.prev = 33;\\n _context11.t2 = _context11[\\\"catch\\\"](27);\\n\\n case 35:\\n _context11.next = 39;\\n break;\\n\\n case 37:\\n _context11.prev = 37;\\n _context11.t3 = _context11[\\\"catch\\\"](1);\\n\\n case 39:\\n return _context11.abrupt(\\\"return\\\", verifs);\\n\\n case 40:\\n case \\\"end\\\":\\n return _context11.stop();\\n }\\n }\\n }, _callee11, null, [[1, 37], [9, 15], [18, 24], [27, 33]]);\\n }));\\n\\n function getVerifiedAccounts(_x16) {\\n return _getVerifiedAccounts.apply(this, arguments);\\n }\\n\\n return getVerifiedAccounts;\\n }()\\n }]);\\n return BoxApi;\\n}();\\n\\nmodule.exports = BoxApi;\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/api.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3box/lib/config.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/3box/lib/config.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(process) {\\n\\nvar Log = __webpack_require__(/*! ipfs-log */ \\\"./node_modules/ipfs-log/src/log.js\\\");\\n\\nvar IFRAME_STORE_VERSION = '0.0.3';\\nvar RENDEZVOUS_DISABLE = !(!process.env.RENDEZVOUS_DISABLE || ['0', 'f', 'false', 'no', 'off'].includes(process.env.RENDEZVOUS_DISABLE.toLowerCase()));\\nmodule.exports = {\\n address_server_url: process.env.ADDRESS_SERVER_URL || 'https://beta.3box.io/address-server',\\n pinning_node: process.env.PINNING_NODE || '/dnsaddr/ipfs.3box.io/tcp/443/wss/ipfs/QmZvxEpiVNjmNbEKyQGvFzAY1BwmGuuvdUTmcTstQPhyVC',\\n pinning_room: process.env.PINNING_ROOM || '3box-pinning',\\n iframe_store_version: process.env.IFRAME_STORE_VERSION || IFRAME_STORE_VERSION,\\n iframe_store_url: process.env.IFRAME_STORE_URL || \\\"https://iframe.3box.io/\\\".concat(IFRAME_STORE_VERSION, \\\"/iframe.html\\\"),\\n ipfs_options: {\\n preload: {\\n enabled: false\\n },\\n config: {\\n Bootstrap: [],\\n Addresses: {\\n Swarm: RENDEZVOUS_DISABLE ? [] : [process.env.RENDEZVOUS_ADDRESS || '/dns4/p2p.3box.io/tcp/9090/wss/p2p-websocket-star/']\\n }\\n }\\n },\\n orbitdb_options: {\\n syncLocal: true,\\n sortFn: Log.Sorting.SortByEntryHash // this option is required now but will likely not be in the future.\\n\\n },\\n graphql_server_url: process.env.GRAPHQL_SERVER_URL || 'https://api.3box.io/graph/',\\n profile_server_url: process.env.PROFILE_SERVER_URL || 'https://ipfs.3box.io',\\n muport_ipfs_host: process.env.MUPORT_IPFS_HOST || 'ipfs.infura.io',\\n muport_ipfs_port: process.env.MUPORT_IPFS_PORT || 5001,\\n muport_ipfs_protocol: process.env.MUPORT_IPFS_PROTOCOL || 'https'\\n};\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \\\"./node_modules/process/browser.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/config.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3box/lib/utils/id.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/3box/lib/utils/id.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\n/**\\n * A module to verify & validate claims\\n *\\n * @name idUtils\\n * @memberof Box\\n */\\nvar didJWT = __webpack_require__(/*! did-jwt */ \\\"./node_modules/did-jwt/lib/index.js\\\");\\n\\nvar DID_MUPORT_PREFIX = 'did:muport:';\\nvar DID_3_PREFIX = 'did:3:';\\nmodule.exports = {\\n /**\\n * Check whether a string is a muport did or not\\n *\\n * @memberOf Box.idUtils\\n * @param {String} did A string containing a user did\\n * @return {*|boolean} Whether the did is a supported did or not\\n */\\n isSupportedDID: function isSupportedDID(did) {\\n return did.startsWith(DID_MUPORT_PREFIX) || did.startsWith(DID_3_PREFIX);\\n },\\n // for backwards compatibility\\n isMuportDID: function isMuportDID(did) {\\n return did.startsWith(DID_MUPORT_PREFIX);\\n },\\n\\n /**\\n * Check whether a string is a valid claim or not\\n *\\n * @memberOf Box.idUtils\\n * @param {String} claim\\n * @param {Object} opts Optional parameters\\n * @param {string} opts.audience The DID of the audience of the JWT\\n * @return {Promise<boolean>} whether the parameter is an actual claim\\n */\\n isClaim: function () {\\n var _isClaim = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(claim) {\\n var opts,\\n _args = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n opts = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};\\n _context.prev = 1;\\n _context.next = 4;\\n return didJWT.decodeJWT(claim, opts);\\n\\n case 4:\\n return _context.abrupt(\\\"return\\\", true);\\n\\n case 7:\\n _context.prev = 7;\\n _context.t0 = _context[\\\"catch\\\"](1);\\n return _context.abrupt(\\\"return\\\", false);\\n\\n case 10:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, null, [[1, 7]]);\\n }));\\n\\n function isClaim(_x) {\\n return _isClaim.apply(this, arguments);\\n }\\n\\n return isClaim;\\n }(),\\n\\n /**\\n * Verify a claim and return its content.\\n * See https://github.com/uport-project/did-jwt/ for more details.\\n *\\n * @memberOf Box.idUtils\\n * @param {String} claim\\n * @param {Object} opts Optional parameters\\n * @param {string} opts.audience The DID of the JWT's audience\\n * @return {Object} The validated claim\\n */\\n verifyClaim: didJWT.verifyJWT\\n};\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/utils/id.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3box/lib/utils/index.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/3box/lib/utils/index.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar fetch = typeof window !== 'undefined' ? window.fetch : __webpack_require__(/*! node-fetch */ \\\"./node_modules/node-fetch/browser.js\\\");\\n\\nvar Multihash = __webpack_require__(/*! multihashes */ \\\"./node_modules/multihashes/src/index.js\\\");\\n\\nvar sha256 = __webpack_require__(/*! js-sha256 */ \\\"./node_modules/js-sha256/src/sha256.js\\\").sha256;\\n\\nvar ENC_BLOCK_SIZE = 24;\\nvar MAGIC_ERC1271_VALUE = '0x20c13b0b';\\n\\nvar pad = function pad(val) {\\n var blockSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ENC_BLOCK_SIZE;\\n var blockDiff = (blockSize - val.length % blockSize) % blockSize;\\n return \\\"\\\".concat(val).concat('\\\\0'.repeat(blockDiff));\\n};\\n\\nvar unpad = function unpad(padded) {\\n return padded.replace(/\\\\0+$/, '');\\n};\\n\\nvar HTTPError = function HTTPError(status, message) {\\n var e = new Error(message);\\n e.statusCode = status;\\n return e;\\n};\\n\\nvar getMessageConsent = function getMessageConsent(did, timestamp) {\\n var msg = 'Create a new 3Box profile' + '\\\\n\\\\n' + '- \\\\n' + 'Your unique profile ID is ' + did;\\n if (timestamp) msg += ' \\\\n' + 'Timestamp: ' + timestamp;\\n return msg;\\n};\\n\\nvar safeSend = function safeSend(provider, data) {\\n var send = (Boolean(provider.sendAsync) ? provider.sendAsync : provider.send).bind(provider);\\n return new Promise(function (resolve, reject) {\\n send(data, function (err, result) {\\n if (err) reject(err);else if (result.error) reject(result.error);else resolve(result.result);\\n });\\n });\\n};\\n\\nvar encodeRpcCall = function encodeRpcCall(method, params, fromAddress) {\\n return {\\n jsonrpc: '2.0',\\n id: 1,\\n method: method,\\n params: params,\\n fromAddress: fromAddress\\n };\\n};\\n\\nvar callRpc =\\n/*#__PURE__*/\\nfunction () {\\n var _ref = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(provider, method, params, fromAddress) {\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n return _context.abrupt(\\\"return\\\", safeSend(provider, encodeRpcCall(method, params, fromAddress)));\\n\\n case 1:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee);\\n }));\\n\\n return function callRpc(_x, _x2, _x3, _x4) {\\n return _ref.apply(this, arguments);\\n };\\n}();\\n\\nmodule.exports = {\\n getMessageConsent: getMessageConsent,\\n callRpc: callRpc,\\n openBoxConsent: function openBoxConsent(fromAddress, ethereum) {\\n var text = 'This app wants to view and update your 3Box profile.';\\n if (ethereum.isAuthereum) return ethereum.signMessageWithSigningKey(text);\\n var msg = '0x' + Buffer.from(text, 'utf8').toString('hex');\\n var params = [msg, fromAddress];\\n var method = 'personal_sign';\\n return callRpc(ethereum, method, params, fromAddress);\\n },\\n openSpaceConsent: function openSpaceConsent(fromAddress, ethereum, name) {\\n var text = \\\"Allow this app to open your \\\".concat(name, \\\" space.\\\");\\n if (ethereum.isAuthereum) return ethereum.signMessageWithSigningKey(text);\\n var msg = '0x' + Buffer.from(text, 'utf8').toString('hex');\\n var params = [msg, fromAddress];\\n var method = 'personal_sign';\\n return callRpc(ethereum, method, params, fromAddress);\\n },\\n fetchJson: function () {\\n var _fetchJson = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(url, body) {\\n var opts, r, res;\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n if (body) {\\n opts = {\\n body: JSON.stringify(body),\\n method: 'POST',\\n headers: {\\n 'Content-Type': 'application/json'\\n }\\n };\\n }\\n\\n _context2.next = 3;\\n return fetch(url, opts);\\n\\n case 3:\\n r = _context2.sent;\\n\\n if (!r.ok) {\\n _context2.next = 11;\\n break;\\n }\\n\\n _context2.next = 7;\\n return r.json();\\n\\n case 7:\\n res = _context2.sent;\\n return _context2.abrupt(\\\"return\\\", res);\\n\\n case 11:\\n _context2.t0 = HTTPError;\\n _context2.t1 = r.status;\\n _context2.next = 15;\\n return r.json();\\n\\n case 15:\\n _context2.t2 = _context2.sent.message;\\n throw (0, _context2.t0)(_context2.t1, _context2.t2);\\n\\n case 17:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2);\\n }));\\n\\n function fetchJson(_x5, _x6) {\\n return _fetchJson.apply(this, arguments);\\n }\\n\\n return fetchJson;\\n }(),\\n fetchText: function () {\\n var _fetchText = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee3(url, opts) {\\n var r;\\n return _regenerator[\\\"default\\\"].wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n _context3.next = 2;\\n return fetch(url, opts);\\n\\n case 2:\\n r = _context3.sent;\\n\\n if (!r.ok) {\\n _context3.next = 7;\\n break;\\n }\\n\\n return _context3.abrupt(\\\"return\\\", r.text());\\n\\n case 7:\\n throw HTTPError(r.status, \\\"Invalid response (\\\".concat(r.status, \\\") for query at \\\").concat(url));\\n\\n case 8:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3);\\n }));\\n\\n function fetchText(_x7, _x8) {\\n return _fetchText.apply(this, arguments);\\n }\\n\\n return fetchText;\\n }(),\\n throwIfUndefined: function throwIfUndefined(arg, name) {\\n if (arg === undefined || arg === null) {\\n throw new Error(\\\"\\\".concat(name, \\\" is a required argument\\\"));\\n }\\n },\\n throwIfNotEqualLenArrays: function throwIfNotEqualLenArrays(arr1, arr2) {\\n if (!Array.isArray(arr1) || !Array.isArray(arr2)) {\\n throw new Error('One or more arguments are not an array');\\n }\\n\\n if (arr1.length !== arr2.length) {\\n throw new Error('Arrays must be of the same length');\\n }\\n },\\n sha256Multihash: function sha256Multihash(str) {\\n var digest = Buffer.from(sha256.digest(str));\\n return Multihash.encode(digest, 'sha2-256').toString('hex');\\n },\\n randInt: function randInt(max) {\\n return Math.floor(Math.random() * max);\\n },\\n sha256: sha256,\\n pad: pad,\\n unpad: unpad\\n};\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/utils/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3box/lib/utils/verifier.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/3box/lib/utils/verifier.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _require = __webpack_require__(/*! ./index */ \\\"./node_modules/3box/lib/utils/index.js\\\"),\\n fetchText = _require.fetchText,\\n getMessageConsent = _require.getMessageConsent;\\n\\nvar didJWT = __webpack_require__(/*! did-jwt */ \\\"./node_modules/did-jwt/lib/index.js\\\");\\n\\nvar _require2 = __webpack_require__(/*! @ethersproject/wallet */ \\\"./node_modules/@ethersproject/wallet/lib.esm/index.js\\\"),\\n verifyMessage = _require2.verifyMessage;\\n\\nvar config = __webpack_require__(/*! ../config.js */ \\\"./node_modules/3box/lib/config.js\\\");\\n\\nvar utils = __webpack_require__(/*! ./index */ \\\"./node_modules/3box/lib/utils/index.js\\\");\\n\\nvar registerResolver = __webpack_require__(/*! 3id-resolver */ \\\"./node_modules/3id-resolver/lib/register.js\\\");\\n\\n__webpack_require__(/*! https-did-resolver */ \\\"./node_modules/https-did-resolver/lib/register.js\\\")[\\\"default\\\"]();\\n\\n__webpack_require__(/*! muport-did-resolver */ \\\"./node_modules/muport-did-resolver/lib/register.js\\\")();\\n\\nvar PROFILE_SERVER_URL = config.profile_server_url; // Mocks ipfs obj for 3id resolve, to resolve through api, until ipfs instance is available\\n\\nvar ipfs = function ipfs(didServerUrl) {\\n return {\\n dag: {\\n get: function () {\\n var _get = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(cid) {\\n var req;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n req = \\\"\\\".concat(didServerUrl, \\\"/did-doc?cid=\\\").concat(encodeURIComponent(cid));\\n return _context.abrupt(\\\"return\\\", utils.fetchJson(req));\\n\\n case 2:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee);\\n }));\\n\\n function get(_x) {\\n return _get.apply(this, arguments);\\n }\\n\\n return get;\\n }()\\n }\\n };\\n};\\n\\nregisterResolver(ipfs(PROFILE_SERVER_URL), {\\n pin: false\\n});\\nmodule.exports = {\\n /**\\n * Verifies that the gist contains the given 3ID and returns the users github username.\\n * Throws an error otherwise.\\n *\\n * @param {String} did The 3ID of the user (or array of equivalent dids)\\n * @param {Object} gistUrl URL of the proof\\n * @return {Object} Object containing username, and proof\\n */\\n verifyGithub: function () {\\n var _verifyGithub = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(did, gistUrl) {\\n var dids, gistFileContent, includeDid, username;\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n dids = typeof did === 'string' ? [did] : did;\\n\\n if (!(!gistUrl || gistUrl.trim() === '')) {\\n _context2.next = 3;\\n break;\\n }\\n\\n return _context2.abrupt(\\\"return\\\", null);\\n\\n case 3:\\n _context2.next = 5;\\n return fetchText(gistUrl);\\n\\n case 5:\\n gistFileContent = _context2.sent;\\n includeDid = dids.reduce(function (acc, val) {\\n return acc || gistFileContent.indexOf(val) !== -1;\\n }, false);\\n\\n if (includeDid) {\\n _context2.next = 9;\\n break;\\n }\\n\\n throw new Error('Gist File provided does not contain the correct DID of the user');\\n\\n case 9:\\n username = gistUrl.split('/')[3];\\n return _context2.abrupt(\\\"return\\\", {\\n username: username,\\n proof: gistUrl\\n });\\n\\n case 11:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2);\\n }));\\n\\n function verifyGithub(_x2, _x3) {\\n return _verifyGithub.apply(this, arguments);\\n }\\n\\n return verifyGithub;\\n }(),\\n\\n /**\\n * Verifies that the tweet contains the given 3ID and returns the users twitter username.\\n * Throws an error otherwise.\\n *\\n * @param {String} did The 3ID of the user (or array of equivalent dids)\\n * @param {String} claim A did-JWT with claim\\n * @return {Object} Object containing username, proof, and the verifier\\n */\\n verifyTwitter: function () {\\n var _verifyTwitter = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee3(did, claim) {\\n var dids, verified, claimData;\\n return _regenerator[\\\"default\\\"].wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n dids = typeof did === 'string' ? [did] : did;\\n\\n if (claim) {\\n _context3.next = 3;\\n break;\\n }\\n\\n return _context3.abrupt(\\\"return\\\", null);\\n\\n case 3:\\n _context3.next = 5;\\n return didJWT.verifyJWT(claim);\\n\\n case 5:\\n verified = _context3.sent;\\n\\n if (dids.includes(verified.payload.sub)) {\\n _context3.next = 8;\\n break;\\n }\\n\\n throw new Error('Verification not valid for given user');\\n\\n case 8:\\n claimData = verified.payload.claim;\\n\\n if (!(!claimData.twitter_handle || !claimData.twitter_proof)) {\\n _context3.next = 11;\\n break;\\n }\\n\\n throw new Error('The claim for your twitter is not correct');\\n\\n case 11:\\n return _context3.abrupt(\\\"return\\\", {\\n username: claimData.twitter_handle,\\n proof: claimData.twitter_proof,\\n verifiedBy: verified.payload.iss\\n });\\n\\n case 12:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3);\\n }));\\n\\n function verifyTwitter(_x4, _x5) {\\n return _verifyTwitter.apply(this, arguments);\\n }\\n\\n return verifyTwitter;\\n }(),\\n\\n /**\\n * Verifies that the code entered by the user is the same one that was sent via email.\\n * Throws an error otherwise.\\n *\\n * @param {String} did The 3ID of the user (or array of equivalent dids)\\n * @param {String} claim A did-JWT with claim\\n * @return {Object} Object containing username, proof, and the verifier\\n */\\n verifyEmail: function () {\\n var _verifyEmail = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee4(did, claim) {\\n var dids, verified, claimData;\\n return _regenerator[\\\"default\\\"].wrap(function _callee4$(_context4) {\\n while (1) {\\n switch (_context4.prev = _context4.next) {\\n case 0:\\n dids = typeof did === 'string' ? [did] : did;\\n\\n if (claim) {\\n _context4.next = 3;\\n break;\\n }\\n\\n return _context4.abrupt(\\\"return\\\", null);\\n\\n case 3:\\n _context4.next = 5;\\n return didJWT.verifyJWT(claim);\\n\\n case 5:\\n verified = _context4.sent;\\n\\n if (dids.includes(verified.payload.sub)) {\\n _context4.next = 8;\\n break;\\n }\\n\\n throw new Error('Verification not valid for given user');\\n\\n case 8:\\n claimData = verified.payload.claim;\\n\\n if (claimData.email_address) {\\n _context4.next = 11;\\n break;\\n }\\n\\n throw new Error('The claim for your email address is not correct');\\n\\n case 11:\\n return _context4.abrupt(\\\"return\\\", {\\n email_address: claimData.email_address,\\n verifiedBy: verified.payload.iss\\n });\\n\\n case 12:\\n case \\\"end\\\":\\n return _context4.stop();\\n }\\n }\\n }, _callee4);\\n }));\\n\\n function verifyEmail(_x6, _x7) {\\n return _verifyEmail.apply(this, arguments);\\n }\\n\\n return verifyEmail;\\n }(),\\n\\n /**\\n * Verifies that the proof for a did is correct\\n *\\n * @param {String} claim A did-JWT with claim\\n * @return {String} The DID of the user\\n */\\n verifyDID: function () {\\n var _verifyDID = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee5(claim) {\\n var verified, muport, res, muportDID;\\n return _regenerator[\\\"default\\\"].wrap(function _callee5$(_context5) {\\n while (1) {\\n switch (_context5.prev = _context5.next) {\\n case 0:\\n _context5.next = 2;\\n return didJWT.verifyJWT(claim);\\n\\n case 2:\\n verified = _context5.sent;\\n muport = verified.payload.muport;\\n res = {};\\n\\n if (!muport) {\\n _context5.next = 10;\\n break;\\n }\\n\\n _context5.next = 8;\\n return didJWT.verifyJWT(muport);\\n\\n case 8:\\n muportDID = _context5.sent.payload.iss;\\n res.muport = muportDID;\\n\\n case 10:\\n res.did = verified.payload.iss;\\n return _context5.abrupt(\\\"return\\\", res);\\n\\n case 12:\\n case \\\"end\\\":\\n return _context5.stop();\\n }\\n }\\n }, _callee5);\\n }));\\n\\n function verifyDID(_x8) {\\n return _verifyDID.apply(this, arguments);\\n }\\n\\n return verifyDID;\\n }(),\\n\\n /**\\n * Verifies that the proof for an ethereum address is correct\\n *\\n * @param {Object} ethProof The claim generated by getLinkConsent\\n * @param {string} ethProof.consent_msg\\n * @param {string} ethProof.consent_signature\\n * @param {string} ethProof.linked_did\\n * @param {String} did The box' did\\n * @return {String} The ethereum address used to sign the message\\n */\\n verifyEthereum: function () {\\n var _verifyEthereum = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee6(ethProof, did) {\\n var dids, consentMsg, consentSig, expected;\\n return _regenerator[\\\"default\\\"].wrap(function _callee6$(_context6) {\\n while (1) {\\n switch (_context6.prev = _context6.next) {\\n case 0:\\n dids = typeof did === 'string' ? [did] : did; // TODO - is this function needed? Can it be removed in\\n // favour of proofs that are in the rootstore?\\n\\n consentMsg = ethProof.version ? ethProof.message : ethProof['consent_msg'];\\n consentSig = ethProof.version ? ethProof.signature : ethProof['consent_signature']; // Make sure the message matches our expectation\\n\\n expected = getMessageConsent(did);\\n\\n if (!(consentMsg !== expected)) {\\n _context6.next = 6;\\n break;\\n }\\n\\n throw new Error(\\\"Invalid consent message, got: \\\\\\\"\\\".concat(consentMsg, \\\"\\\\\\\", expected: \\\\\\\"\\\").concat(expected, \\\"\\\\\\\"\\\"));\\n\\n case 6:\\n return _context6.abrupt(\\\"return\\\", verifyMessage(consentMsg, consentSig));\\n\\n case 7:\\n case \\\"end\\\":\\n return _context6.stop();\\n }\\n }\\n }, _callee6);\\n }));\\n\\n function verifyEthereum(_x9, _x10) {\\n return _verifyEthereum.apply(this, arguments);\\n }\\n\\n return verifyEthereum;\\n }()\\n};\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/utils/verifier.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/lib/register.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/3id-resolver/lib/register.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _didJwt = __webpack_require__(/*! did-jwt */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/index.js\\\");\\n\\nvar _ipfsDidDocument = _interopRequireDefault(__webpack_require__(/*! ipfs-did-document */ \\\"./node_modules/ipfs-did-document/index.js\\\"));\\n\\nvar _base64url = _interopRequireDefault(__webpack_require__(/*! base64url */ \\\"./node_modules/base64url/index.js\\\"));\\n\\nvar _didResolver = __webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\");\\n\\nvar PUBKEY_IDS = ['signingKey', 'managementKey', 'encryptionKey'];\\nvar SUB_PUBKEY_IDS = ['subSigningKey', 'subEncryptionKey'];\\n\\nfunction register(ipfs) {\\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n (0, _didResolver.registerMethod)('3', function (_, _ref) {\\n var id = _ref.id;\\n return resolve(ipfs, id);\\n });\\n}\\n\\nfunction resolve(_x, _x2, _x3) {\\n return _resolve.apply(this, arguments);\\n}\\n\\nfunction _resolve() {\\n _resolve = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(ipfs, cid, isRoot) {\\n var doc, rootDoc;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _context.prev = 0;\\n _context.next = 3;\\n return _ipfsDidDocument[\\\"default\\\"].cidToDocument(ipfs, cid);\\n\\n case 3:\\n doc = _context.sent;\\n validateDoc(doc);\\n\\n if (!doc.root) {\\n _context.next = 14;\\n break;\\n }\\n\\n if (!isRoot) {\\n _context.next = 8;\\n break;\\n }\\n\\n throw new Error('Only one layer subDoc allowed');\\n\\n case 8:\\n _context.next = 10;\\n return resolve(ipfs, doc.root.split(':')[2], true);\\n\\n case 10:\\n rootDoc = _context.sent;\\n _context.next = 13;\\n return verifyProof(doc);\\n\\n case 13:\\n doc = mergeDocuments(rootDoc, doc);\\n\\n case 14:\\n _context.next = 26;\\n break;\\n\\n case 16:\\n _context.prev = 16;\\n _context.t0 = _context[\\\"catch\\\"](0);\\n _context.prev = 18;\\n _context.next = 21;\\n return ipfs.pin.rm(cid);\\n\\n case 21:\\n _context.next = 25;\\n break;\\n\\n case 23:\\n _context.prev = 23;\\n _context.t1 = _context[\\\"catch\\\"](18);\\n\\n case 25:\\n throw new Error('Invalid 3ID');\\n\\n case 26:\\n return _context.abrupt(\\\"return\\\", doc);\\n\\n case 27:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, null, [[0, 16], [18, 23]]);\\n }));\\n return _resolve.apply(this, arguments);\\n}\\n\\nfunction validateDoc(doc) {\\n var pubKeyIds = PUBKEY_IDS;\\n\\n if (!doc || !doc.publicKey || !doc.authentication) {\\n throw new Error('Not a valid 3ID');\\n }\\n\\n if (doc.root) {\\n pubKeyIds = SUB_PUBKEY_IDS;\\n if (!doc.space) throw new Error('Not a valid 3ID');\\n }\\n\\n doc.publicKey.map(function (entry) {\\n var id = entry.id.split('#')[1];\\n if (!pubKeyIds.includes(id)) throw new Error('Not a valid 3ID');\\n });\\n}\\n\\nfunction encodeSection(data) {\\n return _base64url[\\\"default\\\"].encode(JSON.stringify(data));\\n}\\n\\nfunction verifyProof(_x4) {\\n return _verifyProof.apply(this, arguments);\\n}\\n\\nfunction _verifyProof() {\\n _verifyProof = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(subDoc) {\\n var subSigningKey, subEncryptionKey, payload, header, jwt;\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n subSigningKey = subDoc.publicKey.find(function (entry) {\\n return entry.id.includes(SUB_PUBKEY_IDS[0]);\\n }).publicKeyHex;\\n subEncryptionKey = subDoc.publicKey.find(function (entry) {\\n return entry.id.includes(SUB_PUBKEY_IDS[1]);\\n }).publicKeyBase64;\\n payload = encodeSection({\\n iat: null,\\n subSigningKey: subSigningKey,\\n subEncryptionKey: subEncryptionKey,\\n space: subDoc.space,\\n iss: subDoc.root\\n });\\n header = encodeSection({\\n typ: 'JWT',\\n alg: subDoc.proof.alg\\n });\\n jwt = \\\"\\\".concat(header, \\\".\\\").concat(payload, \\\".\\\").concat(subDoc.proof.signature);\\n _context2.next = 7;\\n return (0, _didJwt.verifyJWT)(jwt);\\n\\n case 7:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2);\\n }));\\n return _verifyProof.apply(this, arguments);\\n}\\n\\nfunction mergeDocuments(doc, subDoc) {\\n subDoc.publicKey = doc.publicKey.concat(subDoc.publicKey);\\n return subDoc;\\n}\\n\\nmodule.exports = register;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/lib/register.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n value: true\\n});\\nexports.sha256 = sha256;\\nexports.keccak = keccak;\\nexports.toEthereumAddress = toEthereumAddress;\\n\\nvar _jsSha = __webpack_require__(/*! js-sha256 */ \\\"./node_modules/js-sha256/src/sha256.js\\\");\\n\\nvar _jsSha2 = __webpack_require__(/*! js-sha3 */ \\\"./node_modules/3id-resolver/node_modules/js-sha3/src/sha3.js\\\");\\n\\nvar _buffer = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\");\\n\\n// eslint-disable-line\\nfunction sha256(payload) {\\n return _buffer.Buffer.from(_jsSha.sha256.arrayBuffer(payload));\\n}\\n\\nfunction keccak(data) {\\n return _buffer.Buffer.from(_jsSha2.keccak_256.buffer(data));\\n}\\n\\nfunction toEthereumAddress(hexPublicKey) {\\n return \\\"0x\\\".concat(keccak(_buffer.Buffer.from(hexPublicKey.slice(2), 'hex')).slice(-20).toString('hex'));\\n}\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/JWT.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/JWT.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n value: true\\n});\\nexports.normalizeDID = normalizeDID;\\nexports.decodeJWT = decodeJWT;\\nexports.createJWT = createJWT;\\nexports.verifyJWT = verifyJWT;\\nexports.resolveAuthenticator = resolveAuthenticator;\\nexports.default = exports.IAT_SKEW = void 0;\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread */ \\\"./node_modules/@babel/runtime/helpers/objectSpread.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _VerifierAlgorithm = _interopRequireDefault(__webpack_require__(/*! ./VerifierAlgorithm */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/VerifierAlgorithm.js\\\"));\\n\\nvar _SignerAlgorithm = _interopRequireDefault(__webpack_require__(/*! ./SignerAlgorithm */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/SignerAlgorithm.js\\\"));\\n\\nvar _base64url = _interopRequireDefault(__webpack_require__(/*! base64url */ \\\"./node_modules/base64url/index.js\\\"));\\n\\nvar _didResolver = _interopRequireDefault(__webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\"));\\n\\nvar SUPPORTED_PUBLIC_KEY_TYPES = {\\n ES256K: ['Secp256k1VerificationKey2018', 'Secp256k1SignatureVerificationKey2018', 'EcdsaPublicKeySecp256k1'],\\n 'ES256K-R': ['Secp256k1VerificationKey2018', 'Secp256k1SignatureVerificationKey2018', 'EcdsaPublicKeySecp256k1'],\\n 'Ed25519': ['ED25519SignatureVerification']\\n};\\nvar JOSE_HEADER = {\\n typ: 'JWT'\\n};\\nvar defaultAlg = 'ES256K';\\n\\nfunction encodeSection(data) {\\n return _base64url.default.encode(JSON.stringify(data));\\n}\\n\\nvar IAT_SKEW = 300;\\n/** @module did-jwt/JWT */\\n\\nexports.IAT_SKEW = IAT_SKEW;\\n\\nfunction isMNID(id) {\\n return id.match(/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/);\\n}\\n\\nfunction isDIDOrMNID(mnidOrDid) {\\n return mnidOrDid && (mnidOrDid.match(/^did:/) || isMNID(mnidOrDid));\\n}\\n\\nfunction normalizeDID(mnidOrDid) {\\n if (mnidOrDid.match(/^did:/)) return mnidOrDid; // Backwards compatibility\\n\\n if (isMNID(mnidOrDid)) return \\\"did:uport:\\\".concat(mnidOrDid);\\n throw new Error(\\\"Not a valid DID '\\\".concat(mnidOrDid, \\\"'\\\"));\\n}\\n/**\\n* Decodes a JWT and returns an object representing the payload\\n*\\n* @example\\n* decodeJWT('eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJpYXQiOjE1MjU5Mjc1MTcsImF1ZCI6ImRpZDp1cG9ydDoyb3NuZko0V3k3TEJBbTJuUEJYaXJlMVdmUW43NVJyVjZUcyIsImV4cCI6MTU1NzQ2MzQyMSwibmFtZSI6InVQb3J0IERldmVsb3BlciIsImlzcyI6ImRpZDp1cG9ydDoyb3NuZko0V3k3TEJBbTJuUEJYaXJlMVdmUW43NVJyVjZUcyJ9.R7owbvNZoL4ti5ec-Kpktb0datw9Y-FshHsF5R7cXuKaiGlQz1dcOOXbXTOb-wg7-30CDfchFERR6Yc8F61ymw')\\n*\\n* @param {String} jwt a JSON Web Token to verify\\n* @return {Object} a JS object representing the decoded JWT\\n*/\\n\\n\\nfunction decodeJWT(jwt) {\\n if (!jwt) throw new Error('no JWT passed into decodeJWT');\\n var parts = jwt.match(/^([a-zA-Z0-9_-]+)\\\\.([a-zA-Z0-9_-]+)\\\\.([a-zA-Z0-9_-]+)$/);\\n\\n if (parts) {\\n return {\\n header: JSON.parse(_base64url.default.decode(parts[1])),\\n payload: JSON.parse(_base64url.default.decode(parts[2])),\\n signature: parts[3],\\n data: \\\"\\\".concat(parts[1], \\\".\\\").concat(parts[2])\\n };\\n }\\n\\n throw new Error('Incorrect format JWT');\\n}\\n/**\\n* Creates a signed JWT given an address which becomes the issuer, a signer, and a payload for which the signature is over.\\n*\\n* @example\\n* const signer = SimpleSigner(process.env.PRIVATE_KEY)\\n* createJWT({address: '5A8bRWU3F7j3REx3vkJ...', signer}, {key1: 'value', key2: ..., ... }).then(jwt => {\\n* ...\\n* })\\n*\\n* @param {Object} payload payload object\\n* @param {Object} [options] an unsigned credential object\\n* @param {String} options.issuer The DID of the issuer (signer) of JWT\\n* @param {String} options.alg The JWT signing algorithm to use. Supports: [ES256K, ES256K-R, Ed25519], Defaults to: ES256K\\n* @param {SimpleSigner} options.signer a signer, reference our SimpleSigner.js\\n* @return {Promise<Object, Error>} a promise which resolves with a signed JSON Web Token or rejects with an error\\n*/\\n\\n\\nfunction createJWT(_x, _x2) {\\n return _createJWT.apply(this, arguments);\\n}\\n/**\\n* Verifies given JWT. If the JWT is valid, the promise returns an object including the JWT, the payload of the JWT,\\n* and the did doc of the issuer of the JWT.\\n*\\n* @example\\n* verifyJWT('did:uport:eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJyZXF1Z....', {audience: '5A8bRWU3F7j3REx3vkJ...', callbackUrl: 'https://...'}).then(obj => {\\n* const did = obj.did // DID of signer\\n* const payload = obj.payload\\n* const doc = obj.doc // DID Document of signer\\n* const jwt = obj.jwt\\n* const signerKeyId = obj.signerKeyId // ID of key in DID document that signed JWT\\n* ...\\n* })\\n*\\n* @param {String} jwt a JSON Web Token to verify\\n* @param {Object} [options] an unsigned credential object\\n* @param {Boolean} options.auth Require signer to be listed in the authentication section of the DID document (for Authentication purposes)\\n* @param {String} options.audience DID of the recipient of the JWT\\n* @param {String} options.callbackUrl callback url in JWT\\n* @return {Promise<Object, Error>} a promise which resolves with a response object or rejects with an error\\n*/\\n\\n\\nfunction _createJWT() {\\n _createJWT = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee(payload, _ref) {\\n var issuer, signer, alg, expiresIn, header, timestamps, signingInput, jwtSigner, signature;\\n return _regenerator.default.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n issuer = _ref.issuer, signer = _ref.signer, alg = _ref.alg, expiresIn = _ref.expiresIn;\\n\\n if (signer) {\\n _context.next = 3;\\n break;\\n }\\n\\n throw new Error('No Signer functionality has been configured');\\n\\n case 3:\\n if (issuer) {\\n _context.next = 5;\\n break;\\n }\\n\\n throw new Error('No issuing DID has been configured');\\n\\n case 5:\\n header = (0, _objectSpread2.default)({}, JOSE_HEADER, {\\n alg: alg || defaultAlg\\n });\\n timestamps = {\\n iat: Math.floor(Date.now() / 1000)\\n };\\n\\n if (!expiresIn) {\\n _context.next = 13;\\n break;\\n }\\n\\n if (!(typeof expiresIn === 'number')) {\\n _context.next = 12;\\n break;\\n }\\n\\n timestamps.exp = timestamps.iat + Math.floor(expiresIn);\\n _context.next = 13;\\n break;\\n\\n case 12:\\n throw new Error('JWT expiresIn is not a number');\\n\\n case 13:\\n signingInput = [encodeSection(header), encodeSection((0, _objectSpread2.default)({}, timestamps, payload, {\\n iss: issuer\\n }))].join('.');\\n jwtSigner = (0, _SignerAlgorithm.default)(header.alg);\\n _context.next = 17;\\n return jwtSigner(signingInput, signer);\\n\\n case 17:\\n signature = _context.sent;\\n return _context.abrupt(\\\"return\\\", [signingInput, signature].join('.'));\\n\\n case 19:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this);\\n }));\\n return _createJWT.apply(this, arguments);\\n}\\n\\nfunction verifyJWT(_x3) {\\n return _verifyJWT.apply(this, arguments);\\n}\\n/**\\n* Resolves relevant public keys or other authenticating material used to verify signature from the DID document of provided DID\\n*\\n* @example\\n* resolveAuthenticator('ES256K', 'did:uport:2nQtiQG6Cgm1GYTBaaKAgr76uY7iSexUkqX').then(obj => {\\n* const payload = obj.payload\\n* const profile = obj.profile\\n* const jwt = obj.jwt\\n* ...\\n* })\\n*\\n* @param {String} alg a JWT algorithm\\n* @param {String} did a Decentralized IDentifier (DID) to lookup\\n* @param {Boolean} auth Restrict public keys to ones specifically listed in the 'authentication' section of DID document\\n* @return {Promise<Object, Error>} a promise which resolves with a response object containing an array of authenticators or if non exist rejects with an error\\n*/\\n\\n\\nfunction _verifyJWT() {\\n _verifyJWT = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee2(jwt) {\\n var options,\\n aud,\\n _decodeJWT,\\n payload,\\n header,\\n signature,\\n data,\\n _ref2,\\n doc,\\n authenticators,\\n issuer,\\n signer,\\n now,\\n _args2 = arguments;\\n\\n return _regenerator.default.wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n options = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};\\n aud = options.audience ? normalizeDID(options.audience) : undefined;\\n _decodeJWT = decodeJWT(jwt), payload = _decodeJWT.payload, header = _decodeJWT.header, signature = _decodeJWT.signature, data = _decodeJWT.data;\\n _context2.next = 5;\\n return resolveAuthenticator(header.alg, payload.iss, options.auth);\\n\\n case 5:\\n _ref2 = _context2.sent;\\n doc = _ref2.doc;\\n authenticators = _ref2.authenticators;\\n issuer = _ref2.issuer;\\n signer = (0, _VerifierAlgorithm.default)(header.alg)(data, signature, authenticators);\\n now = Math.floor(Date.now() / 1000);\\n\\n if (!signer) {\\n _context2.next = 31;\\n break;\\n }\\n\\n if (!(payload.iat && payload.iat > now + IAT_SKEW)) {\\n _context2.next = 14;\\n break;\\n }\\n\\n throw new Error(\\\"JWT not valid yet (issued in the future): iat: \\\".concat(payload.iat, \\\" > now: \\\").concat(now));\\n\\n case 14:\\n if (!(payload.exp && payload.exp <= now - IAT_SKEW)) {\\n _context2.next = 16;\\n break;\\n }\\n\\n throw new Error(\\\"JWT has expired: exp: \\\".concat(payload.exp, \\\" < now: \\\").concat(now));\\n\\n case 16:\\n if (!payload.aud) {\\n _context2.next = 28;\\n break;\\n }\\n\\n if (!isDIDOrMNID(payload.aud)) {\\n _context2.next = 24;\\n break;\\n }\\n\\n if (aud) {\\n _context2.next = 20;\\n break;\\n }\\n\\n throw new Error('JWT audience is required but your app address has not been configured');\\n\\n case 20:\\n if (!(aud !== normalizeDID(payload.aud))) {\\n _context2.next = 22;\\n break;\\n }\\n\\n throw new Error(\\\"JWT audience does not match your DID: aud: \\\".concat(payload.aud, \\\" !== yours: \\\").concat(aud));\\n\\n case 22:\\n _context2.next = 28;\\n break;\\n\\n case 24:\\n if (options.callbackUrl) {\\n _context2.next = 26;\\n break;\\n }\\n\\n throw new Error('JWT audience matching your callback url is required but one wasn\\\\'t passed in');\\n\\n case 26:\\n if (!(payload.aud !== options.callbackUrl)) {\\n _context2.next = 28;\\n break;\\n }\\n\\n throw new Error(\\\"JWT audience does not match the callback url: aud: \\\".concat(payload.aud, \\\" !== url: \\\").concat(options.callbackUrl));\\n\\n case 28:\\n return _context2.abrupt(\\\"return\\\", {\\n payload: payload,\\n doc: doc,\\n issuer: issuer,\\n signer: signer,\\n jwt: jwt\\n });\\n\\n case 31:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2, this);\\n }));\\n return _verifyJWT.apply(this, arguments);\\n}\\n\\nfunction resolveAuthenticator(_x4, _x5, _x6) {\\n return _resolveAuthenticator.apply(this, arguments);\\n}\\n\\nfunction _resolveAuthenticator() {\\n _resolveAuthenticator = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee3(alg, mnidOrDid, auth) {\\n var types, issuer, doc, authenticationKeys, authenticators;\\n return _regenerator.default.wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n types = SUPPORTED_PUBLIC_KEY_TYPES[alg];\\n\\n if (!(!types || types.length === 0)) {\\n _context3.next = 3;\\n break;\\n }\\n\\n throw new Error(\\\"No supported signature types for algorithm \\\".concat(alg));\\n\\n case 3:\\n issuer = normalizeDID(mnidOrDid);\\n _context3.next = 6;\\n return (0, _didResolver.default)(issuer);\\n\\n case 6:\\n doc = _context3.sent;\\n\\n if (doc) {\\n _context3.next = 9;\\n break;\\n }\\n\\n throw new Error(\\\"Unable to resolve DID document for \\\".concat(issuer));\\n\\n case 9:\\n authenticationKeys = auth ? (doc.authentication || []).map(function (_ref3) {\\n var publicKey = _ref3.publicKey;\\n return publicKey;\\n }) : true;\\n authenticators = (doc.publicKey || []).filter(function (_ref4) {\\n var type = _ref4.type,\\n id = _ref4.id;\\n return types.find(function (supported) {\\n return supported === type && (!auth || authenticationKeys.indexOf(id) >= 0);\\n });\\n });\\n\\n if (!(auth && (!authenticators || authenticators.length === 0))) {\\n _context3.next = 13;\\n break;\\n }\\n\\n throw new Error(\\\"DID document for \\\".concat(issuer, \\\" does not have public keys suitable for authenticationg user\\\"));\\n\\n case 13:\\n if (!(!authenticators || authenticators.length === 0)) {\\n _context3.next = 15;\\n break;\\n }\\n\\n throw new Error(\\\"DID document for \\\".concat(issuer, \\\" does not have public keys for \\\").concat(alg));\\n\\n case 15:\\n return _context3.abrupt(\\\"return\\\", {\\n authenticators: authenticators,\\n issuer: issuer,\\n doc: doc\\n });\\n\\n case 16:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3, this);\\n }));\\n return _resolveAuthenticator.apply(this, arguments);\\n}\\n\\nvar _default = {\\n decodeJWT: decodeJWT,\\n createJWT: createJWT,\\n verifyJWT: verifyJWT,\\n resolveAuthenticator: resolveAuthenticator\\n};\\nexports.default = _default;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/JWT.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/NaclSigner.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/NaclSigner.js ***!\n \\**************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _tweetnacl = _interopRequireDefault(__webpack_require__(/*! tweetnacl */ \\\"./node_modules/tweetnacl/nacl-fast.js\\\"));\\n\\nvar _tweetnaclUtil = _interopRequireDefault(__webpack_require__(/*! tweetnacl-util */ \\\"./node_modules/tweetnacl-util/nacl-util.js\\\"));\\n\\nfunction encodeBase64Url(data) {\\n return _tweetnaclUtil.default.encodeBase64(data).replace(/\\\\+/g, '-').replace(/\\\\//g, '_').replace(/=/g, '');\\n}\\n/**\\n* The NaclSigner returns a configured function for signing data using the Ed25519 algorithm. It also defines\\n* an interface that you can also implement yourself and use in our other modules.\\n*\\n* The signing function itself takes the data as a string parameter and returls a base64Url encoded signature\\n*\\n* @example\\n* const signer = NaclSigner(process.env.PRIVATE_KEY)\\n* signer(data, (err, signature) => {\\n* ...\\n* })\\n*\\n* @param {String} base64PrivateKey a 64 byte base64 encoded private key\\n* @return {Function} a configured signer function\\n*/\\n\\n\\nfunction NaclSigner(base64PrivateKey) {\\n var privateKey = _tweetnaclUtil.default.decodeBase64(base64PrivateKey);\\n\\n return (\\n /*#__PURE__*/\\n function () {\\n var _ref = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee(data) {\\n return _regenerator.default.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n return _context.abrupt(\\\"return\\\", encodeBase64Url(_tweetnacl.default.sign.detached(_tweetnaclUtil.default.decodeUTF8(data), privateKey)));\\n\\n case 1:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this);\\n }));\\n\\n return function (_x) {\\n return _ref.apply(this, arguments);\\n };\\n }()\\n );\\n}\\n\\nmodule.exports = NaclSigner;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/NaclSigner.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/SignerAlgorithm.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/SignerAlgorithm.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n value: true\\n});\\nexports.ES256KSigner = ES256KSigner;\\nexports.Ed25519Signer = Ed25519Signer;\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _base64url = _interopRequireDefault(__webpack_require__(/*! base64url */ \\\"./node_modules/base64url/index.js\\\"));\\n\\nvar _buffer = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\");\\n\\nfunction ES256KSigner() {\\n var recoverable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\\n\\n function toJose(_ref) {\\n var r = _ref.r,\\n s = _ref.s,\\n recoveryParam = _ref.recoveryParam;\\n\\n var jose = _buffer.Buffer.alloc(recoverable ? 65 : 64);\\n\\n _buffer.Buffer.from(r, 'hex').copy(jose, 0);\\n\\n _buffer.Buffer.from(s, 'hex').copy(jose, 32);\\n\\n if (recoverable) {\\n if (recoveryParam === undefined) throw new Error('Signer did not return a recoveryParam');\\n jose[64] = recoveryParam;\\n }\\n\\n return _base64url.default.encode(jose);\\n }\\n\\n return (\\n /*#__PURE__*/\\n function () {\\n var _sign = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee(payload, signer) {\\n var signature;\\n return _regenerator.default.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _context.next = 2;\\n return signer(payload);\\n\\n case 2:\\n signature = _context.sent;\\n return _context.abrupt(\\\"return\\\", toJose(signature));\\n\\n case 4:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this);\\n }));\\n\\n function sign(_x, _x2) {\\n return _sign.apply(this, arguments);\\n }\\n\\n return sign;\\n }()\\n );\\n}\\n\\nfunction Ed25519Signer() {\\n return (\\n /*#__PURE__*/\\n function () {\\n var _sign2 = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee2(payload, signer) {\\n return _regenerator.default.wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n return _context2.abrupt(\\\"return\\\", signer(payload));\\n\\n case 1:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2, this);\\n }));\\n\\n function sign(_x3, _x4) {\\n return _sign2.apply(this, arguments);\\n }\\n\\n return sign;\\n }()\\n );\\n}\\n\\nvar algorithms = {\\n ES256K: ES256KSigner(),\\n 'ES256K-R': ES256KSigner(true),\\n 'Ed25519': Ed25519Signer()\\n};\\n\\nfunction SignerAlgorithm(alg) {\\n var impl = algorithms[alg];\\n if (!impl) throw new Error(\\\"Unsupported algorithm \\\".concat(alg));\\n return impl;\\n}\\n\\nmodule.exports = SignerAlgorithm;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/SignerAlgorithm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/SimpleSigner.js\":\n/*!****************************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/SimpleSigner.js ***!\n \\****************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _elliptic = __webpack_require__(/*! elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\n\\nvar _Digest = __webpack_require__(/*! ./Digest */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js\\\");\\n\\nvar secp256k1 = new _elliptic.ec('secp256k1');\\n\\nfunction leftpad(data) {\\n var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 64;\\n if (data.length === size) return data;\\n return '0'.repeat(size - data.length) + data;\\n}\\n/**\\n* The SimpleSigner returns a configured function for signing data. It also defines\\n* an interface that you can also implement yourself and use in our other modules.\\n*\\n* @example\\n* const signer = SimpleSigner(process.env.PRIVATE_KEY)\\n* signer(data, (err, signature) => {\\n* ...\\n* })\\n*\\n* @param {String} hexPrivateKey a hex encoded private key\\n* @return {Function} a configured signer function\\n*/\\n\\n\\nfunction SimpleSigner(hexPrivateKey) {\\n var privateKey = secp256k1.keyFromPrivate(hexPrivateKey);\\n return (\\n /*#__PURE__*/\\n function () {\\n var _ref = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee(data) {\\n var _privateKey$sign, r, s, recoveryParam;\\n\\n return _regenerator.default.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _privateKey$sign = privateKey.sign((0, _Digest.sha256)(data)), r = _privateKey$sign.r, s = _privateKey$sign.s, recoveryParam = _privateKey$sign.recoveryParam;\\n return _context.abrupt(\\\"return\\\", {\\n r: leftpad(r.toString('hex')),\\n s: leftpad(s.toString('hex')),\\n recoveryParam: recoveryParam\\n });\\n\\n case 2:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this);\\n }));\\n\\n return function (_x) {\\n return _ref.apply(this, arguments);\\n };\\n }()\\n );\\n}\\n\\nmodule.exports = SimpleSigner;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/SimpleSigner.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/VerifierAlgorithm.js\":\n/*!*********************************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/VerifierAlgorithm.js ***!\n \\*********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n value: true\\n});\\nexports.toSignatureObject = toSignatureObject;\\nexports.verifyES256K = verifyES256K;\\nexports.verifyRecoverableES256K = verifyRecoverableES256K;\\nexports.verifyEd25519 = verifyEd25519;\\n\\nvar _elliptic = __webpack_require__(/*! elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\n\\nvar _Digest = __webpack_require__(/*! ./Digest */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js\\\");\\n\\nvar _base64url = _interopRequireDefault(__webpack_require__(/*! base64url */ \\\"./node_modules/base64url/index.js\\\"));\\n\\nvar _tweetnacl = _interopRequireDefault(__webpack_require__(/*! tweetnacl */ \\\"./node_modules/tweetnacl/nacl-fast.js\\\"));\\n\\nvar _tweetnaclUtil = _interopRequireDefault(__webpack_require__(/*! tweetnacl-util */ \\\"./node_modules/tweetnacl-util/nacl-util.js\\\"));\\n\\nvar secp256k1 = new _elliptic.ec('secp256k1'); // converts a JOSE signature to it's components\\n\\nfunction toSignatureObject(signature) {\\n var recoverable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\\n\\n var rawsig = _base64url.default.toBuffer(signature);\\n\\n if (rawsig.length !== (recoverable ? 65 : 64)) throw new Error('wrong signature length');\\n var r = rawsig.slice(0, 32).toString('hex');\\n var s = rawsig.slice(32, 64).toString('hex');\\n var sigObj = {\\n r: r,\\n s: s\\n };\\n\\n if (recoverable) {\\n sigObj.recoveryParam = rawsig[64];\\n }\\n\\n return sigObj;\\n}\\n\\nfunction verifyES256K(data, signature, authenticators) {\\n var hash = (0, _Digest.sha256)(data);\\n var sigObj = toSignatureObject(signature);\\n var signer = authenticators.find(function (_ref) {\\n var publicKeyHex = _ref.publicKeyHex;\\n return secp256k1.keyFromPublic(publicKeyHex, 'hex').verify(hash, sigObj);\\n });\\n if (!signer) throw new Error('Signature invalid for JWT');\\n return signer;\\n}\\n\\nfunction verifyRecoverableES256K(data, signature, authenticators) {\\n var sigObj = toSignatureObject(signature, true);\\n var hash = (0, _Digest.sha256)(data);\\n var recoveredKey = secp256k1.recoverPubKey(hash, sigObj, sigObj.recoveryParam);\\n var recoveredPublicKeyHex = recoveredKey.encode('hex');\\n var recoveredCompressedPublicKeyHex = recoveredKey.encode('hex', true);\\n var recoveredAddress = (0, _Digest.toEthereumAddress)(recoveredPublicKeyHex);\\n var signer = authenticators.find(function (_ref2) {\\n var publicKeyHex = _ref2.publicKeyHex,\\n ethereumAddress = _ref2.ethereumAddress;\\n return publicKeyHex === recoveredPublicKeyHex || publicKeyHex === recoveredCompressedPublicKeyHex || ethereumAddress === recoveredAddress;\\n });\\n if (!signer) throw new Error('Signature invalid for JWT');\\n return signer;\\n}\\n\\nfunction verifyEd25519(data, signature, authenticators) {\\n var clear = _tweetnaclUtil.default.decodeUTF8(data);\\n\\n var sig = _tweetnaclUtil.default.decodeBase64(_base64url.default.toBase64(signature));\\n\\n var signer = authenticators.find(function (_ref3) {\\n var publicKeyBase64 = _ref3.publicKeyBase64;\\n return _tweetnacl.default.sign.detached.verify(clear, sig, _tweetnaclUtil.default.decodeBase64(publicKeyBase64));\\n });\\n if (!signer) throw new Error('Signature invalid for JWT');\\n return signer;\\n}\\n\\nvar algorithms = {\\n ES256K: verifyES256K,\\n 'ES256K-R': verifyRecoverableES256K,\\n 'Ed25519': verifyEd25519\\n};\\n\\nfunction VerifierAlgorithm(alg) {\\n var impl = algorithms[alg];\\n if (!impl) throw new Error(\\\"Unsupported algorithm \\\".concat(alg));\\n return impl;\\n}\\n\\nVerifierAlgorithm.toSignatureObject = toSignatureObject;\\nmodule.exports = VerifierAlgorithm;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/VerifierAlgorithm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/index.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/index.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _SimpleSigner = _interopRequireDefault(__webpack_require__(/*! ./SimpleSigner */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/SimpleSigner.js\\\"));\\n\\nvar _NaclSigner = _interopRequireDefault(__webpack_require__(/*! ./NaclSigner */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/NaclSigner.js\\\"));\\n\\nvar _JWT = __webpack_require__(/*! ./JWT */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/JWT.js\\\");\\n\\nmodule.exports = {\\n SimpleSigner: _SimpleSigner.default,\\n NaclSigner: _NaclSigner.default,\\n verifyJWT: _JWT.verifyJWT,\\n createJWT: _JWT.createJWT,\\n decodeJWT: _JWT.decodeJWT\\n};\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/js-sha3/src/sha3.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/js-sha3/src/sha3.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\\n *\\n * @version 0.8.0\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\n * @copyright Chen, Yi-Cyuan 2015-2018\\n * @license MIT\\n */\\n/*jslint bitwise: true */\\n(function () {\\n 'use strict';\\n\\n var INPUT_ERROR = 'input is invalid type';\\n var FINALIZE_ERROR = 'finalize already called';\\n var WINDOW = typeof window === 'object';\\n var root = WINDOW ? window : {};\\n if (root.JS_SHA3_NO_WINDOW) {\\n WINDOW = false;\\n }\\n var WEB_WORKER = !WINDOW && typeof self === 'object';\\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\n if (NODE_JS) {\\n root = global;\\n } else if (WEB_WORKER) {\\n root = self;\\n }\\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\\n var AMD = true && __webpack_require__(/*! !webpack amd options */ \\\"./node_modules/webpack/buildin/amd-options.js\\\");\\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\\n var HEX_CHARS = '0123456789abcdef'.split('');\\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\\n var PADDING = [6, 1536, 393216, 100663296];\\n var SHIFT = [0, 8, 16, 24];\\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\\n var BITS = [224, 256, 384, 512];\\n var SHAKE_BITS = [128, 256];\\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\\n var CSHAKE_BYTEPAD = {\\n '128': 168,\\n '256': 136\\n };\\n\\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\\n Array.isArray = function (obj) {\\n return Object.prototype.toString.call(obj) === '[object Array]';\\n };\\n }\\n\\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\\n ArrayBuffer.isView = function (obj) {\\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\\n };\\n }\\n\\n var createOutputMethod = function (bits, padding, outputType) {\\n return function (message) {\\n return new Keccak(bits, padding, bits).update(message)[outputType]();\\n };\\n };\\n\\n var createShakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits) {\\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\\n };\\n };\\n\\n var createCshakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits, n, s) {\\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\\n };\\n };\\n\\n var createKmacOutputMethod = function (bits, padding, outputType) {\\n return function (key, message, outputBits, s) {\\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\\n };\\n };\\n\\n var createOutputMethods = function (method, createMethod, bits, padding) {\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createMethod(bits, padding, type);\\n }\\n return method;\\n };\\n\\n var createMethod = function (bits, padding) {\\n var method = createOutputMethod(bits, padding, 'hex');\\n method.create = function () {\\n return new Keccak(bits, padding, bits);\\n };\\n method.update = function (message) {\\n return method.create().update(message);\\n };\\n return createOutputMethods(method, createOutputMethod, bits, padding);\\n };\\n\\n var createShakeMethod = function (bits, padding) {\\n var method = createShakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits) {\\n return new Keccak(bits, padding, outputBits);\\n };\\n method.update = function (message, outputBits) {\\n return method.create(outputBits).update(message);\\n };\\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\\n };\\n\\n var createCshakeMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createCshakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits, n, s) {\\n if (!n && !s) {\\n return methods['shake' + bits].create(outputBits);\\n } else {\\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\\n }\\n };\\n method.update = function (message, outputBits, n, s) {\\n return method.create(outputBits, n, s).update(message);\\n };\\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\\n };\\n\\n var createKmacMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createKmacOutputMethod(bits, padding, 'hex');\\n method.create = function (key, outputBits, s) {\\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\\n };\\n method.update = function (key, message, outputBits, s) {\\n return method.create(key, outputBits, s).update(message);\\n };\\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\\n };\\n\\n var algorithms = [\\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\\n ];\\n\\n var methods = {}, methodNames = [];\\n\\n for (var i = 0; i < algorithms.length; ++i) {\\n var algorithm = algorithms[i];\\n var bits = algorithm.bits;\\n for (var j = 0; j < bits.length; ++j) {\\n var methodName = algorithm.name + '_' + bits[j];\\n methodNames.push(methodName);\\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\\n if (algorithm.name !== 'sha3') {\\n var newMethodName = algorithm.name + bits[j];\\n methodNames.push(newMethodName);\\n methods[newMethodName] = methods[methodName];\\n }\\n }\\n }\\n\\n function Keccak(bits, padding, outputBits) {\\n this.blocks = [];\\n this.s = [];\\n this.padding = padding;\\n this.outputBits = outputBits;\\n this.reset = true;\\n this.finalized = false;\\n this.block = 0;\\n this.start = 0;\\n this.blockCount = (1600 - (bits << 1)) >> 5;\\n this.byteCount = this.blockCount << 2;\\n this.outputBlocks = outputBits >> 5;\\n this.extraBytes = (outputBits & 31) >> 3;\\n\\n for (var i = 0; i < 50; ++i) {\\n this.s[i] = 0;\\n }\\n }\\n\\n Keccak.prototype.update = function (message) {\\n if (this.finalized) {\\n throw new Error(FINALIZE_ERROR);\\n }\\n var notString, type = typeof message;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (message === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n } else if (!Array.isArray(message)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\\n\\n while (index < length) {\\n if (this.reset) {\\n this.reset = false;\\n blocks[0] = this.block;\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n if (notString) {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\n }\\n } else {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n code = message.charCodeAt(index);\\n if (code < 0x80) {\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\n } else if (code < 0x800) {\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else if (code < 0xd800 || code >= 0xe000) {\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n }\\n }\\n }\\n this.lastByteIndex = i;\\n if (i >= byteCount) {\\n this.start = i - byteCount;\\n this.block = blocks[blockCount];\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n this.reset = true;\\n } else {\\n this.start = i;\\n }\\n }\\n return this;\\n };\\n\\n Keccak.prototype.encode = function (x, right) {\\n var o = x & 255, n = 1;\\n var bytes = [o];\\n x = x >> 8;\\n o = x & 255;\\n while (o > 0) {\\n bytes.unshift(o);\\n x = x >> 8;\\n o = x & 255;\\n ++n;\\n }\\n if (right) {\\n bytes.push(n);\\n } else {\\n bytes.unshift(n);\\n }\\n this.update(bytes);\\n return bytes.length;\\n };\\n\\n Keccak.prototype.encodeString = function (str) {\\n var notString, type = typeof str;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (str === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\\n str = new Uint8Array(str);\\n } else if (!Array.isArray(str)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var bytes = 0, length = str.length;\\n if (notString) {\\n bytes = length;\\n } else {\\n for (var i = 0; i < str.length; ++i) {\\n var code = str.charCodeAt(i);\\n if (code < 0x80) {\\n bytes += 1;\\n } else if (code < 0x800) {\\n bytes += 2;\\n } else if (code < 0xd800 || code >= 0xe000) {\\n bytes += 3;\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\\n bytes += 4;\\n }\\n }\\n }\\n bytes += this.encode(bytes * 8);\\n this.update(str);\\n return bytes;\\n };\\n\\n Keccak.prototype.bytepad = function (strs, w) {\\n var bytes = this.encode(w);\\n for (var i = 0; i < strs.length; ++i) {\\n bytes += this.encodeString(strs[i]);\\n }\\n var paddingBytes = w - bytes % w;\\n var zeros = [];\\n zeros.length = paddingBytes;\\n this.update(zeros);\\n return this;\\n };\\n\\n Keccak.prototype.finalize = function () {\\n if (this.finalized) {\\n return;\\n }\\n this.finalized = true;\\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\\n blocks[i >> 2] |= this.padding[i & 3];\\n if (this.lastByteIndex === this.byteCount) {\\n blocks[0] = blocks[blockCount];\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n blocks[blockCount - 1] |= 0x80000000;\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n };\\n\\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var hex = '', block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n i = 0;\\n }\\n }\\n if (extraBytes) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\\n if (extraBytes > 1) {\\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\\n }\\n if (extraBytes > 2) {\\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\\n }\\n }\\n return hex;\\n };\\n\\n Keccak.prototype.arrayBuffer = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var bytes = this.outputBits >> 3;\\n var buffer;\\n if (extraBytes) {\\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\\n } else {\\n buffer = new ArrayBuffer(bytes);\\n }\\n var array = new Uint32Array(buffer);\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n array[j] = s[i];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n array[i] = s[i];\\n buffer = buffer.slice(0, bytes);\\n }\\n return buffer;\\n };\\n\\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\\n\\n Keccak.prototype.digest = Keccak.prototype.array = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var array = [], offset, block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n array[offset + 1] = (block >> 8) & 0xFF;\\n array[offset + 2] = (block >> 16) & 0xFF;\\n array[offset + 3] = (block >> 24) & 0xFF;\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n if (extraBytes > 1) {\\n array[offset + 1] = (block >> 8) & 0xFF;\\n }\\n if (extraBytes > 2) {\\n array[offset + 2] = (block >> 16) & 0xFF;\\n }\\n }\\n return array;\\n };\\n\\n function Kmac(bits, padding, outputBits) {\\n Keccak.call(this, bits, padding, outputBits);\\n }\\n\\n Kmac.prototype = new Keccak();\\n\\n Kmac.prototype.finalize = function () {\\n this.encode(this.outputBits, true);\\n return Keccak.prototype.finalize.call(this);\\n };\\n\\n var f = function (s) {\\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\\n for (n = 0; n < 48; n += 2) {\\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\\n\\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\\n s[0] ^= h;\\n s[1] ^= l;\\n s[10] ^= h;\\n s[11] ^= l;\\n s[20] ^= h;\\n s[21] ^= l;\\n s[30] ^= h;\\n s[31] ^= l;\\n s[40] ^= h;\\n s[41] ^= l;\\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\\n s[2] ^= h;\\n s[3] ^= l;\\n s[12] ^= h;\\n s[13] ^= l;\\n s[22] ^= h;\\n s[23] ^= l;\\n s[32] ^= h;\\n s[33] ^= l;\\n s[42] ^= h;\\n s[43] ^= l;\\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\\n s[4] ^= h;\\n s[5] ^= l;\\n s[14] ^= h;\\n s[15] ^= l;\\n s[24] ^= h;\\n s[25] ^= l;\\n s[34] ^= h;\\n s[35] ^= l;\\n s[44] ^= h;\\n s[45] ^= l;\\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\\n s[6] ^= h;\\n s[7] ^= l;\\n s[16] ^= h;\\n s[17] ^= l;\\n s[26] ^= h;\\n s[27] ^= l;\\n s[36] ^= h;\\n s[37] ^= l;\\n s[46] ^= h;\\n s[47] ^= l;\\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\\n s[8] ^= h;\\n s[9] ^= l;\\n s[18] ^= h;\\n s[19] ^= l;\\n s[28] ^= h;\\n s[29] ^= l;\\n s[38] ^= h;\\n s[39] ^= l;\\n s[48] ^= h;\\n s[49] ^= l;\\n\\n b0 = s[0];\\n b1 = s[1];\\n b32 = (s[11] << 4) | (s[10] >>> 28);\\n b33 = (s[10] << 4) | (s[11] >>> 28);\\n b14 = (s[20] << 3) | (s[21] >>> 29);\\n b15 = (s[21] << 3) | (s[20] >>> 29);\\n b46 = (s[31] << 9) | (s[30] >>> 23);\\n b47 = (s[30] << 9) | (s[31] >>> 23);\\n b28 = (s[40] << 18) | (s[41] >>> 14);\\n b29 = (s[41] << 18) | (s[40] >>> 14);\\n b20 = (s[2] << 1) | (s[3] >>> 31);\\n b21 = (s[3] << 1) | (s[2] >>> 31);\\n b2 = (s[13] << 12) | (s[12] >>> 20);\\n b3 = (s[12] << 12) | (s[13] >>> 20);\\n b34 = (s[22] << 10) | (s[23] >>> 22);\\n b35 = (s[23] << 10) | (s[22] >>> 22);\\n b16 = (s[33] << 13) | (s[32] >>> 19);\\n b17 = (s[32] << 13) | (s[33] >>> 19);\\n b48 = (s[42] << 2) | (s[43] >>> 30);\\n b49 = (s[43] << 2) | (s[42] >>> 30);\\n b40 = (s[5] << 30) | (s[4] >>> 2);\\n b41 = (s[4] << 30) | (s[5] >>> 2);\\n b22 = (s[14] << 6) | (s[15] >>> 26);\\n b23 = (s[15] << 6) | (s[14] >>> 26);\\n b4 = (s[25] << 11) | (s[24] >>> 21);\\n b5 = (s[24] << 11) | (s[25] >>> 21);\\n b36 = (s[34] << 15) | (s[35] >>> 17);\\n b37 = (s[35] << 15) | (s[34] >>> 17);\\n b18 = (s[45] << 29) | (s[44] >>> 3);\\n b19 = (s[44] << 29) | (s[45] >>> 3);\\n b10 = (s[6] << 28) | (s[7] >>> 4);\\n b11 = (s[7] << 28) | (s[6] >>> 4);\\n b42 = (s[17] << 23) | (s[16] >>> 9);\\n b43 = (s[16] << 23) | (s[17] >>> 9);\\n b24 = (s[26] << 25) | (s[27] >>> 7);\\n b25 = (s[27] << 25) | (s[26] >>> 7);\\n b6 = (s[36] << 21) | (s[37] >>> 11);\\n b7 = (s[37] << 21) | (s[36] >>> 11);\\n b38 = (s[47] << 24) | (s[46] >>> 8);\\n b39 = (s[46] << 24) | (s[47] >>> 8);\\n b30 = (s[8] << 27) | (s[9] >>> 5);\\n b31 = (s[9] << 27) | (s[8] >>> 5);\\n b12 = (s[18] << 20) | (s[19] >>> 12);\\n b13 = (s[19] << 20) | (s[18] >>> 12);\\n b44 = (s[29] << 7) | (s[28] >>> 25);\\n b45 = (s[28] << 7) | (s[29] >>> 25);\\n b26 = (s[38] << 8) | (s[39] >>> 24);\\n b27 = (s[39] << 8) | (s[38] >>> 24);\\n b8 = (s[48] << 14) | (s[49] >>> 18);\\n b9 = (s[49] << 14) | (s[48] >>> 18);\\n\\n s[0] = b0 ^ (~b2 & b4);\\n s[1] = b1 ^ (~b3 & b5);\\n s[10] = b10 ^ (~b12 & b14);\\n s[11] = b11 ^ (~b13 & b15);\\n s[20] = b20 ^ (~b22 & b24);\\n s[21] = b21 ^ (~b23 & b25);\\n s[30] = b30 ^ (~b32 & b34);\\n s[31] = b31 ^ (~b33 & b35);\\n s[40] = b40 ^ (~b42 & b44);\\n s[41] = b41 ^ (~b43 & b45);\\n s[2] = b2 ^ (~b4 & b6);\\n s[3] = b3 ^ (~b5 & b7);\\n s[12] = b12 ^ (~b14 & b16);\\n s[13] = b13 ^ (~b15 & b17);\\n s[22] = b22 ^ (~b24 & b26);\\n s[23] = b23 ^ (~b25 & b27);\\n s[32] = b32 ^ (~b34 & b36);\\n s[33] = b33 ^ (~b35 & b37);\\n s[42] = b42 ^ (~b44 & b46);\\n s[43] = b43 ^ (~b45 & b47);\\n s[4] = b4 ^ (~b6 & b8);\\n s[5] = b5 ^ (~b7 & b9);\\n s[14] = b14 ^ (~b16 & b18);\\n s[15] = b15 ^ (~b17 & b19);\\n s[24] = b24 ^ (~b26 & b28);\\n s[25] = b25 ^ (~b27 & b29);\\n s[34] = b34 ^ (~b36 & b38);\\n s[35] = b35 ^ (~b37 & b39);\\n s[44] = b44 ^ (~b46 & b48);\\n s[45] = b45 ^ (~b47 & b49);\\n s[6] = b6 ^ (~b8 & b0);\\n s[7] = b7 ^ (~b9 & b1);\\n s[16] = b16 ^ (~b18 & b10);\\n s[17] = b17 ^ (~b19 & b11);\\n s[26] = b26 ^ (~b28 & b20);\\n s[27] = b27 ^ (~b29 & b21);\\n s[36] = b36 ^ (~b38 & b30);\\n s[37] = b37 ^ (~b39 & b31);\\n s[46] = b46 ^ (~b48 & b40);\\n s[47] = b47 ^ (~b49 & b41);\\n s[8] = b8 ^ (~b0 & b2);\\n s[9] = b9 ^ (~b1 & b3);\\n s[18] = b18 ^ (~b10 & b12);\\n s[19] = b19 ^ (~b11 & b13);\\n s[28] = b28 ^ (~b20 & b22);\\n s[29] = b29 ^ (~b21 & b23);\\n s[38] = b38 ^ (~b30 & b32);\\n s[39] = b39 ^ (~b31 & b33);\\n s[48] = b48 ^ (~b40 & b42);\\n s[49] = b49 ^ (~b41 & b43);\\n\\n s[0] ^= RC[n];\\n s[1] ^= RC[n + 1];\\n }\\n };\\n\\n if (COMMON_JS) {\\n module.exports = methods;\\n } else {\\n for (i = 0; i < methodNames.length; ++i) {\\n root[methodNames[i]] = methods[methodNames[i]];\\n }\\n if (AMD) {\\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\\n return methods;\\n }).call(exports, __webpack_require__, exports, module),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n }\\n }\\n})();\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/js-sha3/src/sha3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _assertThisInitialized(self) {\\n if (self === void 0) {\\n throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\");\\n }\\n\\n return self;\\n}\\n\\nmodule.exports = _assertThisInitialized;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/asyncToGenerator.js ***!\n \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\\n try {\\n var info = gen[key](arg);\\n var value = info.value;\\n } catch (error) {\\n reject(error);\\n return;\\n }\\n\\n if (info.done) {\\n resolve(value);\\n } else {\\n Promise.resolve(value).then(_next, _throw);\\n }\\n}\\n\\nfunction _asyncToGenerator(fn) {\\n return function () {\\n var self = this,\\n args = arguments;\\n return new Promise(function (resolve, reject) {\\n var gen = fn.apply(self, args);\\n\\n function _next(value) {\\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value);\\n }\\n\\n function _throw(err) {\\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err);\\n }\\n\\n _next(undefined);\\n });\\n };\\n}\\n\\nmodule.exports = _asyncToGenerator;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _classCallCheck(instance, Constructor) {\\n if (!(instance instanceof Constructor)) {\\n throw new TypeError(\\\"Cannot call a class as a function\\\");\\n }\\n}\\n\\nmodule.exports = _classCallCheck;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/createClass.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/createClass.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _defineProperties(target, props) {\\n for (var i = 0; i < props.length; i++) {\\n var descriptor = props[i];\\n descriptor.enumerable = descriptor.enumerable || false;\\n descriptor.configurable = true;\\n if (\\\"value\\\" in descriptor) descriptor.writable = true;\\n Object.defineProperty(target, descriptor.key, descriptor);\\n }\\n}\\n\\nfunction _createClass(Constructor, protoProps, staticProps) {\\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\\n if (staticProps) _defineProperties(Constructor, staticProps);\\n return Constructor;\\n}\\n\\nmodule.exports = _createClass;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/createClass.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/defineProperty.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _defineProperty(obj, key, value) {\\n if (key in obj) {\\n Object.defineProperty(obj, key, {\\n value: value,\\n enumerable: true,\\n configurable: true,\\n writable: true\\n });\\n } else {\\n obj[key] = value;\\n }\\n\\n return obj;\\n}\\n\\nmodule.exports = _defineProperty;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _getPrototypeOf(o) {\\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\\n return o.__proto__ || Object.getPrototypeOf(o);\\n };\\n return _getPrototypeOf(o);\\n}\\n\\nmodule.exports = _getPrototypeOf;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/inherits.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/inherits.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ \\\"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\\\");\\n\\nfunction _inherits(subClass, superClass) {\\n if (typeof superClass !== \\\"function\\\" && superClass !== null) {\\n throw new TypeError(\\\"Super expression must either be null or a function\\\");\\n }\\n\\n subClass.prototype = Object.create(superClass && superClass.prototype, {\\n constructor: {\\n value: subClass,\\n writable: true,\\n configurable: true\\n }\\n });\\n if (superClass) setPrototypeOf(subClass, superClass);\\n}\\n\\nmodule.exports = _inherits;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/inherits.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _interopRequireDefault(obj) {\\n return obj && obj.__esModule ? obj : {\\n \\\"default\\\": obj\\n };\\n}\\n\\nmodule.exports = _interopRequireDefault;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/objectSpread.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/objectSpread.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var defineProperty = __webpack_require__(/*! ./defineProperty */ \\\"./node_modules/@babel/runtime/helpers/defineProperty.js\\\");\\n\\nfunction _objectSpread(target) {\\n for (var i = 1; i < arguments.length; i++) {\\n var source = arguments[i] != null ? Object(arguments[i]) : {};\\n var ownKeys = Object.keys(source);\\n\\n if (typeof Object.getOwnPropertySymbols === 'function') {\\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\\n }));\\n }\\n\\n ownKeys.forEach(function (key) {\\n defineProperty(target, key, source[key]);\\n });\\n }\\n\\n return target;\\n}\\n\\nmodule.exports = _objectSpread;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/objectSpread.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!\n \\**************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var _typeof = __webpack_require__(/*! ../helpers/typeof */ \\\"./node_modules/@babel/runtime/helpers/typeof.js\\\");\\n\\nvar assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized */ \\\"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\\\");\\n\\nfunction _possibleConstructorReturn(self, call) {\\n if (call && (_typeof(call) === \\\"object\\\" || typeof call === \\\"function\\\")) {\\n return call;\\n }\\n\\n return assertThisInitialized(self);\\n}\\n\\nmodule.exports = _possibleConstructorReturn;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _setPrototypeOf(o, p) {\\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\\n o.__proto__ = p;\\n return o;\\n };\\n\\n return _setPrototypeOf(o, p);\\n}\\n\\nmodule.exports = _setPrototypeOf;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/typeof.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/typeof.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _typeof(obj) {\\n \\\"@babel/helpers - typeof\\\";\\n\\n if (typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\") {\\n module.exports = _typeof = function _typeof(obj) {\\n return typeof obj;\\n };\\n } else {\\n module.exports = _typeof = function _typeof(obj) {\\n return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj;\\n };\\n }\\n\\n return _typeof(obj);\\n}\\n\\nmodule.exports = _typeof;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/typeof.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/regenerator/index.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/@babel/runtime/regenerator/index.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = __webpack_require__(/*! regenerator-runtime */ \\\"./node_modules/regenerator-runtime/runtime.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/regenerator/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/abstract-provider/lib.esm/_version.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/@ethersproject/abstract-provider/lib.esm/_version.js ***!\n \\***************************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"abstract-provider/5.0.0-beta.138\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/abstract-provider/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/abstract-provider/lib.esm/index.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/@ethersproject/abstract-provider/lib.esm/index.js ***!\n \\************************************************************************/\n/*! exports provided: ForkEvent, BlockForkEvent, TransactionForkEvent, TransactionOrderForkEvent, Provider */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"ForkEvent\\\", function() { return ForkEvent; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"BlockForkEvent\\\", function() { return BlockForkEvent; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"TransactionForkEvent\\\", function() { return TransactionForkEvent; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"TransactionOrderForkEvent\\\", function() { return TransactionOrderForkEvent; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Provider\\\", function() { return Provider; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/abstract-provider/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_3__[\\\"version\\\"]);\\n;\\n;\\n//export type CallTransactionable = {\\n// call(transaction: TransactionRequest): Promise<TransactionResponse>;\\n//};\\nclass ForkEvent extends _ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"Description\\\"] {\\n static isForkEvent(value) {\\n return !!(value && value._isForkEvent);\\n }\\n}\\nclass BlockForkEvent extends ForkEvent {\\n constructor(blockhash, expiry) {\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isHexString\\\"])(blockhash, 32)) {\\n logger.throwArgumentError(\\\"invalid blockhash\\\", \\\"blockhash\\\", blockhash);\\n }\\n super({\\n _isForkEvent: true,\\n _isBlockForkEvent: true,\\n expiry: (expiry || 0),\\n blockHash: blockhash\\n });\\n }\\n}\\nclass TransactionForkEvent extends ForkEvent {\\n constructor(hash, expiry) {\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isHexString\\\"])(hash, 32)) {\\n logger.throwArgumentError(\\\"invalid transaction hash\\\", \\\"hash\\\", hash);\\n }\\n super({\\n _isForkEvent: true,\\n _isTransactionForkEvent: true,\\n expiry: (expiry || 0),\\n hash: hash\\n });\\n }\\n}\\nclass TransactionOrderForkEvent extends ForkEvent {\\n constructor(beforeHash, afterHash, expiry) {\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isHexString\\\"])(beforeHash, 32)) {\\n logger.throwArgumentError(\\\"invalid transaction hash\\\", \\\"beforeHash\\\", beforeHash);\\n }\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isHexString\\\"])(afterHash, 32)) {\\n logger.throwArgumentError(\\\"invalid transaction hash\\\", \\\"afterHash\\\", afterHash);\\n }\\n super({\\n _isForkEvent: true,\\n _isTransactionOrderForkEvent: true,\\n expiry: (expiry || 0),\\n beforeHash: beforeHash,\\n afterHash: afterHash\\n });\\n }\\n}\\n///////////////////////////////\\n// Exported Abstracts\\nclass Provider {\\n constructor() {\\n logger.checkAbstract(new.target, Provider);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"_isProvider\\\", true);\\n }\\n // Alias for \\\"on\\\"\\n addListener(eventName, listener) {\\n return this.on(eventName, listener);\\n }\\n // Alias for \\\"off\\\"\\n removeListener(eventName, listener) {\\n return this.off(eventName, listener);\\n }\\n static isProvider(value) {\\n return !!(value && value._isProvider);\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/abstract-provider/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/abstract-signer/lib.esm/_version.js\":\n/*!*************************************************************************!*\\\n !*** ./node_modules/@ethersproject/abstract-signer/lib.esm/_version.js ***!\n \\*************************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"abstract-signer/5.0.0-beta.140\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/abstract-signer/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/abstract-signer/lib.esm/index.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/abstract-signer/lib.esm/index.js ***!\n \\**********************************************************************/\n/*! exports provided: Signer, VoidSigner */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Signer\\\", function() { return Signer; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"VoidSigner\\\", function() { return VoidSigner; });\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/abstract-signer/lib.esm/_version.js\\\");\\n\\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_2__[\\\"version\\\"]);\\nconst allowedTransactionKeys = [\\n \\\"chainId\\\", \\\"data\\\", \\\"from\\\", \\\"gasLimit\\\", \\\"gasPrice\\\", \\\"nonce\\\", \\\"to\\\", \\\"value\\\"\\n];\\n// Sub-Class Notes:\\n// - A Signer MUST always make sure, that if present, the \\\"from\\\" field\\n// matches the Signer, before sending or signing a transaction\\n// - A Signer SHOULD always wrap private information (such as a private\\n// key or mnemonic) in a function, so that console.log does not leak\\n// the data\\nclass Signer {\\n ///////////////////\\n // Sub-classes MUST call super\\n constructor() {\\n logger.checkAbstract(new.target, Signer);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"defineReadOnly\\\"])(this, \\\"_isSigner\\\", true);\\n }\\n ///////////////////\\n // Sub-classes MAY override these\\n getBalance(blockTag) {\\n this._checkProvider(\\\"getBalance\\\");\\n return this.provider.getBalance(this.getAddress(), blockTag);\\n }\\n getTransactionCount(blockTag) {\\n this._checkProvider(\\\"getTransactionCount\\\");\\n return this.provider.getTransactionCount(this.getAddress(), blockTag);\\n }\\n // Populates \\\"from\\\" if unspecified, and estimates the gas for the transation\\n estimateGas(transaction) {\\n this._checkProvider(\\\"estimateGas\\\");\\n return Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"resolveProperties\\\"])(this.checkTransaction(transaction)).then((tx) => {\\n return this.provider.estimateGas(tx);\\n });\\n }\\n // Populates \\\"from\\\" if unspecified, and calls with the transation\\n call(transaction, blockTag) {\\n this._checkProvider(\\\"call\\\");\\n return Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"resolveProperties\\\"])(this.checkTransaction(transaction)).then((tx) => {\\n return this.provider.call(tx);\\n });\\n }\\n // Populates all fields in a transaction, signs it and sends it to the network\\n sendTransaction(transaction) {\\n this._checkProvider(\\\"sendTransaction\\\");\\n return this.populateTransaction(transaction).then((tx) => {\\n return this.signTransaction(tx).then((signedTx) => {\\n return this.provider.sendTransaction(signedTx);\\n });\\n });\\n }\\n getChainId() {\\n this._checkProvider(\\\"getChainId\\\");\\n return this.provider.getNetwork().then((network) => network.chainId);\\n }\\n getGasPrice() {\\n this._checkProvider(\\\"getGasPrice\\\");\\n return this.provider.getGasPrice();\\n }\\n resolveName(name) {\\n this._checkProvider(\\\"resolveName\\\");\\n return this.provider.resolveName(name);\\n }\\n // Checks a transaction does not contain invalid keys and if\\n // no \\\"from\\\" is provided, populates it.\\n // - does NOT require a provider\\n // - adds \\\"from\\\" is not present\\n // - returns a COPY (safe to mutate the result)\\n // By default called from: (overriding these prevents it)\\n // - call\\n // - estimateGas\\n // - populateTransaction (and therefor sendTransaction)\\n checkTransaction(transaction) {\\n for (const key in transaction) {\\n if (allowedTransactionKeys.indexOf(key) === -1) {\\n logger.throwArgumentError(\\\"invalid transaction key: \\\" + key, \\\"transaction\\\", transaction);\\n }\\n }\\n const tx = Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"shallowCopy\\\"])(transaction);\\n if (tx.from == null) {\\n tx.from = this.getAddress();\\n }\\n else {\\n // Make sure any provided address matches this signer\\n tx.from = Promise.all([\\n Promise.resolve(tx.from),\\n this.getAddress()\\n ]).then((result) => {\\n if (result[0] !== result[1]) {\\n logger.throwArgumentError(\\\"from address mismatch\\\", \\\"transaction\\\", transaction);\\n }\\n return result[0];\\n });\\n }\\n return tx;\\n }\\n // Populates ALL keys for a transaction and checks that \\\"from\\\" matches\\n // this Signer. Should be used by sendTransaction but NOT by signTransaction.\\n // By default called from: (overriding these prevents it)\\n // - sendTransaction\\n populateTransaction(transaction) {\\n return __awaiter(this, void 0, void 0, function* () {\\n const tx = yield Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"resolveProperties\\\"])(this.checkTransaction(transaction));\\n if (tx.to != null) {\\n tx.to = Promise.resolve(tx.to).then((to) => this.resolveName(to));\\n }\\n if (tx.gasPrice == null) {\\n tx.gasPrice = this.getGasPrice();\\n }\\n if (tx.nonce == null) {\\n tx.nonce = this.getTransactionCount(\\\"pending\\\");\\n }\\n if (tx.gasLimit == null) {\\n tx.gasLimit = this.estimateGas(tx).catch((error) => {\\n return logger.throwError(\\\"cannot estimate gas; transaction may fail or may require manual gas limit\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.UNPREDICTABLE_GAS_LIMIT, {\\n tx: tx\\n });\\n });\\n }\\n if (tx.chainId == null) {\\n tx.chainId = this.getChainId();\\n }\\n else {\\n tx.chainId = Promise.all([\\n Promise.resolve(tx.chainId),\\n this.getChainId()\\n ]).then((results) => {\\n if (results[1] !== 0 && results[0] !== results[1]) {\\n logger.throwArgumentError(\\\"chainId address mismatch\\\", \\\"transaction\\\", transaction);\\n }\\n return results[0];\\n });\\n }\\n return yield Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"resolveProperties\\\"])(tx);\\n });\\n }\\n ///////////////////\\n // Sub-classes SHOULD leave these alone\\n _checkProvider(operation) {\\n if (!this.provider) {\\n logger.throwError(\\\"missing provider\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.UNSUPPORTED_OPERATION, {\\n operation: (operation || \\\"_checkProvider\\\")\\n });\\n }\\n }\\n static isSigner(value) {\\n return !!(value && value._isSigner);\\n }\\n}\\nclass VoidSigner extends Signer {\\n constructor(address, provider) {\\n logger.checkNew(new.target, VoidSigner);\\n super();\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"defineReadOnly\\\"])(this, \\\"address\\\", address);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"defineReadOnly\\\"])(this, \\\"provider\\\", provider || null);\\n }\\n getAddress() {\\n return Promise.resolve(this.address);\\n }\\n _fail(message, operation) {\\n return Promise.resolve().then(() => {\\n logger.throwError(message, _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.UNSUPPORTED_OPERATION, { operation: operation });\\n });\\n }\\n signMessage(message) {\\n return this._fail(\\\"VoidSigner cannot sign messages\\\", \\\"signMessage\\\");\\n }\\n signTransaction(transaction) {\\n return this._fail(\\\"VoidSigner cannot sign transactions\\\", \\\"signTransaction\\\");\\n }\\n connect(provider) {\\n return new VoidSigner(this.address, provider);\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/abstract-signer/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/address/lib.esm/_version.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@ethersproject/address/lib.esm/_version.js ***!\n \\*****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"address/5.0.0-beta.134\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/address/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/address/lib.esm/index.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/address/lib.esm/index.js ***!\n \\**************************************************************/\n/*! exports provided: getAddress, isAddress, getIcapAddress, getContractAddress, getCreate2Address */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getAddress\\\", function() { return getAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isAddress\\\", function() { return isAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getIcapAddress\\\", function() { return getIcapAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getContractAddress\\\", function() { return getContractAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getCreate2Address\\\", function() { return getCreate2Address; });\\n/* harmony import */ var bn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\n/* harmony import */ var bn_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bn_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/rlp */ \\\"./node_modules/@ethersproject/rlp/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/address/lib.esm/_version.js\\\");\\n\\n// We use this for base 36 maths\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_5__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_6__[\\\"version\\\"]);\\nfunction getChecksumAddress(address) {\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isHexString\\\"])(address, 20)) {\\n logger.throwArgumentError(\\\"invalid address\\\", \\\"address\\\", address);\\n }\\n address = address.toLowerCase();\\n const chars = address.substring(2).split(\\\"\\\");\\n const expanded = new Uint8Array(40);\\n for (let i = 0; i < 40; i++) {\\n expanded[i] = chars[i].charCodeAt(0);\\n }\\n const hashed = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__[\\\"keccak256\\\"])(expanded));\\n for (let i = 0; i < 40; i += 2) {\\n if ((hashed[i >> 1] >> 4) >= 8) {\\n chars[i] = chars[i].toUpperCase();\\n }\\n if ((hashed[i >> 1] & 0x0f) >= 8) {\\n chars[i + 1] = chars[i + 1].toUpperCase();\\n }\\n }\\n return \\\"0x\\\" + chars.join(\\\"\\\");\\n}\\n// Shims for environments that are missing some required constants and functions\\nconst MAX_SAFE_INTEGER = 0x1fffffffffffff;\\nfunction log10(x) {\\n if (Math.log10) {\\n return Math.log10(x);\\n }\\n return Math.log(x) / Math.LN10;\\n}\\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\\n// Create lookup table\\nconst ibanLookup = {};\\nfor (let i = 0; i < 10; i++) {\\n ibanLookup[String(i)] = String(i);\\n}\\nfor (let i = 0; i < 26; i++) {\\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\\n}\\n// How many decimal digits can we process? (for 64-bit float, this is 15)\\nconst safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));\\nfunction ibanChecksum(address) {\\n address = address.toUpperCase();\\n address = address.substring(4) + address.substring(0, 2) + \\\"00\\\";\\n let expanded = address.split(\\\"\\\").map((c) => { return ibanLookup[c]; }).join(\\\"\\\");\\n // Javascript can handle integers safely up to 15 (decimal) digits\\n while (expanded.length >= safeDigits) {\\n let block = expanded.substring(0, safeDigits);\\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\\n }\\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\\n while (checksum.length < 2) {\\n checksum = \\\"0\\\" + checksum;\\n }\\n return checksum;\\n}\\n;\\nfunction getAddress(address) {\\n let result = null;\\n if (typeof (address) !== \\\"string\\\") {\\n logger.throwArgumentError(\\\"invalid address\\\", \\\"address\\\", address);\\n }\\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\\n // Missing the 0x prefix\\n if (address.substring(0, 2) !== \\\"0x\\\") {\\n address = \\\"0x\\\" + address;\\n }\\n result = getChecksumAddress(address);\\n // It is a checksummed address with a bad checksum\\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\\n logger.throwArgumentError(\\\"bad address checksum\\\", \\\"address\\\", address);\\n }\\n // Maybe ICAP? (we only support direct mode)\\n }\\n else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\\n // It is an ICAP address with a bad checksum\\n if (address.substring(2, 4) !== ibanChecksum(address)) {\\n logger.throwArgumentError(\\\"bad icap checksum\\\", \\\"address\\\", address);\\n }\\n result = (new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](address.substring(4), 36)).toString(16);\\n while (result.length < 40) {\\n result = \\\"0\\\" + result;\\n }\\n result = getChecksumAddress(\\\"0x\\\" + result);\\n }\\n else {\\n logger.throwArgumentError(\\\"invalid address\\\", \\\"address\\\", address);\\n }\\n return result;\\n}\\nfunction isAddress(address) {\\n try {\\n getAddress(address);\\n return true;\\n }\\n catch (error) { }\\n return false;\\n}\\nfunction getIcapAddress(address) {\\n let base36 = (new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](getAddress(address).substring(2), 16)).toString(36).toUpperCase();\\n while (base36.length < 30) {\\n base36 = \\\"0\\\" + base36;\\n }\\n return \\\"XE\\\" + ibanChecksum(\\\"XE00\\\" + base36) + base36;\\n}\\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\\nfunction getContractAddress(transaction) {\\n let from = null;\\n try {\\n from = getAddress(transaction.from);\\n }\\n catch (error) {\\n logger.throwArgumentError(\\\"missing from address\\\", \\\"transaction\\\", transaction);\\n }\\n const nonce = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"stripZeros\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(_ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__[\\\"BigNumber\\\"].from(transaction.nonce).toHexString()));\\n return getAddress(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataSlice\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__[\\\"keccak256\\\"])(Object(_ethersproject_rlp__WEBPACK_IMPORTED_MODULE_4__[\\\"encode\\\"])([from, nonce])), 12));\\n}\\nfunction getCreate2Address(from, salt, initCodeHash) {\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataLength\\\"])(salt) !== 32) {\\n logger.throwArgumentError(\\\"salt must be 32 bytes\\\", \\\"salt\\\", salt);\\n }\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataLength\\\"])(initCodeHash) !== 32) {\\n logger.throwArgumentError(\\\"initCodeHash must be 32 bytes\\\", \\\"initCodeHash\\\", initCodeHash);\\n }\\n return getAddress(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataSlice\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([\\\"0xff\\\", getAddress(from), salt, initCodeHash])), 12));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/address/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/basex/lib.esm/index.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/@ethersproject/basex/lib.esm/index.js ***!\n \\************************************************************/\n/*! exports provided: BaseX, Base32, Base58 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"BaseX\\\", function() { return BaseX; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Base32\\\", function() { return Base32; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Base58\\\", function() { return Base58; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/**\\n * var basex = require(\\\"base-x\\\");\\n *\\n * This implementation is heavily based on base-x. The main reason to\\n * deviate was to prevent the dependency of Buffer.\\n *\\n * Contributors:\\n *\\n * base-x encoding\\n * Forked from https://github.com/cryptocoinjs/bs58\\n * Originally written by Mike Hearn for BitcoinJ\\n * Copyright (c) 2011 Google Inc\\n * Ported to JavaScript by Stefan Thomas\\n * Merged Buffer refactorings from base58-native by Stephen Pair\\n * Copyright (c) 2013 BitPay Inc\\n *\\n * The MIT License (MIT)\\n *\\n * Copyright base-x contributors (c) 2016\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining a\\n * copy of this software and associated documentation files (the \\\"Software\\\"),\\n * to deal in the Software without restriction, including without limitation\\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\\n * and/or sell copies of the Software, and to permit persons to whom the\\n * Software is furnished to do so, subject to the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be included in\\n * all copies or substantial portions of the Software.\\n\\n * THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\\n * IN THE SOFTWARE.\\n *\\n */\\n\\n\\nclass BaseX {\\n constructor(alphabet) {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"alphabet\\\", alphabet);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"base\\\", alphabet.length);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"_alphabetMap\\\", {});\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"_leader\\\", alphabet.charAt(0));\\n // pre-compute lookup table\\n for (let i = 0; i < alphabet.length; i++) {\\n this._alphabetMap[alphabet.charAt(i)] = i;\\n }\\n }\\n encode(value) {\\n let source = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(value);\\n if (source.length === 0) {\\n return \\\"\\\";\\n }\\n let digits = [0];\\n for (let i = 0; i < source.length; ++i) {\\n let carry = source[i];\\n for (let j = 0; j < digits.length; ++j) {\\n carry += digits[j] << 8;\\n digits[j] = carry % this.base;\\n carry = (carry / this.base) | 0;\\n }\\n while (carry > 0) {\\n digits.push(carry % this.base);\\n carry = (carry / this.base) | 0;\\n }\\n }\\n let string = \\\"\\\";\\n // deal with leading zeros\\n for (let k = 0; source[k] === 0 && k < source.length - 1; ++k) {\\n string += this._leader;\\n }\\n // convert digits to a string\\n for (let q = digits.length - 1; q >= 0; --q) {\\n string += this.alphabet[digits[q]];\\n }\\n return string;\\n }\\n decode(value) {\\n if (typeof (value) !== \\\"string\\\") {\\n throw new TypeError(\\\"Expected String\\\");\\n }\\n let bytes = [];\\n if (value.length === 0) {\\n return new Uint8Array(bytes);\\n }\\n bytes.push(0);\\n for (let i = 0; i < value.length; i++) {\\n let byte = this._alphabetMap[value[i]];\\n if (byte === undefined) {\\n throw new Error(\\\"Non-base\\\" + this.base + \\\" character\\\");\\n }\\n let carry = byte;\\n for (let j = 0; j < bytes.length; ++j) {\\n carry += bytes[j] * this.base;\\n bytes[j] = carry & 0xff;\\n carry >>= 8;\\n }\\n while (carry > 0) {\\n bytes.push(carry & 0xff);\\n carry >>= 8;\\n }\\n }\\n // deal with leading zeros\\n for (let k = 0; value[k] === this._leader && k < value.length - 1; ++k) {\\n bytes.push(0);\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(new Uint8Array(bytes.reverse()));\\n }\\n}\\nconst Base32 = new BaseX(\\\"abcdefghijklmnopqrstuvwxyz234567\\\");\\nconst Base58 = new BaseX(\\\"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\\\");\\n\\n//console.log(Base58.decode(\\\"Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj\\\"))\\n//console.log(Base58.encode(Base58.decode(\\\"Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj\\\")))\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/basex/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bignumber/lib.esm/_version.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@ethersproject/bignumber/lib.esm/_version.js ***!\n \\*******************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"bignumber/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bignumber/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js ***!\n \\********************************************************************/\n/*! exports provided: isBigNumberish, BigNumber */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isBigNumberish\\\", function() { return isBigNumberish; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"BigNumber\\\", function() { return BigNumber; });\\n/* harmony import */ var bn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\n/* harmony import */ var bn_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bn_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/_version.js\\\");\\n\\n/**\\n * BigNumber\\n *\\n * A wrapper around the BN.js object. We use the BN.js library\\n * because it is used by elliptic, so it is required regardles.\\n *\\n */\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_3__[\\\"version\\\"]);\\nconst _constructorGuard = {};\\nconst MAX_SAFE = 0x1fffffffffffff;\\nfunction isBigNumberish(value) {\\n return (value != null) && (BigNumber.isBigNumber(value) ||\\n (typeof (value) === \\\"number\\\" && (value % 1) === 0) ||\\n (typeof (value) === \\\"string\\\" && !!value.match(/^-?[0-9]+$/)) ||\\n Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isHexString\\\"])(value) ||\\n (typeof (value) === \\\"bigint\\\") ||\\n Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isBytes\\\"])(value));\\n}\\nclass BigNumber {\\n constructor(constructorGuard, hex) {\\n logger.checkNew(new.target, BigNumber);\\n if (constructorGuard !== _constructorGuard) {\\n logger.throwError(\\\"cannot call consturtor directly; use BigNumber.from\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"].errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"new (BigNumber)\\\"\\n });\\n }\\n this._hex = hex;\\n this._isBigNumber = true;\\n Object.freeze(this);\\n }\\n fromTwos(value) {\\n return toBigNumber(toBN(this).fromTwos(value));\\n }\\n toTwos(value) {\\n return toBigNumber(toBN(this).toTwos(value));\\n }\\n abs() {\\n if (this._hex[0] === \\\"-\\\") {\\n return BigNumber.from(this._hex.substring(1));\\n }\\n return this;\\n }\\n add(other) {\\n return toBigNumber(toBN(this).add(toBN(other)));\\n }\\n sub(other) {\\n return toBigNumber(toBN(this).sub(toBN(other)));\\n }\\n div(other) {\\n const o = BigNumber.from(other);\\n if (o.isZero()) {\\n throwFault(\\\"division by zero\\\", \\\"div\\\");\\n }\\n return toBigNumber(toBN(this).div(toBN(other)));\\n }\\n mul(other) {\\n return toBigNumber(toBN(this).mul(toBN(other)));\\n }\\n mod(other) {\\n return toBigNumber(toBN(this).mod(toBN(other)));\\n }\\n pow(other) {\\n return toBigNumber(toBN(this).pow(toBN(other)));\\n }\\n maskn(value) {\\n return toBigNumber(toBN(this).maskn(value));\\n }\\n eq(other) {\\n return toBN(this).eq(toBN(other));\\n }\\n lt(other) {\\n return toBN(this).lt(toBN(other));\\n }\\n lte(other) {\\n return toBN(this).lte(toBN(other));\\n }\\n gt(other) {\\n return toBN(this).gt(toBN(other));\\n }\\n gte(other) {\\n return toBN(this).gte(toBN(other));\\n }\\n isZero() {\\n return toBN(this).isZero();\\n }\\n toNumber() {\\n try {\\n return toBN(this).toNumber();\\n }\\n catch (error) {\\n throwFault(\\\"overflow\\\", \\\"toNumber\\\", this.toString());\\n }\\n return null;\\n }\\n toString() {\\n // Lots of people expect this, which we do not support, so check\\n if (arguments.length !== 0) {\\n logger.throwError(\\\"bigNumber.toString does not accept parameters\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"].errors.UNEXPECTED_ARGUMENT, {});\\n }\\n return toBN(this).toString(10);\\n }\\n toHexString() {\\n return this._hex;\\n }\\n static from(value) {\\n if (value instanceof BigNumber) {\\n return value;\\n }\\n if (typeof (value) === \\\"string\\\") {\\n if (value.match(/-?0x[0-9a-f]+/i)) {\\n return new BigNumber(_constructorGuard, toHex(value));\\n }\\n if (value.match(/^-?[0-9]+$/)) {\\n return new BigNumber(_constructorGuard, toHex(new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](value)));\\n }\\n return logger.throwArgumentError(\\\"invalid BigNumber string\\\", \\\"value\\\", value);\\n }\\n if (typeof (value) === \\\"number\\\") {\\n if (value % 1) {\\n throwFault(\\\"underflow\\\", \\\"BigNumber.from\\\", value);\\n }\\n if (value >= MAX_SAFE || value <= -MAX_SAFE) {\\n throwFault(\\\"overflow\\\", \\\"BigNumber.from\\\", value);\\n }\\n return BigNumber.from(String(value));\\n }\\n if (typeof (value) === \\\"bigint\\\") {\\n return BigNumber.from(value.toString());\\n }\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isBytes\\\"])(value)) {\\n return BigNumber.from(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(value));\\n }\\n if (value._hex && Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isHexString\\\"])(value._hex)) {\\n return BigNumber.from(value._hex);\\n }\\n if (value.toHexString) {\\n value = value.toHexString();\\n if (typeof (value) === \\\"string\\\") {\\n return BigNumber.from(value);\\n }\\n }\\n return logger.throwArgumentError(\\\"invalid BigNumber value\\\", \\\"value\\\", value);\\n }\\n static isBigNumber(value) {\\n return !!(value && value._isBigNumber);\\n }\\n}\\n// Normalize the hex string\\nfunction toHex(value) {\\n // For BN, call on the hex string\\n if (typeof (value) !== \\\"string\\\") {\\n return toHex(value.toString(16));\\n }\\n // If negative, prepend the negative sign to the normalized positive value\\n if (value[0] === \\\"-\\\") {\\n // Strip off the negative sign\\n value = value.substring(1);\\n // Cannot have mulitple negative signs (e.g. \\\"--0x04\\\")\\n if (value[0] === \\\"-\\\") {\\n logger.throwArgumentError(\\\"invalid hex\\\", \\\"value\\\", value);\\n }\\n // Call toHex on the positive component\\n value = toHex(value);\\n // Do not allow \\\"-0x00\\\"\\n if (value === \\\"0x00\\\") {\\n return value;\\n }\\n // Negate the value\\n return \\\"-\\\" + value;\\n }\\n // Add a \\\"0x\\\" prefix if missing\\n if (value.substring(0, 2) !== \\\"0x\\\") {\\n value = \\\"0x\\\" + value;\\n }\\n // Normalize zero\\n if (value === \\\"0x\\\") {\\n return \\\"0x00\\\";\\n }\\n // Make the string even length\\n if (value.length % 2) {\\n value = \\\"0x0\\\" + value.substring(2);\\n }\\n // Trim to smallest even-length string\\n while (value.length > 4 && value.substring(0, 4) === \\\"0x00\\\") {\\n value = \\\"0x\\\" + value.substring(4);\\n }\\n return value;\\n}\\nfunction toBigNumber(value) {\\n return BigNumber.from(toHex(value));\\n}\\nfunction toBN(value) {\\n const hex = BigNumber.from(value).toHexString();\\n if (hex[0] === \\\"-\\\") {\\n return (new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](\\\"-\\\" + hex.substring(3), 16));\\n }\\n return new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](hex.substring(2), 16);\\n}\\nfunction throwFault(fault, operation, value) {\\n const params = { fault: fault, operation: operation };\\n if (value != null) {\\n params.value = value;\\n }\\n return logger.throwError(fault, _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"].errors.NUMERIC_FAULT, params);\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bignumber/lib.esm/fixednumber.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/bignumber/lib.esm/fixednumber.js ***!\n \\**********************************************************************/\n/*! exports provided: formatFixed, parseFixed, FixedFormat, FixedNumber */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"formatFixed\\\", function() { return formatFixed; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"parseFixed\\\", function() { return parseFixed; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"FixedFormat\\\", function() { return FixedFormat; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"FixedNumber\\\", function() { return FixedNumber; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/_version.js\\\");\\n/* harmony import */ var _bignumber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js\\\");\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_2__[\\\"version\\\"]);\\n\\nconst _constructorGuard = {};\\nconst Zero = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(0);\\nconst NegativeOne = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(-1);\\nfunction throwFault(message, fault, operation, value) {\\n const params = { fault: fault, operation: operation };\\n if (value !== undefined) {\\n params.value = value;\\n }\\n return logger.throwError(message, _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.NUMERIC_FAULT, params);\\n}\\n// Constant to pull zeros from for multipliers\\nlet zeros = \\\"0\\\";\\nwhile (zeros.length < 256) {\\n zeros += zeros;\\n}\\n// Returns a string \\\"1\\\" followed by decimal \\\"0\\\"s\\nfunction getMultiplier(decimals) {\\n if (typeof (decimals) !== \\\"number\\\") {\\n try {\\n decimals = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(decimals).toNumber();\\n }\\n catch (e) { }\\n }\\n if (typeof (decimals) === \\\"number\\\" && decimals >= 0 && decimals <= 256 && !(decimals % 1)) {\\n return (\\\"1\\\" + zeros.substring(0, decimals));\\n }\\n return logger.throwArgumentError(\\\"invalid decimal size\\\", \\\"decimals\\\", decimals);\\n}\\nfunction formatFixed(value, decimals) {\\n if (decimals == null) {\\n decimals = 0;\\n }\\n const multiplier = getMultiplier(decimals);\\n // Make sure wei is a big number (convert as necessary)\\n value = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(value);\\n const negative = value.lt(Zero);\\n if (negative) {\\n value = value.mul(NegativeOne);\\n }\\n let fraction = value.mod(multiplier).toString();\\n while (fraction.length < multiplier.length - 1) {\\n fraction = \\\"0\\\" + fraction;\\n }\\n // Strip training 0\\n fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];\\n const whole = value.div(multiplier).toString();\\n value = whole + \\\".\\\" + fraction;\\n if (negative) {\\n value = \\\"-\\\" + value;\\n }\\n return value;\\n}\\nfunction parseFixed(value, decimals) {\\n if (decimals == null) {\\n decimals = 0;\\n }\\n const multiplier = getMultiplier(decimals);\\n if (typeof (value) !== \\\"string\\\" || !value.match(/^-?[0-9.,]+$/)) {\\n logger.throwArgumentError(\\\"invalid decimal value\\\", \\\"value\\\", value);\\n }\\n if (multiplier.length - 1 === 0) {\\n return _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(value);\\n }\\n // Is it negative?\\n const negative = (value.substring(0, 1) === \\\"-\\\");\\n if (negative) {\\n value = value.substring(1);\\n }\\n if (value === \\\".\\\") {\\n logger.throwArgumentError(\\\"missing value\\\", \\\"value\\\", value);\\n }\\n // Split it into a whole and fractional part\\n const comps = value.split(\\\".\\\");\\n if (comps.length > 2) {\\n logger.throwArgumentError(\\\"too many decimal points\\\", \\\"value\\\", value);\\n }\\n let whole = comps[0], fraction = comps[1];\\n if (!whole) {\\n whole = \\\"0\\\";\\n }\\n if (!fraction) {\\n fraction = \\\"0\\\";\\n }\\n // Prevent underflow\\n if (fraction.length > multiplier.length - 1) {\\n throwFault(\\\"fractional component exceeds decimals\\\", \\\"underflow\\\", \\\"parseFixed\\\");\\n }\\n // Fully pad the string with zeros to get to wei\\n while (fraction.length < multiplier.length - 1) {\\n fraction += \\\"0\\\";\\n }\\n const wholeValue = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(whole);\\n const fractionValue = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(fraction);\\n let wei = (wholeValue.mul(multiplier)).add(fractionValue);\\n if (negative) {\\n wei = wei.mul(NegativeOne);\\n }\\n return wei;\\n}\\nclass FixedFormat {\\n constructor(constructorGuard, signed, width, decimals) {\\n this.signed = signed;\\n this.width = width;\\n this.decimals = decimals;\\n this.name = (signed ? \\\"\\\" : \\\"u\\\") + \\\"fixed\\\" + String(width) + \\\"x\\\" + String(decimals);\\n this._multiplier = getMultiplier(decimals);\\n Object.freeze(this);\\n }\\n static from(value) {\\n if (value instanceof FixedFormat) {\\n return value;\\n }\\n let signed = true;\\n let width = 128;\\n let decimals = 18;\\n if (typeof (value) === \\\"string\\\") {\\n if (value === \\\"fixed\\\") {\\n // defaults...\\n }\\n else if (value === \\\"ufixed\\\") {\\n signed = false;\\n }\\n else if (value != null) {\\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\\n if (!match) {\\n logger.throwArgumentError(\\\"invalid fixed format\\\", \\\"format\\\", value);\\n }\\n signed = (match[1] !== \\\"u\\\");\\n width = parseInt(match[2]);\\n decimals = parseInt(match[3]);\\n }\\n }\\n else if (value) {\\n const check = (key, type, defaultValue) => {\\n if (value[key] == null) {\\n return defaultValue;\\n }\\n if (typeof (value[key]) !== type) {\\n logger.throwArgumentError(\\\"invalid fixed format (\\\" + key + \\\" not \\\" + type + \\\")\\\", \\\"format.\\\" + key, value[key]);\\n }\\n return value[key];\\n };\\n signed = check(\\\"signed\\\", \\\"boolean\\\", signed);\\n width = check(\\\"width\\\", \\\"number\\\", width);\\n decimals = check(\\\"decimals\\\", \\\"number\\\", decimals);\\n }\\n if (width % 8) {\\n logger.throwArgumentError(\\\"invalid fixed format width (not byte aligned)\\\", \\\"format.width\\\", width);\\n }\\n if (decimals > 80) {\\n logger.throwArgumentError(\\\"invalid fixed format (decimals too large)\\\", \\\"format.decimals\\\", decimals);\\n }\\n return new FixedFormat(_constructorGuard, signed, width, decimals);\\n }\\n}\\nclass FixedNumber {\\n constructor(constructorGuard, hex, value, format) {\\n logger.checkNew(new.target, FixedNumber);\\n this.format = format;\\n this._hex = hex;\\n this._value = value;\\n this._isFixedNumber = true;\\n Object.freeze(this);\\n }\\n _checkFormat(other) {\\n if (this.format.name !== other.format.name) {\\n logger.throwArgumentError(\\\"incompatible format; use fixedNumber.toFormat\\\", \\\"other\\\", other);\\n }\\n }\\n addUnsafe(other) {\\n this._checkFormat(other);\\n const a = parseFixed(this._value, this.format.decimals);\\n const b = parseFixed(other._value, other.format.decimals);\\n return FixedNumber.fromValue(a.add(b), this.format.decimals, this.format);\\n }\\n subUnsafe(other) {\\n this._checkFormat(other);\\n const a = parseFixed(this._value, this.format.decimals);\\n const b = parseFixed(other._value, other.format.decimals);\\n return FixedNumber.fromValue(a.sub(b), this.format.decimals, this.format);\\n }\\n mulUnsafe(other) {\\n this._checkFormat(other);\\n const a = parseFixed(this._value, this.format.decimals);\\n const b = parseFixed(other._value, other.format.decimals);\\n return FixedNumber.fromValue(a.mul(b).div(this.format._multiplier), this.format.decimals, this.format);\\n }\\n divUnsafe(other) {\\n this._checkFormat(other);\\n const a = parseFixed(this._value, this.format.decimals);\\n const b = parseFixed(other._value, other.format.decimals);\\n return FixedNumber.fromValue(a.mul(this.format._multiplier).div(b), this.format.decimals, this.format);\\n }\\n // @TODO: Support other rounding algorithms\\n round(decimals) {\\n if (decimals == null) {\\n decimals = 0;\\n }\\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\\n logger.throwArgumentError(\\\"invalid decimal cound\\\", \\\"decimals\\\", decimals);\\n }\\n // If we are already in range, we're done\\n let comps = this.toString().split(\\\".\\\");\\n if (comps[1].length <= decimals) {\\n return this;\\n }\\n // Bump the value up by the 0.00...0005\\n const bump = \\\"0.\\\" + zeros.substring(0, decimals) + \\\"5\\\";\\n comps = this.addUnsafe(FixedNumber.fromString(bump, this.format))._value.split(\\\".\\\");\\n // Now it is safe to truncate\\n return FixedNumber.fromString(comps[0] + \\\".\\\" + comps[1].substring(0, decimals));\\n }\\n toString() { return this._value; }\\n toHexString(width) {\\n if (width == null) {\\n return this._hex;\\n }\\n if (width % 8) {\\n logger.throwArgumentError(\\\"invalid byte width\\\", \\\"width\\\", width);\\n }\\n const hex = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(this._hex).fromTwos(this.format.width).toTwos(width).toHexString();\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexZeroPad\\\"])(hex, width / 8);\\n }\\n toUnsafeFloat() { return parseFloat(this.toString()); }\\n toFormat(format) {\\n return FixedNumber.fromString(this._value, format);\\n }\\n static fromValue(value, decimals, format) {\\n // If decimals looks more like a format, and there is no format, shift the parameters\\n if (format == null && decimals != null && !Object(_bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"isBigNumberish\\\"])(decimals)) {\\n format = decimals;\\n decimals = null;\\n }\\n if (decimals == null) {\\n decimals = 0;\\n }\\n if (format == null) {\\n format = \\\"fixed\\\";\\n }\\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\\n }\\n static fromString(value, format) {\\n if (format == null) {\\n format = \\\"fixed\\\";\\n }\\n const fixedFormat = FixedFormat.from(format);\\n const numeric = parseFixed(value, fixedFormat.decimals);\\n if (!fixedFormat.signed && numeric.lt(Zero)) {\\n throwFault(\\\"unsigned value cannot be negative\\\", \\\"overflow\\\", \\\"value\\\", value);\\n }\\n let hex = null;\\n if (fixedFormat.signed) {\\n hex = numeric.toTwos(fixedFormat.width).toHexString();\\n }\\n else {\\n hex = numeric.toHexString();\\n hex = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexZeroPad\\\"])(hex, fixedFormat.width / 8);\\n }\\n const decimal = formatFixed(numeric, fixedFormat.decimals);\\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\\n }\\n static fromBytes(value, format) {\\n if (format == null) {\\n format = \\\"fixed\\\";\\n }\\n const fixedFormat = FixedFormat.from(format);\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(value).length > fixedFormat.width / 8) {\\n throw new Error(\\\"overflow\\\");\\n }\\n let numeric = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(value);\\n if (fixedFormat.signed) {\\n numeric = numeric.fromTwos(fixedFormat.width);\\n }\\n const hex = numeric.toTwos((fixedFormat.signed ? 0 : 1) + fixedFormat.width).toHexString();\\n const decimal = formatFixed(numeric, fixedFormat.decimals);\\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\\n }\\n static from(value, format) {\\n if (typeof (value) === \\\"string\\\") {\\n return FixedNumber.fromString(value, format);\\n }\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isBytes\\\"])(value)) {\\n return FixedNumber.fromBytes(value, format);\\n }\\n try {\\n return FixedNumber.fromValue(value, 0, format);\\n }\\n catch (error) {\\n // Allow NUMERIC_FAULT to bubble up\\n if (error.code !== _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.INVALID_ARGUMENT) {\\n throw error;\\n }\\n }\\n return logger.throwArgumentError(\\\"invalid FixedNumber value\\\", \\\"value\\\", value);\\n }\\n static isFixedNumber(value) {\\n return !!(value && value._isFixedNumber);\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bignumber/lib.esm/fixednumber.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bignumber/lib.esm/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/bignumber/lib.esm/index.js ***!\n \\****************************************************************/\n/*! exports provided: BigNumber, formatFixed, FixedFormat, FixedNumber, parseFixed */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _bignumber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"BigNumber\\\", function() { return _bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"]; });\\n\\n/* harmony import */ var _fixednumber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fixednumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/fixednumber.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"formatFixed\\\", function() { return _fixednumber__WEBPACK_IMPORTED_MODULE_1__[\\\"formatFixed\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"FixedFormat\\\", function() { return _fixednumber__WEBPACK_IMPORTED_MODULE_1__[\\\"FixedFormat\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"FixedNumber\\\", function() { return _fixednumber__WEBPACK_IMPORTED_MODULE_1__[\\\"FixedNumber\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"parseFixed\\\", function() { return _fixednumber__WEBPACK_IMPORTED_MODULE_1__[\\\"parseFixed\\\"]; });\\n\\n\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bignumber/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bytes/lib.esm/_version.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@ethersproject/bytes/lib.esm/_version.js ***!\n \\***************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"bytes/5.0.0-beta.136\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bytes/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bytes/lib.esm/index.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/@ethersproject/bytes/lib.esm/index.js ***!\n \\************************************************************/\n/*! exports provided: isBytesLike, isBytes, arrayify, concat, stripZeros, zeroPad, isHexString, hexlify, hexDataLength, hexDataSlice, hexConcat, hexValue, hexStripZeros, hexZeroPad, splitSignature, joinSignature */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isBytesLike\\\", function() { return isBytesLike; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isBytes\\\", function() { return isBytes; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"arrayify\\\", function() { return arrayify; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"concat\\\", function() { return concat; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"stripZeros\\\", function() { return stripZeros; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"zeroPad\\\", function() { return zeroPad; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isHexString\\\", function() { return isHexString; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexlify\\\", function() { return hexlify; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexDataLength\\\", function() { return hexDataLength; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexDataSlice\\\", function() { return hexDataSlice; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexConcat\\\", function() { return hexConcat; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexValue\\\", function() { return hexValue; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexStripZeros\\\", function() { return hexStripZeros; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexZeroPad\\\", function() { return hexZeroPad; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"splitSignature\\\", function() { return splitSignature; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"joinSignature\\\", function() { return joinSignature; });\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/bytes/lib.esm/_version.js\\\");\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_1__[\\\"version\\\"]);\\n///////////////////////////////\\nfunction isHexable(value) {\\n return !!(value.toHexString);\\n}\\nfunction addSlice(array) {\\n if (array.slice) {\\n return array;\\n }\\n array.slice = function () {\\n const args = Array.prototype.slice.call(arguments);\\n return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));\\n };\\n return array;\\n}\\nfunction isBytesLike(value) {\\n return ((isHexString(value) && !(value.length % 2)) || isBytes(value));\\n}\\nfunction isBytes(value) {\\n if (value == null) {\\n return false;\\n }\\n if (value.constructor === Uint8Array) {\\n return true;\\n }\\n if (typeof (value) === \\\"string\\\") {\\n return false;\\n }\\n if (value.length == null) {\\n return false;\\n }\\n for (let i = 0; i < value.length; i++) {\\n const v = value[i];\\n if (v < 0 || v >= 256 || (v % 1)) {\\n return false;\\n }\\n }\\n return true;\\n}\\nfunction arrayify(value, options) {\\n if (!options) {\\n options = {};\\n }\\n if (typeof (value) === \\\"number\\\") {\\n logger.checkSafeUint53(value, \\\"invalid arrayify value\\\");\\n const result = [];\\n while (value) {\\n result.unshift(value & 0xff);\\n value /= 256;\\n }\\n if (result.length === 0) {\\n result.push(0);\\n }\\n return addSlice(new Uint8Array(result));\\n }\\n if (options.allowMissingPrefix && typeof (value) === \\\"string\\\" && value.substring(0, 2) !== \\\"0x\\\") {\\n value = \\\"0x\\\" + value;\\n }\\n if (isHexable(value)) {\\n value = value.toHexString();\\n }\\n if (isHexString(value)) {\\n let hex = value.substring(2);\\n if (hex.length % 2) {\\n if (options.hexPad === \\\"left\\\") {\\n hex = \\\"0x0\\\" + hex.substring(2);\\n }\\n else if (options.hexPad === \\\"right\\\") {\\n hex += \\\"0\\\";\\n }\\n else {\\n logger.throwArgumentError(\\\"hex data is odd-length\\\", \\\"value\\\", value);\\n }\\n }\\n const result = [];\\n for (let i = 0; i < hex.length; i += 2) {\\n result.push(parseInt(hex.substring(i, i + 2), 16));\\n }\\n return addSlice(new Uint8Array(result));\\n }\\n if (isBytes(value)) {\\n return addSlice(new Uint8Array(value));\\n }\\n return logger.throwArgumentError(\\\"invalid arrayify value\\\", \\\"value\\\", value);\\n}\\nfunction concat(items) {\\n const objects = items.map(item => arrayify(item));\\n const length = objects.reduce((accum, item) => (accum + item.length), 0);\\n const result = new Uint8Array(length);\\n objects.reduce((offset, object) => {\\n result.set(object, offset);\\n return offset + object.length;\\n }, 0);\\n return addSlice(result);\\n}\\nfunction stripZeros(value) {\\n let result = arrayify(value);\\n if (result.length === 0) {\\n return result;\\n }\\n // Find the first non-zero entry\\n let start = 0;\\n while (start < result.length && result[start] === 0) {\\n start++;\\n }\\n // If we started with zeros, strip them\\n if (start) {\\n result = result.slice(start);\\n }\\n return result;\\n}\\nfunction zeroPad(value, length) {\\n value = arrayify(value);\\n if (value.length > length) {\\n logger.throwArgumentError(\\\"value out of range\\\", \\\"value\\\", arguments[0]);\\n }\\n const result = new Uint8Array(length);\\n result.set(value, length - value.length);\\n return addSlice(result);\\n}\\nfunction isHexString(value, length) {\\n if (typeof (value) !== \\\"string\\\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\\n return false;\\n }\\n if (length && value.length !== 2 + 2 * length) {\\n return false;\\n }\\n return true;\\n}\\nconst HexCharacters = \\\"0123456789abcdef\\\";\\nfunction hexlify(value, options) {\\n if (!options) {\\n options = {};\\n }\\n if (typeof (value) === \\\"number\\\") {\\n logger.checkSafeUint53(value, \\\"invalid hexlify value\\\");\\n let hex = \\\"\\\";\\n while (value) {\\n hex = HexCharacters[value & 0x0f] + hex;\\n value = Math.floor(value / 16);\\n }\\n if (hex.length) {\\n if (hex.length % 2) {\\n hex = \\\"0\\\" + hex;\\n }\\n return \\\"0x\\\" + hex;\\n }\\n return \\\"0x00\\\";\\n }\\n if (options.allowMissingPrefix && typeof (value) === \\\"string\\\" && value.substring(0, 2) !== \\\"0x\\\") {\\n value = \\\"0x\\\" + value;\\n }\\n if (isHexable(value)) {\\n return value.toHexString();\\n }\\n if (isHexString(value)) {\\n if (value.length % 2) {\\n if (options.hexPad === \\\"left\\\") {\\n value = \\\"0x0\\\" + value.substring(2);\\n }\\n else if (options.hexPad === \\\"right\\\") {\\n value += \\\"0\\\";\\n }\\n else {\\n logger.throwArgumentError(\\\"hex data is odd-length\\\", \\\"value\\\", value);\\n }\\n }\\n return value.toLowerCase();\\n }\\n if (isBytes(value)) {\\n let result = \\\"0x\\\";\\n for (let i = 0; i < value.length; i++) {\\n let v = value[i];\\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\\n }\\n return result;\\n }\\n return logger.throwArgumentError(\\\"invalid hexlify value\\\", \\\"value\\\", value);\\n}\\n/*\\nfunction unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number {\\n if (typeof(value) === \\\"string\\\" && value.length % 2 && value.substring(0, 2) === \\\"0x\\\") {\\n return \\\"0x0\\\" + value.substring(2);\\n }\\n return value;\\n}\\n*/\\nfunction hexDataLength(data) {\\n if (typeof (data) !== \\\"string\\\") {\\n data = hexlify(data);\\n }\\n else if (!isHexString(data) || (data.length % 2)) {\\n return null;\\n }\\n return (data.length - 2) / 2;\\n}\\nfunction hexDataSlice(data, offset, endOffset) {\\n if (typeof (data) !== \\\"string\\\") {\\n data = hexlify(data);\\n }\\n else if (!isHexString(data) || (data.length % 2)) {\\n logger.throwArgumentError(\\\"invalid hexData\\\", \\\"value\\\", data);\\n }\\n offset = 2 + 2 * offset;\\n if (endOffset != null) {\\n return \\\"0x\\\" + data.substring(offset, 2 + 2 * endOffset);\\n }\\n return \\\"0x\\\" + data.substring(offset);\\n}\\nfunction hexConcat(items) {\\n let result = \\\"0x\\\";\\n items.forEach((item) => {\\n result += hexlify(item).substring(2);\\n });\\n return result;\\n}\\nfunction hexValue(value) {\\n const trimmed = hexStripZeros(hexlify(value, { hexPad: \\\"left\\\" }));\\n if (trimmed === \\\"0x\\\") {\\n return \\\"0x0\\\";\\n }\\n return trimmed;\\n}\\nfunction hexStripZeros(value) {\\n if (typeof (value) !== \\\"string\\\") {\\n value = hexlify(value);\\n }\\n if (!isHexString(value)) {\\n logger.throwArgumentError(\\\"invalid hex string\\\", \\\"value\\\", value);\\n }\\n value = value.substring(2);\\n let offset = 0;\\n while (offset < value.length && value[offset] === \\\"0\\\") {\\n offset++;\\n }\\n return \\\"0x\\\" + value.substring(offset);\\n}\\nfunction hexZeroPad(value, length) {\\n if (typeof (value) !== \\\"string\\\") {\\n value = hexlify(value);\\n }\\n else if (!isHexString(value)) {\\n logger.throwArgumentError(\\\"invalid hex string\\\", \\\"value\\\", value);\\n }\\n if (value.length > 2 * length + 2) {\\n logger.throwArgumentError(\\\"value out of range\\\", \\\"value\\\", arguments[1]);\\n }\\n while (value.length < 2 * length + 2) {\\n value = \\\"0x0\\\" + value.substring(2);\\n }\\n return value;\\n}\\nfunction splitSignature(signature) {\\n const result = {\\n r: \\\"0x\\\",\\n s: \\\"0x\\\",\\n _vs: \\\"0x\\\",\\n recoveryParam: 0,\\n v: 0\\n };\\n if (isBytesLike(signature)) {\\n const bytes = arrayify(signature);\\n if (bytes.length !== 65) {\\n logger.throwArgumentError(\\\"invalid signature string; must be 65 bytes\\\", \\\"signature\\\", signature);\\n }\\n // Get the r, s and v\\n result.r = hexlify(bytes.slice(0, 32));\\n result.s = hexlify(bytes.slice(32, 64));\\n result.v = bytes[64];\\n // Compute recoveryParam from v\\n result.recoveryParam = 1 - (result.v % 2);\\n // Allow a recid to be used as the v\\n if (result.v < 27) {\\n if (result.v === 0 || result.v === 1) {\\n result.v += 27;\\n }\\n else {\\n logger.throwArgumentError(\\\"signature invalid v byte\\\", \\\"signature\\\", signature);\\n }\\n }\\n // Compute _vs from recoveryParam and s\\n if (result.recoveryParam) {\\n bytes[32] |= 0x80;\\n }\\n result._vs = hexlify(bytes.slice(32, 64));\\n }\\n else {\\n result.r = signature.r;\\n result.s = signature.s;\\n result.v = signature.v;\\n result.recoveryParam = signature.recoveryParam;\\n result._vs = signature._vs;\\n // If the _vs is available, use it to populate missing s, v and recoveryParam\\n // and verify non-missing s, v and recoveryParam\\n if (result._vs != null) {\\n const vs = zeroPad(arrayify(result._vs), 32);\\n result._vs = hexlify(vs);\\n // Set or check the recid\\n const recoveryParam = ((vs[0] >= 128) ? 1 : 0);\\n if (result.recoveryParam == null) {\\n result.recoveryParam = recoveryParam;\\n }\\n else if (result.recoveryParam !== recoveryParam) {\\n logger.throwArgumentError(\\\"signature recoveryParam mismatch _vs\\\", \\\"signature\\\", signature);\\n }\\n // Set or check the s\\n vs[0] &= 0x7f;\\n const s = hexlify(vs);\\n if (result.s == null) {\\n result.s = s;\\n }\\n else if (result.s !== s) {\\n logger.throwArgumentError(\\\"signature v mismatch _vs\\\", \\\"signature\\\", signature);\\n }\\n }\\n // Use recid and v to populate each other\\n if (result.recoveryParam == null) {\\n if (result.v == null) {\\n logger.throwArgumentError(\\\"signature missing v and recoveryParam\\\", \\\"signature\\\", signature);\\n }\\n else {\\n result.recoveryParam = 1 - (result.v % 2);\\n }\\n }\\n else {\\n if (result.v == null) {\\n result.v = 27 + result.recoveryParam;\\n }\\n else if (result.recoveryParam !== (1 - (result.v % 2))) {\\n logger.throwArgumentError(\\\"signature recoveryParam mismatch v\\\", \\\"signature\\\", signature);\\n }\\n }\\n if (result.r == null || !isHexString(result.r)) {\\n logger.throwArgumentError(\\\"signature missing or invalid r\\\", \\\"signature\\\", signature);\\n }\\n else {\\n result.r = hexZeroPad(result.r, 32);\\n }\\n if (result.s == null || !isHexString(result.s)) {\\n logger.throwArgumentError(\\\"signature missing or invalid s\\\", \\\"signature\\\", signature);\\n }\\n else {\\n result.s = hexZeroPad(result.s, 32);\\n }\\n const vs = arrayify(result.s);\\n if (vs[0] >= 128) {\\n logger.throwArgumentError(\\\"signature s out of range\\\", \\\"signature\\\", signature);\\n }\\n if (result.recoveryParam) {\\n vs[0] |= 0x80;\\n }\\n const _vs = hexlify(vs);\\n if (result._vs) {\\n if (!isHexString(result._vs)) {\\n logger.throwArgumentError(\\\"signature invalid _vs\\\", \\\"signature\\\", signature);\\n }\\n result._vs = hexZeroPad(result._vs, 32);\\n }\\n // Set or check the _vs\\n if (result._vs == null) {\\n result._vs = _vs;\\n }\\n else if (result._vs !== _vs) {\\n logger.throwArgumentError(\\\"signature _vs mismatch v and s\\\", \\\"signature\\\", signature);\\n }\\n }\\n return result;\\n}\\nfunction joinSignature(signature) {\\n signature = splitSignature(signature);\\n return hexlify(concat([\\n signature.r,\\n signature.s,\\n (signature.recoveryParam ? \\\"0x1c\\\" : \\\"0x1b\\\")\\n ]));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bytes/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/constants/lib.esm/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/constants/lib.esm/index.js ***!\n \\****************************************************************/\n/*! exports provided: AddressZero, HashZero, EtherSymbol, NegativeOne, Zero, One, Two, WeiPerEther, MaxUint256 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"AddressZero\\\", function() { return AddressZero; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"HashZero\\\", function() { return HashZero; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"EtherSymbol\\\", function() { return EtherSymbol; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"NegativeOne\\\", function() { return NegativeOne; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Zero\\\", function() { return Zero; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"One\\\", function() { return One; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Two\\\", function() { return Two; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"WeiPerEther\\\", function() { return WeiPerEther; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"MaxUint256\\\", function() { return MaxUint256; });\\n/* harmony import */ var _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/index.js\\\");\\n\\n\\nconst AddressZero = \\\"0x0000000000000000000000000000000000000000\\\";\\nconst HashZero = \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\";\\n// NFKC (composed) // (decomposed)\\nconst EtherSymbol = \\\"\\\\u039e\\\"; // \\\"\\\\uD835\\\\uDF63\\\";\\nconst NegativeOne = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(-1);\\nconst Zero = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(0);\\nconst One = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(1);\\nconst Two = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(2);\\nconst WeiPerEther = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(\\\"1000000000000000000\\\");\\nconst MaxUint256 = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(\\\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\");\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/constants/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/hash/lib.esm/_version.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/hash/lib.esm/_version.js ***!\n \\**************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"hash/5.0.0-beta.133\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/hash/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/hash/lib.esm/index.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/@ethersproject/hash/lib.esm/index.js ***!\n \\***********************************************************/\n/*! exports provided: isValidName, namehash, id, messagePrefix, hashMessage */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isValidName\\\", function() { return isValidName; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"namehash\\\", function() { return namehash; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"id\\\", function() { return id; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"messagePrefix\\\", function() { return messagePrefix; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hashMessage\\\", function() { return hashMessage; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/strings */ \\\"./node_modules/@ethersproject/strings/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/hash/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_3__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_4__[\\\"version\\\"]);\\n///////////////////////////////\\nconst Zeros = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\\nconst Partition = new RegExp(\\\"^((.*)\\\\\\\\.)?([^.]+)$\\\");\\nfunction isValidName(name) {\\n try {\\n const comps = name.split(\\\".\\\");\\n for (let i = 0; i < comps.length; i++) {\\n if (Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"nameprep\\\"])(comps[i]).length === 0) {\\n throw new Error(\\\"empty\\\");\\n }\\n }\\n return true;\\n }\\n catch (error) { }\\n return false;\\n}\\nfunction namehash(name) {\\n if (typeof (name) !== \\\"string\\\") {\\n logger.throwArgumentError(\\\"invalid address - \\\" + String(name), \\\"name\\\", name);\\n }\\n let result = Zeros;\\n while (name.length) {\\n const partition = name.match(Partition);\\n const label = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"nameprep\\\"])(partition[3]));\\n result = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"concat\\\"])([result, Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__[\\\"keccak256\\\"])(label)]));\\n name = partition[2] || \\\"\\\";\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(result);\\n}\\nfunction id(text) {\\n return Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__[\\\"keccak256\\\"])(Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(text));\\n}\\nconst messagePrefix = \\\"\\\\x19Ethereum Signed Message:\\\\n\\\";\\nfunction hashMessage(message) {\\n if (typeof (message) === \\\"string\\\") {\\n message = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(message);\\n }\\n return Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"concat\\\"])([\\n Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(messagePrefix),\\n Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(String(message.length)),\\n message\\n ]));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/hash/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/hdnode/lib.esm/_version.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/hdnode/lib.esm/_version.js ***!\n \\****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"hdnode/5.0.0-beta.137\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/hdnode/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/hdnode/lib.esm/index.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/hdnode/lib.esm/index.js ***!\n \\*************************************************************/\n/*! exports provided: defaultPath, HDNode, mnemonicToSeed, mnemonicToEntropy, entropyToMnemonic, isValidMnemonic */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"defaultPath\\\", function() { return defaultPath; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"HDNode\\\", function() { return HDNode; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"mnemonicToSeed\\\", function() { return mnemonicToSeed; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"mnemonicToEntropy\\\", function() { return mnemonicToEntropy; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"entropyToMnemonic\\\", function() { return entropyToMnemonic; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isValidMnemonic\\\", function() { return isValidMnemonic; });\\n/* harmony import */ var _ethersproject_basex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/basex */ \\\"./node_modules/@ethersproject/basex/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/strings */ \\\"./node_modules/@ethersproject/strings/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/pbkdf2 */ \\\"./node_modules/@ethersproject/pbkdf2/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/signing-key */ \\\"./node_modules/@ethersproject/signing-key/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/sha2 */ \\\"./node_modules/@ethersproject/sha2/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var _ethersproject_transactions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @ethersproject/transactions */ \\\"./node_modules/@ethersproject/transactions/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @ethersproject/wordlists */ \\\"./node_modules/@ethersproject/wordlists/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9__);\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/hdnode/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_10__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_11__[\\\"version\\\"]);\\nconst N = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__[\\\"BigNumber\\\"].from(\\\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\\\");\\n// \\\"Bitcoin seed\\\"\\nconst MasterSecret = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"toUtf8Bytes\\\"])(\\\"Bitcoin seed\\\");\\nconst HardenedBit = 0x80000000;\\n// Returns a byte with the MSB bits set\\nfunction getUpperMask(bits) {\\n return ((1 << bits) - 1) << (8 - bits);\\n}\\n// Returns a byte with the LSB bits set\\nfunction getLowerMask(bits) {\\n return (1 << bits) - 1;\\n}\\nfunction bytes32(value) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(value), 32);\\n}\\nfunction base58check(data) {\\n return _ethersproject_basex__WEBPACK_IMPORTED_MODULE_0__[\\\"Base58\\\"].encode(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([data, Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataSlice\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(data)), 0, 4)]));\\n}\\nfunction getWordlist(wordlist) {\\n if (wordlist == null) {\\n return _ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9__[\\\"wordlists\\\"][\\\"en\\\"];\\n }\\n if (typeof (wordlist) === \\\"string\\\") {\\n const words = _ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9__[\\\"wordlists\\\"][wordlist];\\n if (words == null) {\\n logger.throwArgumentError(\\\"unknown locale\\\", \\\"wordlist\\\", wordlist);\\n }\\n return words;\\n }\\n return wordlist;\\n}\\nconst _constructorGuard = {};\\nconst defaultPath = \\\"m/44'/60'/0'/0/0\\\";\\n;\\nclass HDNode {\\n /**\\n * This constructor should not be called directly.\\n *\\n * Please use:\\n * - fromMnemonic\\n * - fromSeed\\n */\\n constructor(constructorGuard, privateKey, publicKey, parentFingerprint, chainCode, index, depth, mnemonicOrPath) {\\n logger.checkNew(new.target, HDNode);\\n if (constructorGuard !== _constructorGuard) {\\n throw new Error(\\\"HDNode constructor cannot be called directly\\\");\\n }\\n if (privateKey) {\\n const signingKey = new _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_6__[\\\"SigningKey\\\"](privateKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"privateKey\\\", signingKey.privateKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"publicKey\\\", signingKey.compressedPublicKey);\\n }\\n else {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"privateKey\\\", null);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"publicKey\\\", Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(publicKey));\\n }\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"parentFingerprint\\\", parentFingerprint);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"fingerprint\\\", Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataSlice\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"ripemd160\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(this.publicKey)), 0, 4));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"address\\\", Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_8__[\\\"computeAddress\\\"])(this.publicKey));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"chainCode\\\", chainCode);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"index\\\", index);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"depth\\\", depth);\\n if (mnemonicOrPath == null) {\\n // From a source that does not preserve the path (e.g. extended keys)\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"mnemonic\\\", null);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"path\\\", null);\\n }\\n else if (typeof (mnemonicOrPath) === \\\"string\\\") {\\n // From a source that does not preserve the mnemonic (e.g. neutered)\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"mnemonic\\\", null);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"path\\\", mnemonicOrPath);\\n }\\n else {\\n // From a fully qualified source\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"mnemonic\\\", mnemonicOrPath);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"path\\\", mnemonicOrPath.path);\\n }\\n }\\n get extendedKey() {\\n // We only support the mainnet values for now, but if anyone needs\\n // testnet values, let me know. I believe current senitment is that\\n // we should always use mainnet, and use BIP-44 to derive the network\\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\\n // - Testnet: public=0x043587CF, private=0x04358394\\n if (this.depth >= 256) {\\n throw new Error(\\\"Depth too large!\\\");\\n }\\n return base58check(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([\\n ((this.privateKey != null) ? \\\"0x0488ADE4\\\" : \\\"0x0488B21E\\\"),\\n Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(this.depth),\\n this.parentFingerprint,\\n Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(this.index), 4),\\n this.chainCode,\\n ((this.privateKey != null) ? Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([\\\"0x00\\\", this.privateKey]) : this.publicKey),\\n ]));\\n }\\n neuter() {\\n return new HDNode(_constructorGuard, null, this.publicKey, this.parentFingerprint, this.chainCode, this.index, this.depth, this.path);\\n }\\n _derive(index) {\\n if (index > 0xffffffff) {\\n throw new Error(\\\"invalid index - \\\" + String(index));\\n }\\n // Base path\\n let path = this.path;\\n if (path) {\\n path += \\\"/\\\" + (index & ~HardenedBit);\\n }\\n const data = new Uint8Array(37);\\n if (index & HardenedBit) {\\n if (!this.privateKey) {\\n throw new Error(\\\"cannot derive child of neutered node\\\");\\n }\\n // Data = 0x00 || ser_256(k_par)\\n data.set(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.privateKey), 1);\\n // Hardened path\\n if (path) {\\n path += \\\"'\\\";\\n }\\n }\\n else {\\n // Data = ser_p(point(k_par))\\n data.set(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.publicKey));\\n }\\n // Data += ser_32(i)\\n for (let i = 24; i >= 0; i -= 8) {\\n data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);\\n }\\n const I = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"computeHmac\\\"])(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"SupportedAlgorithm\\\"].sha512, this.chainCode, data));\\n const IL = I.slice(0, 32);\\n const IR = I.slice(32);\\n // The private key\\n let ki = null;\\n // The public key\\n let Ki = null;\\n if (this.privateKey) {\\n ki = bytes32(_ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__[\\\"BigNumber\\\"].from(IL).add(this.privateKey).mod(N));\\n }\\n else {\\n const ek = new _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_6__[\\\"SigningKey\\\"](Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(IL));\\n Ki = ek._addPoint(this.publicKey);\\n }\\n let mnemonicOrPath = path;\\n const srcMnemonic = this.mnemonic;\\n if (srcMnemonic) {\\n mnemonicOrPath = Object.freeze({\\n phrase: srcMnemonic.phrase,\\n path: path,\\n locale: (srcMnemonic.locale || \\\"en\\\")\\n });\\n }\\n return new HDNode(_constructorGuard, ki, Ki, this.fingerprint, bytes32(IR), index, this.depth + 1, mnemonicOrPath);\\n }\\n derivePath(path) {\\n const components = path.split(\\\"/\\\");\\n if (components.length === 0 || (components[0] === \\\"m\\\" && this.depth !== 0)) {\\n throw new Error(\\\"invalid path - \\\" + path);\\n }\\n if (components[0] === \\\"m\\\") {\\n components.shift();\\n }\\n let result = this;\\n for (let i = 0; i < components.length; i++) {\\n const component = components[i];\\n if (component.match(/^[0-9]+'$/)) {\\n const index = parseInt(component.substring(0, component.length - 1));\\n if (index >= HardenedBit) {\\n throw new Error(\\\"invalid path index - \\\" + component);\\n }\\n result = result._derive(HardenedBit + index);\\n }\\n else if (component.match(/^[0-9]+$/)) {\\n const index = parseInt(component);\\n if (index >= HardenedBit) {\\n throw new Error(\\\"invalid path index - \\\" + component);\\n }\\n result = result._derive(index);\\n }\\n else {\\n throw new Error(\\\"invalid path component - \\\" + component);\\n }\\n }\\n return result;\\n }\\n static _fromSeed(seed, mnemonic) {\\n const seedArray = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(seed);\\n if (seedArray.length < 16 || seedArray.length > 64) {\\n throw new Error(\\\"invalid seed\\\");\\n }\\n const I = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"computeHmac\\\"])(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"SupportedAlgorithm\\\"].sha512, MasterSecret, seedArray));\\n return new HDNode(_constructorGuard, bytes32(I.slice(0, 32)), null, \\\"0x00000000\\\", bytes32(I.slice(32)), 0, 0, mnemonic);\\n }\\n static fromMnemonic(mnemonic, password, wordlist) {\\n // If a locale name was passed in, find the associated wordlist\\n wordlist = getWordlist(wordlist);\\n // Normalize the case and spacing in the mnemonic (throws if the mnemonic is invalid)\\n mnemonic = entropyToMnemonic(mnemonicToEntropy(mnemonic, wordlist), wordlist);\\n return HDNode._fromSeed(mnemonicToSeed(mnemonic, password), {\\n phrase: mnemonic,\\n path: \\\"m\\\",\\n locale: wordlist.locale\\n });\\n }\\n static fromSeed(seed) {\\n return HDNode._fromSeed(seed, null);\\n }\\n static fromExtendedKey(extendedKey) {\\n const bytes = _ethersproject_basex__WEBPACK_IMPORTED_MODULE_0__[\\\"Base58\\\"].decode(extendedKey);\\n if (bytes.length !== 82 || base58check(bytes.slice(0, 78)) !== extendedKey) {\\n logger.throwArgumentError(\\\"invalid extended key\\\", \\\"extendedKey\\\", \\\"[REDACTED]\\\");\\n }\\n const depth = bytes[4];\\n const parentFingerprint = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes.slice(5, 9));\\n const index = parseInt(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes.slice(9, 13)).substring(2), 16);\\n const chainCode = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes.slice(13, 45));\\n const key = bytes.slice(45, 78);\\n switch (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes.slice(0, 4))) {\\n // Public Key\\n case \\\"0x0488b21e\\\":\\n case \\\"0x043587cf\\\":\\n return new HDNode(_constructorGuard, null, Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(key), parentFingerprint, chainCode, index, depth, null);\\n // Private Key\\n case \\\"0x0488ade4\\\":\\n case \\\"0x04358394 \\\":\\n if (key[0] !== 0) {\\n break;\\n }\\n return new HDNode(_constructorGuard, Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(key.slice(1)), null, parentFingerprint, chainCode, index, depth, null);\\n }\\n return logger.throwError(\\\"invalid extended key\\\", \\\"extendedKey\\\", \\\"[REDACTED]\\\");\\n }\\n}\\nfunction mnemonicToSeed(mnemonic, password) {\\n if (!password) {\\n password = \\\"\\\";\\n }\\n const salt = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"toUtf8Bytes\\\"])(\\\"mnemonic\\\" + password, _ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"UnicodeNormalizationForm\\\"].NFKD);\\n return Object(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__[\\\"pbkdf2\\\"])(Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"toUtf8Bytes\\\"])(mnemonic, _ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"UnicodeNormalizationForm\\\"].NFKD), salt, 2048, 64, \\\"sha512\\\");\\n}\\nfunction mnemonicToEntropy(mnemonic, wordlist) {\\n wordlist = getWordlist(wordlist);\\n logger.checkNormalize();\\n const words = wordlist.split(mnemonic);\\n if ((words.length % 3) !== 0) {\\n throw new Error(\\\"invalid mnemonic\\\");\\n }\\n const entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(new Uint8Array(Math.ceil(11 * words.length / 8)));\\n let offset = 0;\\n for (let i = 0; i < words.length; i++) {\\n let index = wordlist.getWordIndex(words[i].normalize(\\\"NFKD\\\"));\\n if (index === -1) {\\n throw new Error(\\\"invalid mnemonic\\\");\\n }\\n for (let bit = 0; bit < 11; bit++) {\\n if (index & (1 << (10 - bit))) {\\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\\n }\\n offset++;\\n }\\n }\\n const entropyBits = 32 * words.length / 3;\\n const checksumBits = words.length / 3;\\n const checksumMask = getUpperMask(checksumBits);\\n const checksum = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\\n throw new Error(\\\"invalid checksum\\\");\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(entropy.slice(0, entropyBits / 8));\\n}\\nfunction entropyToMnemonic(entropy, wordlist) {\\n wordlist = getWordlist(wordlist);\\n entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(entropy);\\n if ((entropy.length % 4) !== 0 || entropy.length < 16 || entropy.length > 32) {\\n throw new Error(\\\"invalid entropy\\\");\\n }\\n const indices = [0];\\n let remainingBits = 11;\\n for (let i = 0; i < entropy.length; i++) {\\n // Consume the whole byte (with still more to go)\\n if (remainingBits > 8) {\\n indices[indices.length - 1] <<= 8;\\n indices[indices.length - 1] |= entropy[i];\\n remainingBits -= 8;\\n // This byte will complete an 11-bit index\\n }\\n else {\\n indices[indices.length - 1] <<= remainingBits;\\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\\n // Start the next word\\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\\n remainingBits += 3;\\n }\\n }\\n // Compute the checksum bits\\n const checksumBits = entropy.length / 4;\\n const checksum = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(entropy))[0] & getUpperMask(checksumBits);\\n // Shift the checksum into the word indices\\n indices[indices.length - 1] <<= checksumBits;\\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\\n return wordlist.join(indices.map((index) => wordlist.getWord(index)));\\n}\\nfunction isValidMnemonic(mnemonic, wordlist) {\\n try {\\n mnemonicToEntropy(mnemonic, wordlist);\\n return true;\\n }\\n catch (error) { }\\n return false;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/hdnode/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/_version.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/_version.js ***!\n \\**********************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"json-wallets/5.0.0-beta.137\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/crowdsale.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/crowdsale.js ***!\n \\***********************************************************************/\n/*! exports provided: CrowdsaleAccount, decrypt */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"CrowdsaleAccount\\\", function() { return CrowdsaleAccount; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decrypt\\\", function() { return decrypt; });\\n/* harmony import */ var aes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aes-js */ \\\"./node_modules/aes-js/index.js\\\");\\n/* harmony import */ var aes_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(aes_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/pbkdf2 */ \\\"./node_modules/@ethersproject/pbkdf2/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _ethersproject_strings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/strings */ \\\"./node_modules/@ethersproject/strings/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/_version.js\\\");\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/utils.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_7__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_8__[\\\"version\\\"]);\\n\\nclass CrowdsaleAccount extends _ethersproject_properties__WEBPACK_IMPORTED_MODULE_6__[\\\"Description\\\"] {\\n isCrowdsaleAccount(value) {\\n return !!(value && value._isCrowdsaleAccount);\\n }\\n}\\n// See: https://github.com/ethereum/pyethsaletool\\nfunction decrypt(json, password) {\\n const data = JSON.parse(json);\\n password = Object(_utils__WEBPACK_IMPORTED_MODULE_9__[\\\"getPassword\\\"])(password);\\n // Ethereum Address\\n const ethaddr = Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_1__[\\\"getAddress\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_9__[\\\"searchPath\\\"])(data, \\\"ethaddr\\\"));\\n // Encrypted Seed\\n const encseed = Object(_utils__WEBPACK_IMPORTED_MODULE_9__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_9__[\\\"searchPath\\\"])(data, \\\"encseed\\\"));\\n if (!encseed || (encseed.length % 16) !== 0) {\\n logger.throwArgumentError(\\\"invalid encseed\\\", \\\"json\\\", json);\\n }\\n const key = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(Object(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__[\\\"pbkdf2\\\"])(password, password, 2000, 32, \\\"sha256\\\")).slice(0, 16);\\n const iv = encseed.slice(0, 16);\\n const encryptedSeed = encseed.slice(16);\\n // Decrypt the seed\\n const aesCbc = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.cbc(key, iv);\\n const seed = aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.padding.pkcs7.strip(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(aesCbc.decrypt(encryptedSeed)));\\n // This wallet format is weird... Convert the binary encoded hex to a string.\\n let seedHex = \\\"\\\";\\n for (let i = 0; i < seed.length; i++) {\\n seedHex += String.fromCharCode(seed[i]);\\n }\\n const seedHexBytes = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_5__[\\\"toUtf8Bytes\\\"])(seedHex);\\n const privateKey = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__[\\\"keccak256\\\"])(seedHexBytes);\\n return new CrowdsaleAccount({\\n _isCrowdsaleAccount: true,\\n address: ethaddr,\\n privateKey: privateKey\\n });\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/crowdsale.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/index.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/index.js ***!\n \\*******************************************************************/\n/*! exports provided: decryptCrowdsale, decryptKeystore, decryptKeystoreSync, encryptKeystore, isCrowdsaleWallet, isKeystoreWallet, getJsonWalletAddress, decryptJsonWallet, decryptJsonWalletSync */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decryptJsonWallet\\\", function() { return decryptJsonWallet; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decryptJsonWalletSync\\\", function() { return decryptJsonWalletSync; });\\n/* harmony import */ var _crowdsale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./crowdsale */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/crowdsale.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"decryptCrowdsale\\\", function() { return _crowdsale__WEBPACK_IMPORTED_MODULE_0__[\\\"decrypt\\\"]; });\\n\\n/* harmony import */ var _inspect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./inspect */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/inspect.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"isCrowdsaleWallet\\\", function() { return _inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isCrowdsaleWallet\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"isKeystoreWallet\\\", function() { return _inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isKeystoreWallet\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"getJsonWalletAddress\\\", function() { return _inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"getJsonWalletAddress\\\"]; });\\n\\n/* harmony import */ var _keystore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keystore */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/keystore.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"decryptKeystore\\\", function() { return _keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"decrypt\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"decryptKeystoreSync\\\", function() { return _keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"decryptSync\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"encryptKeystore\\\", function() { return _keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"encrypt\\\"]; });\\n\\n\\n\\n\\n\\nfunction decryptJsonWallet(json, password, progressCallback) {\\n if (Object(_inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isCrowdsaleWallet\\\"])(json)) {\\n if (progressCallback) {\\n progressCallback(0);\\n }\\n const account = Object(_crowdsale__WEBPACK_IMPORTED_MODULE_0__[\\\"decrypt\\\"])(json, password);\\n if (progressCallback) {\\n progressCallback(1);\\n }\\n return Promise.resolve(account);\\n }\\n if (Object(_inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isKeystoreWallet\\\"])(json)) {\\n return Object(_keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"decrypt\\\"])(json, password, progressCallback);\\n }\\n return Promise.reject(new Error(\\\"invalid JSON wallet\\\"));\\n}\\nfunction decryptJsonWalletSync(json, password) {\\n if (Object(_inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isCrowdsaleWallet\\\"])(json)) {\\n return Object(_crowdsale__WEBPACK_IMPORTED_MODULE_0__[\\\"decrypt\\\"])(json, password);\\n }\\n if (Object(_inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isKeystoreWallet\\\"])(json)) {\\n return Object(_keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"decryptSync\\\"])(json, password);\\n }\\n throw new Error(\\\"invalid JSON wallet\\\");\\n}\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/inspect.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/inspect.js ***!\n \\*********************************************************************/\n/*! exports provided: isCrowdsaleWallet, isKeystoreWallet, getJsonWalletAddress */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isCrowdsaleWallet\\\", function() { return isCrowdsaleWallet; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isKeystoreWallet\\\", function() { return isKeystoreWallet; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getJsonWalletAddress\\\", function() { return getJsonWalletAddress; });\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n\\n\\nfunction isCrowdsaleWallet(json) {\\n let data = null;\\n try {\\n data = JSON.parse(json);\\n }\\n catch (error) {\\n return false;\\n }\\n return (data.encseed && data.ethaddr);\\n}\\nfunction isKeystoreWallet(json) {\\n let data = null;\\n try {\\n data = JSON.parse(json);\\n }\\n catch (error) {\\n return false;\\n }\\n if (!data.version || parseInt(data.version) !== data.version || parseInt(data.version) !== 3) {\\n return false;\\n }\\n // @TODO: Put more checks to make sure it has kdf, iv and all that good stuff\\n return true;\\n}\\n//export function isJsonWallet(json: string): boolean {\\n// return (isSecretStorageWallet(json) || isCrowdsaleWallet(json));\\n//}\\nfunction getJsonWalletAddress(json) {\\n if (isCrowdsaleWallet(json)) {\\n try {\\n return Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(JSON.parse(json).ethaddr);\\n }\\n catch (error) {\\n return null;\\n }\\n }\\n if (isKeystoreWallet(json)) {\\n try {\\n return Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(JSON.parse(json).address);\\n }\\n catch (error) {\\n return null;\\n }\\n }\\n return null;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/inspect.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/keystore.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/keystore.js ***!\n \\**********************************************************************/\n/*! exports provided: KeystoreAccount, decryptSync, decrypt, encrypt */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"KeystoreAccount\\\", function() { return KeystoreAccount; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decryptSync\\\", function() { return decryptSync; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decrypt\\\", function() { return decrypt; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"encrypt\\\", function() { return encrypt; });\\n/* harmony import */ var aes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aes-js */ \\\"./node_modules/aes-js/index.js\\\");\\n/* harmony import */ var aes_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(aes_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var scrypt_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scrypt-js */ \\\"./node_modules/scrypt-js/scrypt.js\\\");\\n/* harmony import */ var scrypt_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scrypt_js__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uuid */ \\\"./node_modules/uuid/uuid.js\\\");\\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(uuid__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/hdnode */ \\\"./node_modules/@ethersproject/hdnode/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/pbkdf2 */ \\\"./node_modules/@ethersproject/pbkdf2/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var _ethersproject_random__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @ethersproject/random */ \\\"./node_modules/@ethersproject/random/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_random__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__);\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_transactions__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ethersproject/transactions */ \\\"./node_modules/@ethersproject/transactions/lib.esm/index.js\\\");\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/utils.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/_version.js\\\");\\n\\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_13__[\\\"version\\\"]);\\n// Exported Types\\nfunction hasMnemonic(value) {\\n return (value != null && value.mnemonic && value.mnemonic.phrase);\\n}\\nclass KeystoreAccount extends _ethersproject_properties__WEBPACK_IMPORTED_MODULE_9__[\\\"Description\\\"] {\\n isKeystoreAccount(value) {\\n return !!(value && value._isKeystoreAccount);\\n }\\n}\\nfunction _decrypt(data, key, ciphertext) {\\n const cipher = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/cipher\\\");\\n if (cipher === \\\"aes-128-ctr\\\") {\\n const iv = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/cipherparams/iv\\\"));\\n const counter = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.Counter(iv);\\n const aesCtr = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.ctr(key, counter);\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(aesCtr.decrypt(ciphertext));\\n }\\n return null;\\n}\\nfunction _getAccount(data, key) {\\n const ciphertext = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/ciphertext\\\"));\\n const computedMAC = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"concat\\\"])([key.slice(16, 32), ciphertext]))).substring(2);\\n if (computedMAC !== Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/mac\\\").toLowerCase()) {\\n throw new Error(\\\"invalid password\\\");\\n }\\n const privateKey = _decrypt(data, key.slice(0, 16), ciphertext);\\n if (!privateKey) {\\n logger.throwError(\\\"unsupported cipher\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__[\\\"Logger\\\"].errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"decrypt\\\"\\n });\\n }\\n const mnemonicKey = key.slice(32, 64);\\n const address = Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_10__[\\\"computeAddress\\\"])(privateKey);\\n if (data.address) {\\n let check = data.address.toLowerCase();\\n if (check.substring(0, 2) !== \\\"0x\\\") {\\n check = \\\"0x\\\" + check;\\n }\\n if (Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_3__[\\\"getAddress\\\"])(check) !== address) {\\n throw new Error(\\\"address mismatch\\\");\\n }\\n }\\n const account = {\\n _isKeystoreAccount: true,\\n address: address,\\n privateKey: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(privateKey)\\n };\\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\\n if (Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/version\\\") === \\\"0.1\\\") {\\n const mnemonicCiphertext = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/mnemonicCiphertext\\\"));\\n const mnemonicIv = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/mnemonicCounter\\\"));\\n const mnemonicCounter = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.Counter(mnemonicIv);\\n const mnemonicAesCtr = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\\n const path = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/path\\\") || _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"];\\n const locale = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/locale\\\") || \\\"en\\\";\\n const entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(mnemonicAesCtr.decrypt(mnemonicCiphertext));\\n try {\\n const mnemonic = Object(_ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"entropyToMnemonic\\\"])(entropy, locale);\\n const node = _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"HDNode\\\"].fromMnemonic(mnemonic, null, locale).derivePath(path);\\n if (node.privateKey != account.privateKey) {\\n throw new Error(\\\"mnemonic mismatch\\\");\\n }\\n account.mnemonic = node.mnemonic;\\n }\\n catch (error) {\\n // If we don't have the locale wordlist installed to\\n // read this mnemonic, just bail and don't set the\\n // mnemonic\\n if (error.code !== _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__[\\\"Logger\\\"].errors.INVALID_ARGUMENT || error.argument !== \\\"wordlist\\\") {\\n throw error;\\n }\\n }\\n }\\n return new KeystoreAccount(account);\\n}\\nfunction pbkdf2Sync(passwordBytes, salt, count, dkLen, prfFunc) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(Object(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_7__[\\\"pbkdf2\\\"])(passwordBytes, salt, count, dkLen, prfFunc));\\n}\\nfunction pbkdf2(passwordBytes, salt, count, dkLen, prfFunc) {\\n return Promise.resolve(pbkdf2Sync(passwordBytes, salt, count, dkLen, prfFunc));\\n}\\nfunction _computeKdfKey(data, password, pbkdf2Func, scryptFunc, progressCallback) {\\n const passwordBytes = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"getPassword\\\"])(password);\\n const kdf = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdf\\\");\\n if (kdf && typeof (kdf) === \\\"string\\\") {\\n const throwError = function (name, value) {\\n return logger.throwArgumentError(\\\"invalid key-derivation function parameters\\\", name, value);\\n };\\n if (kdf.toLowerCase() === \\\"scrypt\\\") {\\n const salt = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/salt\\\"));\\n const N = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/n\\\"));\\n const r = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/r\\\"));\\n const p = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/p\\\"));\\n // Check for all required parameters\\n if (!N || !r || !p) {\\n throwError(\\\"kdf\\\", kdf);\\n }\\n // Make sure N is a power of 2\\n if ((N & (N - 1)) !== 0) {\\n throwError(\\\"N\\\", N);\\n }\\n const dkLen = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/dklen\\\"));\\n if (dkLen !== 32) {\\n throwError(\\\"dklen\\\", dkLen);\\n }\\n return scryptFunc(passwordBytes, salt, N, r, p, 64, progressCallback);\\n }\\n else if (kdf.toLowerCase() === \\\"pbkdf2\\\") {\\n const salt = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/salt\\\"));\\n let prfFunc = null;\\n const prf = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/prf\\\");\\n if (prf === \\\"hmac-sha256\\\") {\\n prfFunc = \\\"sha256\\\";\\n }\\n else if (prf === \\\"hmac-sha512\\\") {\\n prfFunc = \\\"sha512\\\";\\n }\\n else {\\n throwError(\\\"prf\\\", prf);\\n }\\n const count = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/c\\\"));\\n const dkLen = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/dklen\\\"));\\n if (dkLen !== 32) {\\n throwError(\\\"dklen\\\", dkLen);\\n }\\n return pbkdf2Func(passwordBytes, salt, count, dkLen, prfFunc);\\n }\\n }\\n return logger.throwArgumentError(\\\"unsupported key-derivation function\\\", \\\"kdf\\\", kdf);\\n}\\nfunction decryptSync(json, password) {\\n const data = JSON.parse(json);\\n const key = _computeKdfKey(data, password, pbkdf2Sync, scrypt_js__WEBPACK_IMPORTED_MODULE_1__[\\\"syncScrypt\\\"]);\\n return _getAccount(data, key);\\n}\\nfunction decrypt(json, password, progressCallback) {\\n return __awaiter(this, void 0, void 0, function* () {\\n const data = JSON.parse(json);\\n const key = yield _computeKdfKey(data, password, pbkdf2, scrypt_js__WEBPACK_IMPORTED_MODULE_1__[\\\"scrypt\\\"], progressCallback);\\n return _getAccount(data, key);\\n });\\n}\\nfunction encrypt(account, password, options, progressCallback) {\\n try {\\n // Check the address matches the private key\\n if (Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_3__[\\\"getAddress\\\"])(account.address) !== Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_10__[\\\"computeAddress\\\"])(account.privateKey)) {\\n throw new Error(\\\"address/privateKey mismatch\\\");\\n }\\n // Check the mnemonic (if any) matches the private key\\n if (hasMnemonic(account)) {\\n const mnemonic = account.mnemonic;\\n const node = _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"HDNode\\\"].fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"]);\\n if (node.privateKey != account.privateKey) {\\n throw new Error(\\\"mnemonic mismatch\\\");\\n }\\n }\\n }\\n catch (e) {\\n return Promise.reject(e);\\n }\\n // The options are optional, so adjust the call as needed\\n if (typeof (options) === \\\"function\\\" && !progressCallback) {\\n progressCallback = options;\\n options = {};\\n }\\n if (!options) {\\n options = {};\\n }\\n const privateKey = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(account.privateKey);\\n const passwordBytes = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"getPassword\\\"])(password);\\n let entropy = null;\\n let path = null;\\n let locale = null;\\n if (hasMnemonic(account)) {\\n const srcMnemonic = account.mnemonic;\\n entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(Object(_ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"mnemonicToEntropy\\\"])(srcMnemonic.phrase, srcMnemonic.locale || \\\"en\\\"));\\n path = srcMnemonic.path || _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"];\\n locale = srcMnemonic.locale || \\\"en\\\";\\n }\\n let client = options.client;\\n if (!client) {\\n client = \\\"ethers.js\\\";\\n }\\n // Check/generate the salt\\n let salt = null;\\n if (options.salt) {\\n salt = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(options.salt);\\n }\\n else {\\n salt = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(32);\\n ;\\n }\\n // Override initialization vector\\n let iv = null;\\n if (options.iv) {\\n iv = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(options.iv);\\n if (iv.length !== 16) {\\n throw new Error(\\\"invalid iv\\\");\\n }\\n }\\n else {\\n iv = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(16);\\n }\\n // Override the uuid\\n let uuidRandom = null;\\n if (options.uuid) {\\n uuidRandom = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(options.uuid);\\n if (uuidRandom.length !== 16) {\\n throw new Error(\\\"invalid uuid\\\");\\n }\\n }\\n else {\\n uuidRandom = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(16);\\n }\\n // Override the scrypt password-based key derivation function parameters\\n let N = (1 << 17), r = 8, p = 1;\\n if (options.scrypt) {\\n if (options.scrypt.N) {\\n N = options.scrypt.N;\\n }\\n if (options.scrypt.r) {\\n r = options.scrypt.r;\\n }\\n if (options.scrypt.p) {\\n p = options.scrypt.p;\\n }\\n }\\n // We take 64 bytes:\\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\\n return scrypt_js__WEBPACK_IMPORTED_MODULE_1__[\\\"scrypt\\\"](passwordBytes, salt, N, r, p, 64, progressCallback).then((key) => {\\n key = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(key);\\n // This will be used to encrypt the wallet (as per Web3 secret storage)\\n const derivedKey = key.slice(0, 16);\\n const macPrefix = key.slice(16, 32);\\n // This will be used to encrypt the mnemonic phrase (if any)\\n const mnemonicKey = key.slice(32, 64);\\n // Encrypt the private key\\n const counter = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.Counter(iv);\\n const aesCtr = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.ctr(derivedKey, counter);\\n const ciphertext = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(aesCtr.encrypt(privateKey));\\n // Compute the message authentication code, used to check the password\\n const mac = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"concat\\\"])([macPrefix, ciphertext]));\\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\\n const data = {\\n address: account.address.substring(2).toLowerCase(),\\n id: uuid__WEBPACK_IMPORTED_MODULE_2___default.a.v4({ random: uuidRandom }),\\n version: 3,\\n Crypto: {\\n cipher: \\\"aes-128-ctr\\\",\\n cipherparams: {\\n iv: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(iv).substring(2),\\n },\\n ciphertext: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(ciphertext).substring(2),\\n kdf: \\\"scrypt\\\",\\n kdfparams: {\\n salt: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(salt).substring(2),\\n n: N,\\n dklen: 32,\\n p: p,\\n r: r\\n },\\n mac: mac.substring(2)\\n }\\n };\\n // If we have a mnemonic, encrypt it into the JSON wallet\\n if (entropy) {\\n const mnemonicIv = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(16);\\n const mnemonicCounter = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.Counter(mnemonicIv);\\n const mnemonicAesCtr = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\\n const mnemonicCiphertext = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(mnemonicAesCtr.encrypt(entropy));\\n const now = new Date();\\n const timestamp = (now.getUTCFullYear() + \\\"-\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCMonth() + 1, 2) + \\\"-\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCDate(), 2) + \\\"T\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCHours(), 2) + \\\"-\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCMinutes(), 2) + \\\"-\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCSeconds(), 2) + \\\".0Z\\\");\\n data[\\\"x-ethers\\\"] = {\\n client: client,\\n gethFilename: (\\\"UTC--\\\" + timestamp + \\\"--\\\" + data.address),\\n mnemonicCounter: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(mnemonicIv).substring(2),\\n mnemonicCiphertext: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(mnemonicCiphertext).substring(2),\\n path: path,\\n locale: locale,\\n version: \\\"0.1\\\"\\n };\\n }\\n return JSON.stringify(data);\\n });\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/keystore.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/utils.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/utils.js ***!\n \\*******************************************************************/\n/*! exports provided: looseArrayify, zpad, getPassword, searchPath */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"looseArrayify\\\", function() { return looseArrayify; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"zpad\\\", function() { return zpad; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getPassword\\\", function() { return getPassword; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"searchPath\\\", function() { return searchPath; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/strings */ \\\"./node_modules/@ethersproject/strings/lib.esm/index.js\\\");\\n\\n\\n\\nfunction looseArrayify(hexString) {\\n if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\\n hexString = '0x' + hexString;\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(hexString);\\n}\\nfunction zpad(value, length) {\\n value = String(value);\\n while (value.length < length) {\\n value = '0' + value;\\n }\\n return value;\\n}\\nfunction getPassword(password) {\\n if (typeof (password) === 'string') {\\n return Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(password, _ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"UnicodeNormalizationForm\\\"].NFKC);\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(password);\\n}\\nfunction searchPath(object, path) {\\n let currentChild = object;\\n const comps = path.toLowerCase().split('/');\\n for (let i = 0; i < comps.length; i++) {\\n // Search for a child object with a case-insensitive matching key\\n let matchingChild = null;\\n for (const key in currentChild) {\\n if (key.toLowerCase() === comps[i]) {\\n matchingChild = currentChild[key];\\n break;\\n }\\n }\\n // Didn't find one. :'(\\n if (matchingChild === null) {\\n return null;\\n }\\n // Now check this child...\\n currentChild = matchingChild;\\n }\\n return currentChild;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/keccak256/lib.esm/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/keccak256/lib.esm/index.js ***!\n \\****************************************************************/\n/*! exports provided: keccak256 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"keccak256\\\", function() { return keccak256; });\\n/* harmony import */ var js_sha3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! js-sha3 */ \\\"./node_modules/js-sha3/src/sha3.js\\\");\\n/* harmony import */ var js_sha3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(js_sha3__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n\\n\\n\\nfunction keccak256(data) {\\n return '0x' + js_sha3__WEBPACK_IMPORTED_MODULE_0___default.a.keccak_256(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(data));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/keccak256/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/logger/lib.esm/_version.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/logger/lib.esm/_version.js ***!\n \\****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"logger/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/logger/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/logger/lib.esm/index.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/logger/lib.esm/index.js ***!\n \\*************************************************************/\n/*! exports provided: Logger */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Logger\\\", function() { return Logger; });\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/logger/lib.esm/_version.js\\\");\\n\\nlet _permanentCensorErrors = false;\\nlet _censorErrors = false;\\nconst LogLevels = { debug: 1, \\\"default\\\": 2, info: 2, warn: 3, error: 4, off: 5 };\\nlet LogLevel = LogLevels[\\\"default\\\"];\\n\\nlet _globalLogger = null;\\nfunction _checkNormalize() {\\n try {\\n const missing = [];\\n // Make sure all forms of normalization are supported\\n [\\\"NFD\\\", \\\"NFC\\\", \\\"NFKD\\\", \\\"NFKC\\\"].forEach((form) => {\\n try {\\n if (\\\"test\\\".normalize(form) !== \\\"test\\\") {\\n throw new Error(\\\"bad normalize\\\");\\n }\\n ;\\n }\\n catch (error) {\\n missing.push(form);\\n }\\n });\\n if (missing.length) {\\n throw new Error(\\\"missing \\\" + missing.join(\\\", \\\"));\\n }\\n if (String.fromCharCode(0xe9).normalize(\\\"NFD\\\") !== String.fromCharCode(0x65, 0x0301)) {\\n throw new Error(\\\"broken implementation\\\");\\n }\\n }\\n catch (error) {\\n return error.message;\\n }\\n return null;\\n}\\nconst _normalizeError = _checkNormalize();\\nclass Logger {\\n constructor(version) {\\n Object.defineProperty(this, \\\"version\\\", {\\n enumerable: true,\\n value: version,\\n writable: false\\n });\\n }\\n _log(logLevel, args) {\\n if (LogLevel > LogLevels[logLevel]) {\\n return;\\n }\\n console.log.apply(console, args);\\n }\\n debug(...args) {\\n this._log(Logger.levels.DEBUG, args);\\n }\\n info(...args) {\\n this._log(Logger.levels.INFO, args);\\n }\\n warn(...args) {\\n this._log(Logger.levels.WARNING, args);\\n }\\n makeError(message, code, params) {\\n // Errors are being censored\\n if (_censorErrors) {\\n return this.makeError(\\\"censored error\\\", code, {});\\n }\\n if (!code) {\\n code = Logger.errors.UNKNOWN_ERROR;\\n }\\n if (!params) {\\n params = {};\\n }\\n const messageDetails = [];\\n Object.keys(params).forEach((key) => {\\n try {\\n messageDetails.push(key + \\\"=\\\" + JSON.stringify(params[key]));\\n }\\n catch (error) {\\n messageDetails.push(key + \\\"=\\\" + JSON.stringify(params[key].toString()));\\n }\\n });\\n messageDetails.push(`code=${code}`);\\n messageDetails.push(`version=${this.version}`);\\n const reason = message;\\n if (messageDetails.length) {\\n message += \\\" (\\\" + messageDetails.join(\\\", \\\") + \\\")\\\";\\n }\\n // @TODO: Any??\\n const error = new Error(message);\\n error.reason = reason;\\n error.code = code;\\n Object.keys(params).forEach(function (key) {\\n error[key] = params[key];\\n });\\n return error;\\n }\\n throwError(message, code, params) {\\n throw this.makeError(message, code, params);\\n }\\n throwArgumentError(message, name, value) {\\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\\n argument: name,\\n value: value\\n });\\n }\\n checkNormalize(message) {\\n if (message == null) {\\n message = \\\"platform missing String.prototype.normalize\\\";\\n }\\n if (_normalizeError) {\\n this.throwError(\\\"platform missing String.prototype.normalize\\\", Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"String.prototype.normalize\\\", form: _normalizeError\\n });\\n }\\n }\\n checkSafeUint53(value, message) {\\n if (typeof (value) !== \\\"number\\\") {\\n return;\\n }\\n if (message == null) {\\n message = \\\"value not safe\\\";\\n }\\n if (value < 0 || value >= 0x1fffffffffffff) {\\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\\n operation: \\\"checkSafeInteger\\\",\\n fault: \\\"out-of-safe-range\\\",\\n value: value\\n });\\n }\\n if (value % 1) {\\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\\n operation: \\\"checkSafeInteger\\\",\\n fault: \\\"non-integer\\\",\\n value: value\\n });\\n }\\n }\\n checkArgumentCount(count, expectedCount, message) {\\n if (message) {\\n message = \\\": \\\" + message;\\n }\\n else {\\n message = \\\"\\\";\\n }\\n if (count < expectedCount) {\\n this.throwError(\\\"missing argument\\\" + message, Logger.errors.MISSING_ARGUMENT, {\\n count: count,\\n expectedCount: expectedCount\\n });\\n }\\n if (count > expectedCount) {\\n this.throwError(\\\"too many arguments\\\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\\n count: count,\\n expectedCount: expectedCount\\n });\\n }\\n }\\n checkNew(target, kind) {\\n if (target === Object || target == null) {\\n this.throwError(\\\"missing new\\\", Logger.errors.MISSING_NEW, { name: kind.name });\\n }\\n }\\n checkAbstract(target, kind) {\\n if (target === kind) {\\n this.throwError(\\\"cannot instantiate abstract class \\\" + JSON.stringify(kind.name) + \\\" directly; use a sub-class\\\", Logger.errors.UNSUPPORTED_OPERATION, { name: target.name, operation: \\\"new\\\" });\\n }\\n else if (target === Object || target == null) {\\n this.throwError(\\\"missing new\\\", Logger.errors.MISSING_NEW, { name: kind.name });\\n }\\n }\\n static globalLogger() {\\n if (!_globalLogger) {\\n _globalLogger = new Logger(_version__WEBPACK_IMPORTED_MODULE_0__[\\\"version\\\"]);\\n }\\n return _globalLogger;\\n }\\n static setCensorship(censorship, permanent) {\\n if (!censorship && permanent) {\\n this.globalLogger().throwError(\\\"cannot permanently disable censorship\\\", Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"setCensorship\\\"\\n });\\n }\\n if (_permanentCensorErrors) {\\n if (!censorship) {\\n return;\\n }\\n this.globalLogger().throwError(\\\"error censorship permanent\\\", Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"setCensorship\\\"\\n });\\n }\\n _censorErrors = !!censorship;\\n _permanentCensorErrors = !!permanent;\\n }\\n static setLogLevel(logLevel) {\\n const level = LogLevels[logLevel];\\n if (level == null) {\\n Logger.globalLogger().warn(\\\"invalid log level - \\\" + logLevel);\\n return;\\n }\\n LogLevel = level;\\n }\\n}\\nLogger.errors = {\\n ///////////////////\\n // Generic Errors\\n // Unknown Error\\n UNKNOWN_ERROR: \\\"UNKNOWN_ERROR\\\",\\n // Not Implemented\\n NOT_IMPLEMENTED: \\\"NOT_IMPLEMENTED\\\",\\n // Unsupported Operation\\n // - operation\\n UNSUPPORTED_OPERATION: \\\"UNSUPPORTED_OPERATION\\\",\\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\\n NETWORK_ERROR: \\\"NETWORK_ERROR\\\",\\n // Some sort of bad response from the server\\n SERVER_ERROR: \\\"SERVER_ERROR\\\",\\n // Timeout\\n TIMEOUT: \\\"TIMEOUT\\\",\\n ///////////////////\\n // Operational Errors\\n // Buffer Overrun\\n BUFFER_OVERRUN: \\\"BUFFER_OVERRUN\\\",\\n // Numeric Fault\\n // - operation: the operation being executed\\n // - fault: the reason this faulted\\n NUMERIC_FAULT: \\\"NUMERIC_FAULT\\\",\\n ///////////////////\\n // Argument Errors\\n // Missing new operator to an object\\n // - name: The name of the class\\n MISSING_NEW: \\\"MISSING_NEW\\\",\\n // Invalid argument (e.g. value is incompatible with type) to a function:\\n // - argument: The argument name that was invalid\\n // - value: The value of the argument\\n INVALID_ARGUMENT: \\\"INVALID_ARGUMENT\\\",\\n // Missing argument to a function:\\n // - count: The number of arguments received\\n // - expectedCount: The number of arguments expected\\n MISSING_ARGUMENT: \\\"MISSING_ARGUMENT\\\",\\n // Too many arguments\\n // - count: The number of arguments received\\n // - expectedCount: The number of arguments expected\\n UNEXPECTED_ARGUMENT: \\\"UNEXPECTED_ARGUMENT\\\",\\n ///////////////////\\n // Blockchain Errors\\n // Call exception\\n // - transaction: the transaction\\n // - address?: the contract address\\n // - args?: The arguments passed into the function\\n // - method?: The Solidity method signature\\n // - errorSignature?: The EIP848 error signature\\n // - errorArgs?: The EIP848 error parameters\\n // - reason: The reason (only for EIP848 \\\"Error(string)\\\")\\n CALL_EXCEPTION: \\\"CALL_EXCEPTION\\\",\\n // Insufficien funds (< value + gasLimit * gasPrice)\\n // - transaction: the transaction attempted\\n INSUFFICIENT_FUNDS: \\\"INSUFFICIENT_FUNDS\\\",\\n // Nonce has already been used\\n // - transaction: the transaction attempted\\n NONCE_EXPIRED: \\\"NONCE_EXPIRED\\\",\\n // The replacement fee for the transaction is too low\\n // - transaction: the transaction attempted\\n REPLACEMENT_UNDERPRICED: \\\"REPLACEMENT_UNDERPRICED\\\",\\n // The gas limit could not be estimated\\n // - transaction: the transaction passed to estimateGas\\n UNPREDICTABLE_GAS_LIMIT: \\\"UNPREDICTABLE_GAS_LIMIT\\\",\\n};\\nLogger.levels = {\\n DEBUG: \\\"DEBUG\\\",\\n INFO: \\\"INFO\\\",\\n WARNING: \\\"WARNING\\\",\\n ERROR: \\\"ERROR\\\",\\n OFF: \\\"OFF\\\"\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/logger/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/pbkdf2/lib/browser.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/@ethersproject/pbkdf2/lib/browser.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar bytes_1 = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\nvar sha2_1 = __webpack_require__(/*! @ethersproject/sha2 */ \\\"./node_modules/@ethersproject/sha2/lib/browser.js\\\");\\nfunction pbkdf2(password, salt, iterations, keylen, hashAlgorithm) {\\n password = bytes_1.arrayify(password);\\n salt = bytes_1.arrayify(salt);\\n var hLen;\\n var l = 1;\\n var DK = new Uint8Array(keylen);\\n var block1 = new Uint8Array(salt.length + 4);\\n block1.set(salt);\\n //salt.copy(block1, 0, 0, salt.length)\\n var r;\\n var T;\\n for (var i = 1; i <= l; i++) {\\n //block1.writeUInt32BE(i, salt.length)\\n block1[salt.length] = (i >> 24) & 0xff;\\n block1[salt.length + 1] = (i >> 16) & 0xff;\\n block1[salt.length + 2] = (i >> 8) & 0xff;\\n block1[salt.length + 3] = i & 0xff;\\n //let U = createHmac(password).update(block1).digest();\\n var U = bytes_1.arrayify(sha2_1.computeHmac(hashAlgorithm, password, block1));\\n if (!hLen) {\\n hLen = U.length;\\n T = new Uint8Array(hLen);\\n l = Math.ceil(keylen / hLen);\\n r = keylen - (l - 1) * hLen;\\n }\\n //U.copy(T, 0, 0, hLen)\\n T.set(U);\\n for (var j = 1; j < iterations; j++) {\\n //U = createHmac(password).update(U).digest();\\n U = bytes_1.arrayify(sha2_1.computeHmac(hashAlgorithm, password, U));\\n for (var k = 0; k < hLen; k++)\\n T[k] ^= U[k];\\n }\\n var destPos = (i - 1) * hLen;\\n var len = (i === l ? r : hLen);\\n //T.copy(DK, destPos, 0, len)\\n DK.set(bytes_1.arrayify(T).slice(0, len), destPos);\\n }\\n return bytes_1.hexlify(DK);\\n}\\nexports.pbkdf2 = pbkdf2;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/pbkdf2/lib/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/properties/lib.esm/_version.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/@ethersproject/properties/lib.esm/_version.js ***!\n \\********************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"properties/5.0.0-beta.137\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/properties/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/properties/lib.esm/index.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@ethersproject/properties/lib.esm/index.js ***!\n \\*****************************************************************/\n/*! exports provided: defineReadOnly, getStatic, resolveProperties, checkProperties, shallowCopy, deepCopy, Description */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"defineReadOnly\\\", function() { return defineReadOnly; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getStatic\\\", function() { return getStatic; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"resolveProperties\\\", function() { return resolveProperties; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"checkProperties\\\", function() { return checkProperties; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"shallowCopy\\\", function() { return shallowCopy; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"deepCopy\\\", function() { return deepCopy; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Description\\\", function() { return Description; });\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/properties/lib.esm/_version.js\\\");\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_1__[\\\"version\\\"]);\\nfunction defineReadOnly(object, name, value) {\\n Object.defineProperty(object, name, {\\n enumerable: true,\\n value: value,\\n writable: false,\\n });\\n}\\n// Crawl up the constructor chain to find a static method\\nfunction getStatic(ctor, key) {\\n for (let i = 0; i < 32; i++) {\\n if (ctor[key]) {\\n return ctor[key];\\n }\\n if (!ctor.prototype || typeof (ctor.prototype) !== \\\"object\\\") {\\n break;\\n }\\n ctor = Object.getPrototypeOf(ctor.prototype).constructor;\\n }\\n return null;\\n}\\nfunction resolveProperties(object) {\\n const promises = Object.keys(object).map((key) => {\\n const value = object[key];\\n if (!(value instanceof Promise)) {\\n return Promise.resolve({ key: key, value: value });\\n }\\n return value.then((value) => {\\n return { key: key, value: value };\\n });\\n });\\n return Promise.all(promises).then((results) => {\\n const result = {};\\n return (results.reduce((accum, result) => {\\n accum[result.key] = result.value;\\n return accum;\\n }, result));\\n });\\n}\\nfunction checkProperties(object, properties) {\\n if (!object || typeof (object) !== \\\"object\\\") {\\n logger.throwArgumentError(\\\"invalid object\\\", \\\"object\\\", object);\\n }\\n Object.keys(object).forEach((key) => {\\n if (!properties[key]) {\\n logger.throwArgumentError(\\\"invalid object key - \\\" + key, \\\"transaction:\\\" + key, object);\\n }\\n });\\n}\\nfunction shallowCopy(object) {\\n const result = {};\\n for (const key in object) {\\n result[key] = object[key];\\n }\\n return result;\\n}\\nconst opaque = { bigint: true, boolean: true, number: true, string: true };\\n// Returns a new copy of object, such that no properties may be replaced.\\n// New properties may be added only to objects.\\nfunction _deepCopy(object) {\\n // Opaque objects are not mutable, so safe to copy by assignment\\n if (object === undefined || object === null || opaque[typeof (object)]) {\\n return object;\\n }\\n // Arrays are mutable, so we need to create a copy\\n if (Array.isArray(object)) {\\n return Object.freeze(object.map((item) => deepCopy(item)));\\n }\\n if (typeof (object) === \\\"object\\\") {\\n // Immutable objects are safe to just use\\n if (Object.isFrozen(object)) {\\n return object;\\n }\\n const result = {};\\n for (const key in object) {\\n const value = object[key];\\n if (value === undefined) {\\n continue;\\n }\\n defineReadOnly(result, key, deepCopy(value));\\n }\\n return result;\\n }\\n // The function type is also immutable, so safe to copy by assignment\\n if (typeof (object) === \\\"function\\\") {\\n return object;\\n }\\n logger.throwArgumentError(`Cannot deepCopy ${typeof (object)}`, \\\"object\\\", object);\\n}\\nfunction deepCopy(object) {\\n return _deepCopy(object);\\n}\\nclass Description {\\n constructor(info) {\\n for (const key in info) {\\n this[key] = deepCopy(info[key]);\\n }\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/properties/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/random/lib/_version.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/@ethersproject/random/lib/_version.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nexports.version = \\\"random/5.0.0-beta.134\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/random/lib/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/random/lib/browser.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/@ethersproject/random/lib/browser.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(global) {\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar bytes_1 = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\nvar logger_1 = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\nvar _version_1 = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/random/lib/_version.js\\\");\\nvar logger = new logger_1.Logger(_version_1.version);\\nvar shuffle_1 = __webpack_require__(/*! ./shuffle */ \\\"./node_modules/@ethersproject/random/lib/shuffle.js\\\");\\nexports.shuffled = shuffle_1.shuffled;\\nvar crypto = global.crypto || global.msCrypto;\\nif (!crypto || !crypto.getRandomValues) {\\n logger.warn(\\\"WARNING: Missing strong random number source\\\");\\n crypto = {\\n getRandomValues: function (buffer) {\\n return logger.throwError(\\\"no secure random source avaialble\\\", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"crypto.getRandomValues\\\"\\n });\\n }\\n };\\n}\\nfunction randomBytes(length) {\\n if (length <= 0 || length > 1024 || parseInt(String(length)) != length) {\\n logger.throwArgumentError(\\\"invalid length\\\", \\\"length\\\", length);\\n }\\n var result = new Uint8Array(length);\\n crypto.getRandomValues(result);\\n return bytes_1.arrayify(result);\\n}\\nexports.randomBytes = randomBytes;\\n;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/random/lib/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/random/lib/shuffle.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/@ethersproject/random/lib/shuffle.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nfunction shuffled(array) {\\n array = array.slice();\\n for (var i = array.length - 1; i > 0; i--) {\\n var j = Math.floor(Math.random() * (i + 1));\\n var tmp = array[i];\\n array[i] = array[j];\\n array[j] = tmp;\\n }\\n return array;\\n}\\nexports.shuffled = shuffled;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/random/lib/shuffle.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/rlp/lib.esm/index.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/@ethersproject/rlp/lib.esm/index.js ***!\n \\**********************************************************/\n/*! exports provided: encode, decode */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"encode\\\", function() { return encode; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decode\\\", function() { return decode; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n\\n//See: https://github.com/ethereum/wiki/wiki/RLP\\n\\nfunction arrayifyInteger(value) {\\n const result = [];\\n while (value) {\\n result.unshift(value & 0xff);\\n value >>= 8;\\n }\\n return result;\\n}\\nfunction unarrayifyInteger(data, offset, length) {\\n let result = 0;\\n for (let i = 0; i < length; i++) {\\n result = (result * 256) + data[offset + i];\\n }\\n return result;\\n}\\nfunction _encode(object) {\\n if (Array.isArray(object)) {\\n let payload = [];\\n object.forEach(function (child) {\\n payload = payload.concat(_encode(child));\\n });\\n if (payload.length <= 55) {\\n payload.unshift(0xc0 + payload.length);\\n return payload;\\n }\\n const length = arrayifyInteger(payload.length);\\n length.unshift(0xf7 + length.length);\\n return length.concat(payload);\\n }\\n const data = Array.prototype.slice.call(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(object));\\n if (data.length === 1 && data[0] <= 0x7f) {\\n return data;\\n }\\n else if (data.length <= 55) {\\n data.unshift(0x80 + data.length);\\n return data;\\n }\\n const length = arrayifyInteger(data.length);\\n length.unshift(0xb7 + length.length);\\n return length.concat(data);\\n}\\nfunction encode(object) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(_encode(object));\\n}\\nfunction _decodeChildren(data, offset, childOffset, length) {\\n const result = [];\\n while (childOffset < offset + 1 + length) {\\n const decoded = _decode(data, childOffset);\\n result.push(decoded.result);\\n childOffset += decoded.consumed;\\n if (childOffset > offset + 1 + length) {\\n throw new Error(\\\"invalid rlp\\\");\\n }\\n }\\n return { consumed: (1 + length), result: result };\\n}\\n// returns { consumed: number, result: Object }\\nfunction _decode(data, offset) {\\n if (data.length === 0) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n // Array with extra length prefix\\n if (data[offset] >= 0xf8) {\\n const lengthLength = data[offset] - 0xf7;\\n if (offset + 1 + lengthLength > data.length) {\\n throw new Error(\\\"too short\\\");\\n }\\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\\n if (offset + 1 + lengthLength + length > data.length) {\\n throw new Error(\\\"to short\\\");\\n }\\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\\n }\\n else if (data[offset] >= 0xc0) {\\n const length = data[offset] - 0xc0;\\n if (offset + 1 + length > data.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n return _decodeChildren(data, offset, offset + 1, length);\\n }\\n else if (data[offset] >= 0xb8) {\\n const lengthLength = data[offset] - 0xb7;\\n if (offset + 1 + lengthLength > data.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\\n if (offset + 1 + lengthLength + length > data.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n const result = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\\n return { consumed: (1 + lengthLength + length), result: result };\\n }\\n else if (data[offset] >= 0x80) {\\n const length = data[offset] - 0x80;\\n if (offset + 1 + length > data.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n const result = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(data.slice(offset + 1, offset + 1 + length));\\n return { consumed: (1 + length), result: result };\\n }\\n return { consumed: 1, result: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(data[offset]) };\\n}\\nfunction decode(data) {\\n const bytes = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(data);\\n const decoded = _decode(bytes, 0);\\n if (decoded.consumed !== bytes.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n return decoded.result;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/rlp/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/lib/_version.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/lib/_version.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nexports.version = \\\"sha2/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/lib/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/lib/browser.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/lib/browser.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __importStar = (this && this.__importStar) || function (mod) {\\n if (mod && mod.__esModule) return mod;\\n var result = {};\\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\\n result[\\\"default\\\"] = mod;\\n return result;\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar hash = __importStar(__webpack_require__(/*! hash.js */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash.js\\\"));\\nvar bytes_1 = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\nvar logger_1 = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\nvar _version_1 = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/sha2/lib/_version.js\\\");\\nvar logger = new logger_1.Logger(_version_1.version);\\nvar SupportedAlgorithm;\\n(function (SupportedAlgorithm) {\\n SupportedAlgorithm[\\\"sha256\\\"] = \\\"sha256\\\";\\n SupportedAlgorithm[\\\"sha512\\\"] = \\\"sha512\\\";\\n})(SupportedAlgorithm = exports.SupportedAlgorithm || (exports.SupportedAlgorithm = {}));\\n;\\nfunction ripemd160(data) {\\n return \\\"0x\\\" + (hash.ripemd160().update(bytes_1.arrayify(data)).digest(\\\"hex\\\"));\\n}\\nexports.ripemd160 = ripemd160;\\nfunction sha256(data) {\\n return \\\"0x\\\" + (hash.sha256().update(bytes_1.arrayify(data)).digest(\\\"hex\\\"));\\n}\\nexports.sha256 = sha256;\\nfunction sha512(data) {\\n return \\\"0x\\\" + (hash.sha512().update(bytes_1.arrayify(data)).digest(\\\"hex\\\"));\\n}\\nexports.sha512 = sha512;\\nfunction computeHmac(algorithm, key, data) {\\n if (!SupportedAlgorithm[algorithm]) {\\n logger.throwError(\\\"unsupported algorithm \\\" + algorithm, logger_1.Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"hmac\\\",\\n algorithm: algorithm\\n });\\n }\\n return \\\"0x\\\" + hash.hmac(hash[algorithm], bytes_1.arrayify(key)).update(bytes_1.arrayify(data)).digest(\\\"hex\\\");\\n}\\nexports.computeHmac = computeHmac;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/lib/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var hash = exports;\\n\\nhash.utils = __webpack_require__(/*! ./hash/utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nhash.common = __webpack_require__(/*! ./hash/common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\nhash.sha = __webpack_require__(/*! ./hash/sha */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha.js\\\");\\nhash.ripemd = __webpack_require__(/*! ./hash/ripemd */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/ripemd.js\\\");\\nhash.hmac = __webpack_require__(/*! ./hash/hmac */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/hmac.js\\\");\\n\\n// Proxy hash functions to the main object\\nhash.sha1 = hash.sha.sha1;\\nhash.sha256 = hash.sha.sha256;\\nhash.sha224 = hash.sha.sha224;\\nhash.sha384 = hash.sha.sha384;\\nhash.sha512 = hash.sha.sha512;\\nhash.ripemd160 = hash.ripemd.ripemd160;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\":\n/*!**********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js ***!\n \\**********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction BlockHash() {\\n this.pending = null;\\n this.pendingTotal = 0;\\n this.blockSize = this.constructor.blockSize;\\n this.outSize = this.constructor.outSize;\\n this.hmacStrength = this.constructor.hmacStrength;\\n this.padLength = this.constructor.padLength / 8;\\n this.endian = 'big';\\n\\n this._delta8 = this.blockSize / 8;\\n this._delta32 = this.blockSize / 32;\\n}\\nexports.BlockHash = BlockHash;\\n\\nBlockHash.prototype.update = function update(msg, enc) {\\n // Convert message to array, pad it, and join into 32bit blocks\\n msg = utils.toArray(msg, enc);\\n if (!this.pending)\\n this.pending = msg;\\n else\\n this.pending = this.pending.concat(msg);\\n this.pendingTotal += msg.length;\\n\\n // Enough data, try updating\\n if (this.pending.length >= this._delta8) {\\n msg = this.pending;\\n\\n // Process pending data in blocks\\n var r = msg.length % this._delta8;\\n this.pending = msg.slice(msg.length - r, msg.length);\\n if (this.pending.length === 0)\\n this.pending = null;\\n\\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\\n for (var i = 0; i < msg.length; i += this._delta32)\\n this._update(msg, i, i + this._delta32);\\n }\\n\\n return this;\\n};\\n\\nBlockHash.prototype.digest = function digest(enc) {\\n this.update(this._pad());\\n assert(this.pending === null);\\n\\n return this._digest(enc);\\n};\\n\\nBlockHash.prototype._pad = function pad() {\\n var len = this.pendingTotal;\\n var bytes = this._delta8;\\n var k = bytes - ((len + this.padLength) % bytes);\\n var res = new Array(k + this.padLength);\\n res[0] = 0x80;\\n for (var i = 1; i < k; i++)\\n res[i] = 0;\\n\\n // Append length\\n len <<= 3;\\n if (this.endian === 'big') {\\n for (var t = 8; t < this.padLength; t++)\\n res[i++] = 0;\\n\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = (len >>> 24) & 0xff;\\n res[i++] = (len >>> 16) & 0xff;\\n res[i++] = (len >>> 8) & 0xff;\\n res[i++] = len & 0xff;\\n } else {\\n res[i++] = len & 0xff;\\n res[i++] = (len >>> 8) & 0xff;\\n res[i++] = (len >>> 16) & 0xff;\\n res[i++] = (len >>> 24) & 0xff;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n\\n for (t = 8; t < this.padLength; t++)\\n res[i++] = 0;\\n }\\n\\n return res;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/hmac.js\":\n/*!********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/hmac.js ***!\n \\********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction Hmac(hash, key, enc) {\\n if (!(this instanceof Hmac))\\n return new Hmac(hash, key, enc);\\n this.Hash = hash;\\n this.blockSize = hash.blockSize / 8;\\n this.outSize = hash.outSize / 8;\\n this.inner = null;\\n this.outer = null;\\n\\n this._init(utils.toArray(key, enc));\\n}\\nmodule.exports = Hmac;\\n\\nHmac.prototype._init = function init(key) {\\n // Shorten key, if needed\\n if (key.length > this.blockSize)\\n key = new this.Hash().update(key).digest();\\n assert(key.length <= this.blockSize);\\n\\n // Add padding to key\\n for (var i = key.length; i < this.blockSize; i++)\\n key.push(0);\\n\\n for (i = 0; i < key.length; i++)\\n key[i] ^= 0x36;\\n this.inner = new this.Hash().update(key);\\n\\n // 0x36 ^ 0x5c = 0x6a\\n for (i = 0; i < key.length; i++)\\n key[i] ^= 0x6a;\\n this.outer = new this.Hash().update(key);\\n};\\n\\nHmac.prototype.update = function update(msg, enc) {\\n this.inner.update(msg, enc);\\n return this;\\n};\\n\\nHmac.prototype.digest = function digest(enc) {\\n this.outer.update(this.inner.digest());\\n return this.outer.digest(enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/hmac.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/ripemd.js\":\n/*!**********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/ripemd.js ***!\n \\**********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ./common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\n\\nvar rotl32 = utils.rotl32;\\nvar sum32 = utils.sum32;\\nvar sum32_3 = utils.sum32_3;\\nvar sum32_4 = utils.sum32_4;\\nvar BlockHash = common.BlockHash;\\n\\nfunction RIPEMD160() {\\n if (!(this instanceof RIPEMD160))\\n return new RIPEMD160();\\n\\n BlockHash.call(this);\\n\\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\\n this.endian = 'little';\\n}\\nutils.inherits(RIPEMD160, BlockHash);\\nexports.ripemd160 = RIPEMD160;\\n\\nRIPEMD160.blockSize = 512;\\nRIPEMD160.outSize = 160;\\nRIPEMD160.hmacStrength = 192;\\nRIPEMD160.padLength = 64;\\n\\nRIPEMD160.prototype._update = function update(msg, start) {\\n var A = this.h[0];\\n var B = this.h[1];\\n var C = this.h[2];\\n var D = this.h[3];\\n var E = this.h[4];\\n var Ah = A;\\n var Bh = B;\\n var Ch = C;\\n var Dh = D;\\n var Eh = E;\\n for (var j = 0; j < 80; j++) {\\n var T = sum32(\\n rotl32(\\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\\n s[j]),\\n E);\\n A = E;\\n E = D;\\n D = rotl32(C, 10);\\n C = B;\\n B = T;\\n T = sum32(\\n rotl32(\\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\\n sh[j]),\\n Eh);\\n Ah = Eh;\\n Eh = Dh;\\n Dh = rotl32(Ch, 10);\\n Ch = Bh;\\n Bh = T;\\n }\\n T = sum32_3(this.h[1], C, Dh);\\n this.h[1] = sum32_3(this.h[2], D, Eh);\\n this.h[2] = sum32_3(this.h[3], E, Ah);\\n this.h[3] = sum32_3(this.h[4], A, Bh);\\n this.h[4] = sum32_3(this.h[0], B, Ch);\\n this.h[0] = T;\\n};\\n\\nRIPEMD160.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'little');\\n else\\n return utils.split32(this.h, 'little');\\n};\\n\\nfunction f(j, x, y, z) {\\n if (j <= 15)\\n return x ^ y ^ z;\\n else if (j <= 31)\\n return (x & y) | ((~x) & z);\\n else if (j <= 47)\\n return (x | (~y)) ^ z;\\n else if (j <= 63)\\n return (x & z) | (y & (~z));\\n else\\n return x ^ (y | (~z));\\n}\\n\\nfunction K(j) {\\n if (j <= 15)\\n return 0x00000000;\\n else if (j <= 31)\\n return 0x5a827999;\\n else if (j <= 47)\\n return 0x6ed9eba1;\\n else if (j <= 63)\\n return 0x8f1bbcdc;\\n else\\n return 0xa953fd4e;\\n}\\n\\nfunction Kh(j) {\\n if (j <= 15)\\n return 0x50a28be6;\\n else if (j <= 31)\\n return 0x5c4dd124;\\n else if (j <= 47)\\n return 0x6d703ef3;\\n else if (j <= 63)\\n return 0x7a6d76e9;\\n else\\n return 0x00000000;\\n}\\n\\nvar r = [\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\\n];\\n\\nvar rh = [\\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\\n];\\n\\nvar s = [\\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\\n];\\n\\nvar sh = [\\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\\n];\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/ripemd.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.sha1 = __webpack_require__(/*! ./sha/1 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/1.js\\\");\\nexports.sha224 = __webpack_require__(/*! ./sha/224 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/224.js\\\");\\nexports.sha256 = __webpack_require__(/*! ./sha/256 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js\\\");\\nexports.sha384 = __webpack_require__(/*! ./sha/384 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/384.js\\\");\\nexports.sha512 = __webpack_require__(/*! ./sha/512 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/1.js\":\n/*!*********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/1.js ***!\n \\*********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\nvar shaCommon = __webpack_require__(/*! ./common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js\\\");\\n\\nvar rotl32 = utils.rotl32;\\nvar sum32 = utils.sum32;\\nvar sum32_5 = utils.sum32_5;\\nvar ft_1 = shaCommon.ft_1;\\nvar BlockHash = common.BlockHash;\\n\\nvar sha1_K = [\\n 0x5A827999, 0x6ED9EBA1,\\n 0x8F1BBCDC, 0xCA62C1D6\\n];\\n\\nfunction SHA1() {\\n if (!(this instanceof SHA1))\\n return new SHA1();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x67452301, 0xefcdab89, 0x98badcfe,\\n 0x10325476, 0xc3d2e1f0 ];\\n this.W = new Array(80);\\n}\\n\\nutils.inherits(SHA1, BlockHash);\\nmodule.exports = SHA1;\\n\\nSHA1.blockSize = 512;\\nSHA1.outSize = 160;\\nSHA1.hmacStrength = 80;\\nSHA1.padLength = 64;\\n\\nSHA1.prototype._update = function _update(msg, start) {\\n var W = this.W;\\n\\n for (var i = 0; i < 16; i++)\\n W[i] = msg[start + i];\\n\\n for(; i < W.length; i++)\\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\\n\\n var a = this.h[0];\\n var b = this.h[1];\\n var c = this.h[2];\\n var d = this.h[3];\\n var e = this.h[4];\\n\\n for (i = 0; i < W.length; i++) {\\n var s = ~~(i / 20);\\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\\n e = d;\\n d = c;\\n c = rotl32(b, 30);\\n b = a;\\n a = t;\\n }\\n\\n this.h[0] = sum32(this.h[0], a);\\n this.h[1] = sum32(this.h[1], b);\\n this.h[2] = sum32(this.h[2], c);\\n this.h[3] = sum32(this.h[3], d);\\n this.h[4] = sum32(this.h[4], e);\\n};\\n\\nSHA1.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/1.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/224.js\":\n/*!***********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/224.js ***!\n \\***********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar SHA256 = __webpack_require__(/*! ./256 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js\\\");\\n\\nfunction SHA224() {\\n if (!(this instanceof SHA224))\\n return new SHA224();\\n\\n SHA256.call(this);\\n this.h = [\\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\\n}\\nutils.inherits(SHA224, SHA256);\\nmodule.exports = SHA224;\\n\\nSHA224.blockSize = 512;\\nSHA224.outSize = 224;\\nSHA224.hmacStrength = 192;\\nSHA224.padLength = 64;\\n\\nSHA224.prototype._digest = function digest(enc) {\\n // Just truncate output\\n if (enc === 'hex')\\n return utils.toHex32(this.h.slice(0, 7), 'big');\\n else\\n return utils.split32(this.h.slice(0, 7), 'big');\\n};\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/224.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js\":\n/*!***********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js ***!\n \\***********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\nvar shaCommon = __webpack_require__(/*! ./common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nvar sum32 = utils.sum32;\\nvar sum32_4 = utils.sum32_4;\\nvar sum32_5 = utils.sum32_5;\\nvar ch32 = shaCommon.ch32;\\nvar maj32 = shaCommon.maj32;\\nvar s0_256 = shaCommon.s0_256;\\nvar s1_256 = shaCommon.s1_256;\\nvar g0_256 = shaCommon.g0_256;\\nvar g1_256 = shaCommon.g1_256;\\n\\nvar BlockHash = common.BlockHash;\\n\\nvar sha256_K = [\\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\\n];\\n\\nfunction SHA256() {\\n if (!(this instanceof SHA256))\\n return new SHA256();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\\n ];\\n this.k = sha256_K;\\n this.W = new Array(64);\\n}\\nutils.inherits(SHA256, BlockHash);\\nmodule.exports = SHA256;\\n\\nSHA256.blockSize = 512;\\nSHA256.outSize = 256;\\nSHA256.hmacStrength = 192;\\nSHA256.padLength = 64;\\n\\nSHA256.prototype._update = function _update(msg, start) {\\n var W = this.W;\\n\\n for (var i = 0; i < 16; i++)\\n W[i] = msg[start + i];\\n for (; i < W.length; i++)\\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\\n\\n var a = this.h[0];\\n var b = this.h[1];\\n var c = this.h[2];\\n var d = this.h[3];\\n var e = this.h[4];\\n var f = this.h[5];\\n var g = this.h[6];\\n var h = this.h[7];\\n\\n assert(this.k.length === W.length);\\n for (i = 0; i < W.length; i++) {\\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\\n var T2 = sum32(s0_256(a), maj32(a, b, c));\\n h = g;\\n g = f;\\n f = e;\\n e = sum32(d, T1);\\n d = c;\\n c = b;\\n b = a;\\n a = sum32(T1, T2);\\n }\\n\\n this.h[0] = sum32(this.h[0], a);\\n this.h[1] = sum32(this.h[1], b);\\n this.h[2] = sum32(this.h[2], c);\\n this.h[3] = sum32(this.h[3], d);\\n this.h[4] = sum32(this.h[4], e);\\n this.h[5] = sum32(this.h[5], f);\\n this.h[6] = sum32(this.h[6], g);\\n this.h[7] = sum32(this.h[7], h);\\n};\\n\\nSHA256.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/384.js\":\n/*!***********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/384.js ***!\n \\***********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\n\\nvar SHA512 = __webpack_require__(/*! ./512 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js\\\");\\n\\nfunction SHA384() {\\n if (!(this instanceof SHA384))\\n return new SHA384();\\n\\n SHA512.call(this);\\n this.h = [\\n 0xcbbb9d5d, 0xc1059ed8,\\n 0x629a292a, 0x367cd507,\\n 0x9159015a, 0x3070dd17,\\n 0x152fecd8, 0xf70e5939,\\n 0x67332667, 0xffc00b31,\\n 0x8eb44a87, 0x68581511,\\n 0xdb0c2e0d, 0x64f98fa7,\\n 0x47b5481d, 0xbefa4fa4 ];\\n}\\nutils.inherits(SHA384, SHA512);\\nmodule.exports = SHA384;\\n\\nSHA384.blockSize = 1024;\\nSHA384.outSize = 384;\\nSHA384.hmacStrength = 192;\\nSHA384.padLength = 128;\\n\\nSHA384.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h.slice(0, 12), 'big');\\n else\\n return utils.split32(this.h.slice(0, 12), 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/384.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js\":\n/*!***********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js ***!\n \\***********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nvar rotr64_hi = utils.rotr64_hi;\\nvar rotr64_lo = utils.rotr64_lo;\\nvar shr64_hi = utils.shr64_hi;\\nvar shr64_lo = utils.shr64_lo;\\nvar sum64 = utils.sum64;\\nvar sum64_hi = utils.sum64_hi;\\nvar sum64_lo = utils.sum64_lo;\\nvar sum64_4_hi = utils.sum64_4_hi;\\nvar sum64_4_lo = utils.sum64_4_lo;\\nvar sum64_5_hi = utils.sum64_5_hi;\\nvar sum64_5_lo = utils.sum64_5_lo;\\n\\nvar BlockHash = common.BlockHash;\\n\\nvar sha512_K = [\\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\\n];\\n\\nfunction SHA512() {\\n if (!(this instanceof SHA512))\\n return new SHA512();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x6a09e667, 0xf3bcc908,\\n 0xbb67ae85, 0x84caa73b,\\n 0x3c6ef372, 0xfe94f82b,\\n 0xa54ff53a, 0x5f1d36f1,\\n 0x510e527f, 0xade682d1,\\n 0x9b05688c, 0x2b3e6c1f,\\n 0x1f83d9ab, 0xfb41bd6b,\\n 0x5be0cd19, 0x137e2179 ];\\n this.k = sha512_K;\\n this.W = new Array(160);\\n}\\nutils.inherits(SHA512, BlockHash);\\nmodule.exports = SHA512;\\n\\nSHA512.blockSize = 1024;\\nSHA512.outSize = 512;\\nSHA512.hmacStrength = 192;\\nSHA512.padLength = 128;\\n\\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\\n var W = this.W;\\n\\n // 32 x 32bit words\\n for (var i = 0; i < 32; i++)\\n W[i] = msg[start + i];\\n for (; i < W.length; i += 2) {\\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\\n var c1_hi = W[i - 14]; // i - 7\\n var c1_lo = W[i - 13];\\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\\n var c3_hi = W[i - 32]; // i - 16\\n var c3_lo = W[i - 31];\\n\\n W[i] = sum64_4_hi(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo);\\n W[i + 1] = sum64_4_lo(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo);\\n }\\n};\\n\\nSHA512.prototype._update = function _update(msg, start) {\\n this._prepareBlock(msg, start);\\n\\n var W = this.W;\\n\\n var ah = this.h[0];\\n var al = this.h[1];\\n var bh = this.h[2];\\n var bl = this.h[3];\\n var ch = this.h[4];\\n var cl = this.h[5];\\n var dh = this.h[6];\\n var dl = this.h[7];\\n var eh = this.h[8];\\n var el = this.h[9];\\n var fh = this.h[10];\\n var fl = this.h[11];\\n var gh = this.h[12];\\n var gl = this.h[13];\\n var hh = this.h[14];\\n var hl = this.h[15];\\n\\n assert(this.k.length === W.length);\\n for (var i = 0; i < W.length; i += 2) {\\n var c0_hi = hh;\\n var c0_lo = hl;\\n var c1_hi = s1_512_hi(eh, el);\\n var c1_lo = s1_512_lo(eh, el);\\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\\n var c3_hi = this.k[i];\\n var c3_lo = this.k[i + 1];\\n var c4_hi = W[i];\\n var c4_lo = W[i + 1];\\n\\n var T1_hi = sum64_5_hi(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo,\\n c4_hi, c4_lo);\\n var T1_lo = sum64_5_lo(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo,\\n c4_hi, c4_lo);\\n\\n c0_hi = s0_512_hi(ah, al);\\n c0_lo = s0_512_lo(ah, al);\\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\\n\\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\\n\\n hh = gh;\\n hl = gl;\\n\\n gh = fh;\\n gl = fl;\\n\\n fh = eh;\\n fl = el;\\n\\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\\n\\n dh = ch;\\n dl = cl;\\n\\n ch = bh;\\n cl = bl;\\n\\n bh = ah;\\n bl = al;\\n\\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\\n }\\n\\n sum64(this.h, 0, ah, al);\\n sum64(this.h, 2, bh, bl);\\n sum64(this.h, 4, ch, cl);\\n sum64(this.h, 6, dh, dl);\\n sum64(this.h, 8, eh, el);\\n sum64(this.h, 10, fh, fl);\\n sum64(this.h, 12, gh, gl);\\n sum64(this.h, 14, hh, hl);\\n};\\n\\nSHA512.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\nfunction ch64_hi(xh, xl, yh, yl, zh) {\\n var r = (xh & yh) ^ ((~xh) & zh);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\\n var r = (xl & yl) ^ ((~xl) & zl);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction maj64_hi(xh, xl, yh, yl, zh) {\\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s0_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 28);\\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s0_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 28);\\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s1_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 14);\\n var c1_hi = rotr64_hi(xh, xl, 18);\\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s1_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 14);\\n var c1_lo = rotr64_lo(xh, xl, 18);\\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g0_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 1);\\n var c1_hi = rotr64_hi(xh, xl, 8);\\n var c2_hi = shr64_hi(xh, xl, 7);\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g0_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 1);\\n var c1_lo = rotr64_lo(xh, xl, 8);\\n var c2_lo = shr64_lo(xh, xl, 7);\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g1_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 19);\\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\\n var c2_hi = shr64_hi(xh, xl, 6);\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g1_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 19);\\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\\n var c2_lo = shr64_lo(xh, xl, 6);\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js\":\n/*!**************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js ***!\n \\**************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar rotr32 = utils.rotr32;\\n\\nfunction ft_1(s, x, y, z) {\\n if (s === 0)\\n return ch32(x, y, z);\\n if (s === 1 || s === 3)\\n return p32(x, y, z);\\n if (s === 2)\\n return maj32(x, y, z);\\n}\\nexports.ft_1 = ft_1;\\n\\nfunction ch32(x, y, z) {\\n return (x & y) ^ ((~x) & z);\\n}\\nexports.ch32 = ch32;\\n\\nfunction maj32(x, y, z) {\\n return (x & y) ^ (x & z) ^ (y & z);\\n}\\nexports.maj32 = maj32;\\n\\nfunction p32(x, y, z) {\\n return x ^ y ^ z;\\n}\\nexports.p32 = p32;\\n\\nfunction s0_256(x) {\\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\\n}\\nexports.s0_256 = s0_256;\\n\\nfunction s1_256(x) {\\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\\n}\\nexports.s1_256 = s1_256;\\n\\nfunction g0_256(x) {\\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\\n}\\nexports.g0_256 = g0_256;\\n\\nfunction g1_256(x) {\\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\\n}\\nexports.g1_256 = g1_256;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\":\n/*!*********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js ***!\n \\*********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\n\\nexports.inherits = inherits;\\n\\nfunction toArray(msg, enc) {\\n if (Array.isArray(msg))\\n return msg.slice();\\n if (!msg)\\n return [];\\n var res = [];\\n if (typeof msg === 'string') {\\n if (!enc) {\\n for (var i = 0; i < msg.length; i++) {\\n var c = msg.charCodeAt(i);\\n var hi = c >> 8;\\n var lo = c & 0xff;\\n if (hi)\\n res.push(hi, lo);\\n else\\n res.push(lo);\\n }\\n } else if (enc === 'hex') {\\n msg = msg.replace(/[^a-z0-9]+/ig, '');\\n if (msg.length % 2 !== 0)\\n msg = '0' + msg;\\n for (i = 0; i < msg.length; i += 2)\\n res.push(parseInt(msg[i] + msg[i + 1], 16));\\n }\\n } else {\\n for (i = 0; i < msg.length; i++)\\n res[i] = msg[i] | 0;\\n }\\n return res;\\n}\\nexports.toArray = toArray;\\n\\nfunction toHex(msg) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++)\\n res += zero2(msg[i].toString(16));\\n return res;\\n}\\nexports.toHex = toHex;\\n\\nfunction htonl(w) {\\n var res = (w >>> 24) |\\n ((w >>> 8) & 0xff00) |\\n ((w << 8) & 0xff0000) |\\n ((w & 0xff) << 24);\\n return res >>> 0;\\n}\\nexports.htonl = htonl;\\n\\nfunction toHex32(msg, endian) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++) {\\n var w = msg[i];\\n if (endian === 'little')\\n w = htonl(w);\\n res += zero8(w.toString(16));\\n }\\n return res;\\n}\\nexports.toHex32 = toHex32;\\n\\nfunction zero2(word) {\\n if (word.length === 1)\\n return '0' + word;\\n else\\n return word;\\n}\\nexports.zero2 = zero2;\\n\\nfunction zero8(word) {\\n if (word.length === 7)\\n return '0' + word;\\n else if (word.length === 6)\\n return '00' + word;\\n else if (word.length === 5)\\n return '000' + word;\\n else if (word.length === 4)\\n return '0000' + word;\\n else if (word.length === 3)\\n return '00000' + word;\\n else if (word.length === 2)\\n return '000000' + word;\\n else if (word.length === 1)\\n return '0000000' + word;\\n else\\n return word;\\n}\\nexports.zero8 = zero8;\\n\\nfunction join32(msg, start, end, endian) {\\n var len = end - start;\\n assert(len % 4 === 0);\\n var res = new Array(len / 4);\\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\\n var w;\\n if (endian === 'big')\\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\\n else\\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\\n res[i] = w >>> 0;\\n }\\n return res;\\n}\\nexports.join32 = join32;\\n\\nfunction split32(msg, endian) {\\n var res = new Array(msg.length * 4);\\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\\n var m = msg[i];\\n if (endian === 'big') {\\n res[k] = m >>> 24;\\n res[k + 1] = (m >>> 16) & 0xff;\\n res[k + 2] = (m >>> 8) & 0xff;\\n res[k + 3] = m & 0xff;\\n } else {\\n res[k + 3] = m >>> 24;\\n res[k + 2] = (m >>> 16) & 0xff;\\n res[k + 1] = (m >>> 8) & 0xff;\\n res[k] = m & 0xff;\\n }\\n }\\n return res;\\n}\\nexports.split32 = split32;\\n\\nfunction rotr32(w, b) {\\n return (w >>> b) | (w << (32 - b));\\n}\\nexports.rotr32 = rotr32;\\n\\nfunction rotl32(w, b) {\\n return (w << b) | (w >>> (32 - b));\\n}\\nexports.rotl32 = rotl32;\\n\\nfunction sum32(a, b) {\\n return (a + b) >>> 0;\\n}\\nexports.sum32 = sum32;\\n\\nfunction sum32_3(a, b, c) {\\n return (a + b + c) >>> 0;\\n}\\nexports.sum32_3 = sum32_3;\\n\\nfunction sum32_4(a, b, c, d) {\\n return (a + b + c + d) >>> 0;\\n}\\nexports.sum32_4 = sum32_4;\\n\\nfunction sum32_5(a, b, c, d, e) {\\n return (a + b + c + d + e) >>> 0;\\n}\\nexports.sum32_5 = sum32_5;\\n\\nfunction sum64(buf, pos, ah, al) {\\n var bh = buf[pos];\\n var bl = buf[pos + 1];\\n\\n var lo = (al + bl) >>> 0;\\n var hi = (lo < al ? 1 : 0) + ah + bh;\\n buf[pos] = hi >>> 0;\\n buf[pos + 1] = lo;\\n}\\nexports.sum64 = sum64;\\n\\nfunction sum64_hi(ah, al, bh, bl) {\\n var lo = (al + bl) >>> 0;\\n var hi = (lo < al ? 1 : 0) + ah + bh;\\n return hi >>> 0;\\n}\\nexports.sum64_hi = sum64_hi;\\n\\nfunction sum64_lo(ah, al, bh, bl) {\\n var lo = al + bl;\\n return lo >>> 0;\\n}\\nexports.sum64_lo = sum64_lo;\\n\\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\\n var carry = 0;\\n var lo = al;\\n lo = (lo + bl) >>> 0;\\n carry += lo < al ? 1 : 0;\\n lo = (lo + cl) >>> 0;\\n carry += lo < cl ? 1 : 0;\\n lo = (lo + dl) >>> 0;\\n carry += lo < dl ? 1 : 0;\\n\\n var hi = ah + bh + ch + dh + carry;\\n return hi >>> 0;\\n}\\nexports.sum64_4_hi = sum64_4_hi;\\n\\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\\n var lo = al + bl + cl + dl;\\n return lo >>> 0;\\n}\\nexports.sum64_4_lo = sum64_4_lo;\\n\\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\\n var carry = 0;\\n var lo = al;\\n lo = (lo + bl) >>> 0;\\n carry += lo < al ? 1 : 0;\\n lo = (lo + cl) >>> 0;\\n carry += lo < cl ? 1 : 0;\\n lo = (lo + dl) >>> 0;\\n carry += lo < dl ? 1 : 0;\\n lo = (lo + el) >>> 0;\\n carry += lo < el ? 1 : 0;\\n\\n var hi = ah + bh + ch + dh + eh + carry;\\n return hi >>> 0;\\n}\\nexports.sum64_5_hi = sum64_5_hi;\\n\\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\\n var lo = al + bl + cl + dl + el;\\n\\n return lo >>> 0;\\n}\\nexports.sum64_5_lo = sum64_5_lo;\\n\\nfunction rotr64_hi(ah, al, num) {\\n var r = (al << (32 - num)) | (ah >>> num);\\n return r >>> 0;\\n}\\nexports.rotr64_hi = rotr64_hi;\\n\\nfunction rotr64_lo(ah, al, num) {\\n var r = (ah << (32 - num)) | (al >>> num);\\n return r >>> 0;\\n}\\nexports.rotr64_lo = rotr64_lo;\\n\\nfunction shr64_hi(ah, al, num) {\\n return ah >>> num;\\n}\\nexports.shr64_hi = shr64_hi;\\n\\nfunction shr64_lo(ah, al, num) {\\n var r = (ah << (32 - num)) | (al >>> num);\\n return r >>> 0;\\n}\\nexports.shr64_lo = shr64_lo;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/lib.esm/_version.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/lib.esm/_version.js ***!\n \\*********************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"signing-key/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/lib.esm/index.js\":\n/*!******************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/lib.esm/index.js ***!\n \\******************************************************************/\n/*! exports provided: SigningKey, recoverPublicKey, computePublicKey */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"SigningKey\\\", function() { return SigningKey; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"recoverPublicKey\\\", function() { return recoverPublicKey; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"computePublicKey\\\", function() { return computePublicKey; });\\n/* harmony import */ var elliptic__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! elliptic */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic.js\\\");\\n/* harmony import */ var elliptic__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(elliptic__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/signing-key/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_3__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_4__[\\\"version\\\"]);\\nlet _curve = null;\\nfunction getCurve() {\\n if (!_curve) {\\n _curve = new elliptic__WEBPACK_IMPORTED_MODULE_0__[\\\"ec\\\"](\\\"secp256k1\\\");\\n }\\n return _curve;\\n}\\nclass SigningKey {\\n constructor(privateKey) {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"curve\\\", \\\"secp256k1\\\");\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"privateKey\\\", Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(privateKey));\\n const keyPair = getCurve().keyFromPrivate(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.privateKey));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"publicKey\\\", \\\"0x\\\" + keyPair.getPublic(false, \\\"hex\\\"));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"compressedPublicKey\\\", \\\"0x\\\" + keyPair.getPublic(true, \\\"hex\\\"));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"_isSigningKey\\\", true);\\n }\\n _addPoint(other) {\\n const p0 = getCurve().keyFromPublic(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.publicKey));\\n const p1 = getCurve().keyFromPublic(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(other));\\n return \\\"0x\\\" + p0.pub.add(p1.pub).encodeCompressed(\\\"hex\\\");\\n }\\n signDigest(digest) {\\n const keyPair = getCurve().keyFromPrivate(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.privateKey));\\n const signature = keyPair.sign(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(digest), { canonical: true });\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"splitSignature\\\"])({\\n recoveryParam: signature.recoveryParam,\\n r: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(\\\"0x\\\" + signature.r.toString(16), 32),\\n s: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(\\\"0x\\\" + signature.s.toString(16), 32),\\n });\\n }\\n computeSharedSecret(otherKey) {\\n const keyPair = getCurve().keyFromPrivate(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.privateKey));\\n const otherKeyPair = getCurve().keyFromPublic(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(computePublicKey(otherKey)));\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(\\\"0x\\\" + keyPair.derive(otherKeyPair.getPublic()).toString(16), 32);\\n }\\n static isSigningKey(value) {\\n return !!(value && value._isSigningKey);\\n }\\n}\\nfunction recoverPublicKey(digest, signature) {\\n const sig = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"splitSignature\\\"])(signature);\\n const rs = { r: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(sig.r), s: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(sig.s) };\\n return \\\"0x\\\" + getCurve().recoverPubKey(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(digest), rs, sig.recoveryParam).encode(\\\"hex\\\", false);\\n}\\nfunction computePublicKey(key, compressed) {\\n const bytes = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(key);\\n if (bytes.length === 32) {\\n const signingKey = new SigningKey(bytes);\\n if (compressed) {\\n return \\\"0x\\\" + getCurve().keyFromPrivate(bytes).getPublic(true, \\\"hex\\\");\\n }\\n return signingKey.publicKey;\\n }\\n else if (bytes.length === 33) {\\n if (compressed) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes);\\n }\\n return \\\"0x\\\" + getCurve().keyFromPublic(bytes).getPublic(false, \\\"hex\\\");\\n }\\n else if (bytes.length === 65) {\\n if (!compressed) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes);\\n }\\n return \\\"0x\\\" + getCurve().keyFromPublic(bytes).getPublic(true, \\\"hex\\\");\\n }\\n return logger.throwArgumentError(\\\"invalid public or private key\\\", \\\"key\\\", \\\"[REDACTED]\\\");\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic.js\":\n/*!***************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic.js ***!\n \\***************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar elliptic = exports;\\n\\nelliptic.version = __webpack_require__(/*! ../package.json */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/package.json\\\").version;\\nelliptic.utils = __webpack_require__(/*! ./elliptic/utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nelliptic.rand = __webpack_require__(/*! brorand */ \\\"./node_modules/brorand/index.js\\\");\\nelliptic.curve = __webpack_require__(/*! ./elliptic/curve */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nelliptic.curves = __webpack_require__(/*! ./elliptic/curves */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js\\\");\\n\\n// Protocols\\nelliptic.ec = __webpack_require__(/*! ./elliptic/ec */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/index.js\\\");\\nelliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/index.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\":\n/*!**************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js ***!\n \\**************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar getNAF = utils.getNAF;\\nvar getJSF = utils.getJSF;\\nvar assert = utils.assert;\\n\\nfunction BaseCurve(type, conf) {\\n this.type = type;\\n this.p = new BN(conf.p, 16);\\n\\n // Use Montgomery, when there is no fast reduction for the prime\\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\\n\\n // Useful for many curves\\n this.zero = new BN(0).toRed(this.red);\\n this.one = new BN(1).toRed(this.red);\\n this.two = new BN(2).toRed(this.red);\\n\\n // Curve configuration, optional\\n this.n = conf.n && new BN(conf.n, 16);\\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\\n\\n // Temporary arrays\\n this._wnafT1 = new Array(4);\\n this._wnafT2 = new Array(4);\\n this._wnafT3 = new Array(4);\\n this._wnafT4 = new Array(4);\\n\\n this._bitLength = this.n ? this.n.bitLength() : 0;\\n\\n // Generalized Greg Maxwell's trick\\n var adjustCount = this.n && this.p.div(this.n);\\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\\n this.redN = null;\\n } else {\\n this._maxwellTrick = true;\\n this.redN = this.n.toRed(this.red);\\n }\\n}\\nmodule.exports = BaseCurve;\\n\\nBaseCurve.prototype.point = function point() {\\n throw new Error('Not implemented');\\n};\\n\\nBaseCurve.prototype.validate = function validate() {\\n throw new Error('Not implemented');\\n};\\n\\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\\n assert(p.precomputed);\\n var doubles = p._getDoubles();\\n\\n var naf = getNAF(k, 1, this._bitLength);\\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\\n I /= 3;\\n\\n // Translate into more windowed form\\n var repr = [];\\n for (var j = 0; j < naf.length; j += doubles.step) {\\n var nafW = 0;\\n for (var k = j + doubles.step - 1; k >= j; k--)\\n nafW = (nafW << 1) + naf[k];\\n repr.push(nafW);\\n }\\n\\n var a = this.jpoint(null, null, null);\\n var b = this.jpoint(null, null, null);\\n for (var i = I; i > 0; i--) {\\n for (var j = 0; j < repr.length; j++) {\\n var nafW = repr[j];\\n if (nafW === i)\\n b = b.mixedAdd(doubles.points[j]);\\n else if (nafW === -i)\\n b = b.mixedAdd(doubles.points[j].neg());\\n }\\n a = a.add(b);\\n }\\n return a.toP();\\n};\\n\\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\\n var w = 4;\\n\\n // Precompute window\\n var nafPoints = p._getNAFPoints(w);\\n w = nafPoints.wnd;\\n var wnd = nafPoints.points;\\n\\n // Get NAF form\\n var naf = getNAF(k, w, this._bitLength);\\n\\n // Add `this`*(N+1) for every w-NAF index\\n var acc = this.jpoint(null, null, null);\\n for (var i = naf.length - 1; i >= 0; i--) {\\n // Count zeroes\\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\\n k++;\\n if (i >= 0)\\n k++;\\n acc = acc.dblp(k);\\n\\n if (i < 0)\\n break;\\n var z = naf[i];\\n assert(z !== 0);\\n if (p.type === 'affine') {\\n // J +- P\\n if (z > 0)\\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\\n else\\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\\n } else {\\n // J +- J\\n if (z > 0)\\n acc = acc.add(wnd[(z - 1) >> 1]);\\n else\\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\\n }\\n }\\n return p.type === 'affine' ? acc.toP() : acc;\\n};\\n\\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\\n points,\\n coeffs,\\n len,\\n jacobianResult) {\\n var wndWidth = this._wnafT1;\\n var wnd = this._wnafT2;\\n var naf = this._wnafT3;\\n\\n // Fill all arrays\\n var max = 0;\\n for (var i = 0; i < len; i++) {\\n var p = points[i];\\n var nafPoints = p._getNAFPoints(defW);\\n wndWidth[i] = nafPoints.wnd;\\n wnd[i] = nafPoints.points;\\n }\\n\\n // Comb small window NAFs\\n for (var i = len - 1; i >= 1; i -= 2) {\\n var a = i - 1;\\n var b = i;\\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\\n max = Math.max(naf[a].length, max);\\n max = Math.max(naf[b].length, max);\\n continue;\\n }\\n\\n var comb = [\\n points[a], /* 1 */\\n null, /* 3 */\\n null, /* 5 */\\n points[b] /* 7 */\\n ];\\n\\n // Try to avoid Projective points, if possible\\n if (points[a].y.cmp(points[b].y) === 0) {\\n comb[1] = points[a].add(points[b]);\\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\\n comb[1] = points[a].toJ().mixedAdd(points[b]);\\n comb[2] = points[a].add(points[b].neg());\\n } else {\\n comb[1] = points[a].toJ().mixedAdd(points[b]);\\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\\n }\\n\\n var index = [\\n -3, /* -1 -1 */\\n -1, /* -1 0 */\\n -5, /* -1 1 */\\n -7, /* 0 -1 */\\n 0, /* 0 0 */\\n 7, /* 0 1 */\\n 5, /* 1 -1 */\\n 1, /* 1 0 */\\n 3 /* 1 1 */\\n ];\\n\\n var jsf = getJSF(coeffs[a], coeffs[b]);\\n max = Math.max(jsf[0].length, max);\\n naf[a] = new Array(max);\\n naf[b] = new Array(max);\\n for (var j = 0; j < max; j++) {\\n var ja = jsf[0][j] | 0;\\n var jb = jsf[1][j] | 0;\\n\\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\\n naf[b][j] = 0;\\n wnd[a] = comb;\\n }\\n }\\n\\n var acc = this.jpoint(null, null, null);\\n var tmp = this._wnafT4;\\n for (var i = max; i >= 0; i--) {\\n var k = 0;\\n\\n while (i >= 0) {\\n var zero = true;\\n for (var j = 0; j < len; j++) {\\n tmp[j] = naf[j][i] | 0;\\n if (tmp[j] !== 0)\\n zero = false;\\n }\\n if (!zero)\\n break;\\n k++;\\n i--;\\n }\\n if (i >= 0)\\n k++;\\n acc = acc.dblp(k);\\n if (i < 0)\\n break;\\n\\n for (var j = 0; j < len; j++) {\\n var z = tmp[j];\\n var p;\\n if (z === 0)\\n continue;\\n else if (z > 0)\\n p = wnd[j][(z - 1) >> 1];\\n else if (z < 0)\\n p = wnd[j][(-z - 1) >> 1].neg();\\n\\n if (p.type === 'affine')\\n acc = acc.mixedAdd(p);\\n else\\n acc = acc.add(p);\\n }\\n }\\n // Zeroify references\\n for (var i = 0; i < len; i++)\\n wnd[i] = null;\\n\\n if (jacobianResult)\\n return acc;\\n else\\n return acc.toP();\\n};\\n\\nfunction BasePoint(curve, type) {\\n this.curve = curve;\\n this.type = type;\\n this.precomputed = null;\\n}\\nBaseCurve.BasePoint = BasePoint;\\n\\nBasePoint.prototype.eq = function eq(/*other*/) {\\n throw new Error('Not implemented');\\n};\\n\\nBasePoint.prototype.validate = function validate() {\\n return this.curve.validate(this);\\n};\\n\\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\\n bytes = utils.toArray(bytes, enc);\\n\\n var len = this.p.byteLength();\\n\\n // uncompressed, hybrid-odd, hybrid-even\\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\\n bytes.length - 1 === 2 * len) {\\n if (bytes[0] === 0x06)\\n assert(bytes[bytes.length - 1] % 2 === 0);\\n else if (bytes[0] === 0x07)\\n assert(bytes[bytes.length - 1] % 2 === 1);\\n\\n var res = this.point(bytes.slice(1, 1 + len),\\n bytes.slice(1 + len, 1 + 2 * len));\\n\\n return res;\\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\\n bytes.length - 1 === len) {\\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\\n }\\n throw new Error('Unknown point format');\\n};\\n\\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\\n return this.encode(enc, true);\\n};\\n\\nBasePoint.prototype._encode = function _encode(compact) {\\n var len = this.curve.p.byteLength();\\n var x = this.getX().toArray('be', len);\\n\\n if (compact)\\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\\n\\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\\n};\\n\\nBasePoint.prototype.encode = function encode(enc, compact) {\\n return utils.encode(this._encode(compact), enc);\\n};\\n\\nBasePoint.prototype.precompute = function precompute(power) {\\n if (this.precomputed)\\n return this;\\n\\n var precomputed = {\\n doubles: null,\\n naf: null,\\n beta: null\\n };\\n precomputed.naf = this._getNAFPoints(8);\\n precomputed.doubles = this._getDoubles(4, power);\\n precomputed.beta = this._getBeta();\\n this.precomputed = precomputed;\\n\\n return this;\\n};\\n\\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\\n if (!this.precomputed)\\n return false;\\n\\n var doubles = this.precomputed.doubles;\\n if (!doubles)\\n return false;\\n\\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\\n};\\n\\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\\n if (this.precomputed && this.precomputed.doubles)\\n return this.precomputed.doubles;\\n\\n var doubles = [ this ];\\n var acc = this;\\n for (var i = 0; i < power; i += step) {\\n for (var j = 0; j < step; j++)\\n acc = acc.dbl();\\n doubles.push(acc);\\n }\\n return {\\n step: step,\\n points: doubles\\n };\\n};\\n\\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\\n if (this.precomputed && this.precomputed.naf)\\n return this.precomputed.naf;\\n\\n var res = [ this ];\\n var max = (1 << wnd) - 1;\\n var dbl = max === 1 ? null : this.dbl();\\n for (var i = 1; i < max; i++)\\n res[i] = res[i - 1].add(dbl);\\n return {\\n wnd: wnd,\\n points: res\\n };\\n};\\n\\nBasePoint.prototype._getBeta = function _getBeta() {\\n return null;\\n};\\n\\nBasePoint.prototype.dblp = function dblp(k) {\\n var r = this;\\n for (var i = 0; i < k; i++)\\n r = r.dbl();\\n return r;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/edwards.js\":\n/*!*****************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/edwards.js ***!\n \\*****************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = __webpack_require__(/*! ./base */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\n\\nvar assert = utils.assert;\\n\\nfunction EdwardsCurve(conf) {\\n // NOTE: Important as we are creating point in Base.call()\\n this.twisted = (conf.a | 0) !== 1;\\n this.mOneA = this.twisted && (conf.a | 0) === -1;\\n this.extended = this.mOneA;\\n\\n Base.call(this, 'edwards', conf);\\n\\n this.a = new BN(conf.a, 16).umod(this.red.m);\\n this.a = this.a.toRed(this.red);\\n this.c = new BN(conf.c, 16).toRed(this.red);\\n this.c2 = this.c.redSqr();\\n this.d = new BN(conf.d, 16).toRed(this.red);\\n this.dd = this.d.redAdd(this.d);\\n\\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\\n this.oneC = (conf.c | 0) === 1;\\n}\\ninherits(EdwardsCurve, Base);\\nmodule.exports = EdwardsCurve;\\n\\nEdwardsCurve.prototype._mulA = function _mulA(num) {\\n if (this.mOneA)\\n return num.redNeg();\\n else\\n return this.a.redMul(num);\\n};\\n\\nEdwardsCurve.prototype._mulC = function _mulC(num) {\\n if (this.oneC)\\n return num;\\n else\\n return this.c.redMul(num);\\n};\\n\\n// Just for compatibility with Short curve\\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\\n return this.point(x, y, z, t);\\n};\\n\\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\\n x = new BN(x, 16);\\n if (!x.red)\\n x = x.toRed(this.red);\\n\\n var x2 = x.redSqr();\\n var rhs = this.c2.redSub(this.a.redMul(x2));\\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\\n\\n var y2 = rhs.redMul(lhs.redInvm());\\n var y = y2.redSqrt();\\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n var isOdd = y.fromRed().isOdd();\\n if (odd && !isOdd || !odd && isOdd)\\n y = y.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\\n y = new BN(y, 16);\\n if (!y.red)\\n y = y.toRed(this.red);\\n\\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\\n var y2 = y.redSqr();\\n var lhs = y2.redSub(this.c2);\\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\\n var x2 = lhs.redMul(rhs.redInvm());\\n\\n if (x2.cmp(this.zero) === 0) {\\n if (odd)\\n throw new Error('invalid point');\\n else\\n return this.point(this.zero, y);\\n }\\n\\n var x = x2.redSqrt();\\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n if (x.fromRed().isOdd() !== odd)\\n x = x.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nEdwardsCurve.prototype.validate = function validate(point) {\\n if (point.isInfinity())\\n return true;\\n\\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\\n point.normalize();\\n\\n var x2 = point.x.redSqr();\\n var y2 = point.y.redSqr();\\n var lhs = x2.redMul(this.a).redAdd(y2);\\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\\n\\n return lhs.cmp(rhs) === 0;\\n};\\n\\nfunction Point(curve, x, y, z, t) {\\n Base.BasePoint.call(this, curve, 'projective');\\n if (x === null && y === null && z === null) {\\n this.x = this.curve.zero;\\n this.y = this.curve.one;\\n this.z = this.curve.one;\\n this.t = this.curve.zero;\\n this.zOne = true;\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n this.z = z ? new BN(z, 16) : this.curve.one;\\n this.t = t && new BN(t, 16);\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n if (this.t && !this.t.red)\\n this.t = this.t.toRed(this.curve.red);\\n this.zOne = this.z === this.curve.one;\\n\\n // Use extended coordinates\\n if (this.curve.extended && !this.t) {\\n this.t = this.x.redMul(this.y);\\n if (!this.zOne)\\n this.t = this.t.redMul(this.z.redInvm());\\n }\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\\n return Point.fromJSON(this, obj);\\n};\\n\\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\\n return new Point(this, x, y, z, t);\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj) {\\n return new Point(curve, obj[0], obj[1], obj[2]);\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' y: ' + this.y.fromRed().toString(16, 2) +\\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.x.cmpn(0) === 0 &&\\n (this.y.cmp(this.z) === 0 ||\\n (this.zOne && this.y.cmp(this.curve.c) === 0));\\n};\\n\\nPoint.prototype._extDbl = function _extDbl() {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\\n // #doubling-dbl-2008-hwcd\\n // 4M + 4S\\n\\n // A = X1^2\\n var a = this.x.redSqr();\\n // B = Y1^2\\n var b = this.y.redSqr();\\n // C = 2 * Z1^2\\n var c = this.z.redSqr();\\n c = c.redIAdd(c);\\n // D = a * A\\n var d = this.curve._mulA(a);\\n // E = (X1 + Y1)^2 - A - B\\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\\n // G = D + B\\n var g = d.redAdd(b);\\n // F = G - C\\n var f = g.redSub(c);\\n // H = D - B\\n var h = d.redSub(b);\\n // X3 = E * F\\n var nx = e.redMul(f);\\n // Y3 = G * H\\n var ny = g.redMul(h);\\n // T3 = E * H\\n var nt = e.redMul(h);\\n // Z3 = F * G\\n var nz = f.redMul(g);\\n return this.curve.point(nx, ny, nz, nt);\\n};\\n\\nPoint.prototype._projDbl = function _projDbl() {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\\n // #doubling-dbl-2008-bbjlp\\n // #doubling-dbl-2007-bl\\n // and others\\n // Generally 3M + 4S or 2M + 4S\\n\\n // B = (X1 + Y1)^2\\n var b = this.x.redAdd(this.y).redSqr();\\n // C = X1^2\\n var c = this.x.redSqr();\\n // D = Y1^2\\n var d = this.y.redSqr();\\n\\n var nx;\\n var ny;\\n var nz;\\n if (this.curve.twisted) {\\n // E = a * C\\n var e = this.curve._mulA(c);\\n // F = E + D\\n var f = e.redAdd(d);\\n if (this.zOne) {\\n // X3 = (B - C - D) * (F - 2)\\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\\n // Y3 = F * (E - D)\\n ny = f.redMul(e.redSub(d));\\n // Z3 = F^2 - 2 * F\\n nz = f.redSqr().redSub(f).redSub(f);\\n } else {\\n // H = Z1^2\\n var h = this.z.redSqr();\\n // J = F - 2 * H\\n var j = f.redSub(h).redISub(h);\\n // X3 = (B-C-D)*J\\n nx = b.redSub(c).redISub(d).redMul(j);\\n // Y3 = F * (E - D)\\n ny = f.redMul(e.redSub(d));\\n // Z3 = F * J\\n nz = f.redMul(j);\\n }\\n } else {\\n // E = C + D\\n var e = c.redAdd(d);\\n // H = (c * Z1)^2\\n var h = this.curve._mulC(this.z).redSqr();\\n // J = E - 2 * H\\n var j = e.redSub(h).redSub(h);\\n // X3 = c * (B - E) * J\\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\\n // Y3 = c * E * (C - D)\\n ny = this.curve._mulC(e).redMul(c.redISub(d));\\n // Z3 = E * J\\n nz = e.redMul(j);\\n }\\n return this.curve.point(nx, ny, nz);\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n if (this.isInfinity())\\n return this;\\n\\n // Double in extended coordinates\\n if (this.curve.extended)\\n return this._extDbl();\\n else\\n return this._projDbl();\\n};\\n\\nPoint.prototype._extAdd = function _extAdd(p) {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\\n // #addition-add-2008-hwcd-3\\n // 8M\\n\\n // A = (Y1 - X1) * (Y2 - X2)\\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\\n // B = (Y1 + X1) * (Y2 + X2)\\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\\n // C = T1 * k * T2\\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\\n // D = Z1 * 2 * Z2\\n var d = this.z.redMul(p.z.redAdd(p.z));\\n // E = B - A\\n var e = b.redSub(a);\\n // F = D - C\\n var f = d.redSub(c);\\n // G = D + C\\n var g = d.redAdd(c);\\n // H = B + A\\n var h = b.redAdd(a);\\n // X3 = E * F\\n var nx = e.redMul(f);\\n // Y3 = G * H\\n var ny = g.redMul(h);\\n // T3 = E * H\\n var nt = e.redMul(h);\\n // Z3 = F * G\\n var nz = f.redMul(g);\\n return this.curve.point(nx, ny, nz, nt);\\n};\\n\\nPoint.prototype._projAdd = function _projAdd(p) {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\\n // #addition-add-2008-bbjlp\\n // #addition-add-2007-bl\\n // 10M + 1S\\n\\n // A = Z1 * Z2\\n var a = this.z.redMul(p.z);\\n // B = A^2\\n var b = a.redSqr();\\n // C = X1 * X2\\n var c = this.x.redMul(p.x);\\n // D = Y1 * Y2\\n var d = this.y.redMul(p.y);\\n // E = d * C * D\\n var e = this.curve.d.redMul(c).redMul(d);\\n // F = B - E\\n var f = b.redSub(e);\\n // G = B + E\\n var g = b.redAdd(e);\\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\\n var nx = a.redMul(f).redMul(tmp);\\n var ny;\\n var nz;\\n if (this.curve.twisted) {\\n // Y3 = A * G * (D - a * C)\\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\\n // Z3 = F * G\\n nz = f.redMul(g);\\n } else {\\n // Y3 = A * G * (D - C)\\n ny = a.redMul(g).redMul(d.redSub(c));\\n // Z3 = c * F * G\\n nz = this.curve._mulC(f).redMul(g);\\n }\\n return this.curve.point(nx, ny, nz);\\n};\\n\\nPoint.prototype.add = function add(p) {\\n if (this.isInfinity())\\n return p;\\n if (p.isInfinity())\\n return this;\\n\\n if (this.curve.extended)\\n return this._extAdd(p);\\n else\\n return this._projAdd(p);\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n if (this._hasDoubles(k))\\n return this.curve._fixedNafMul(this, k);\\n else\\n return this.curve._wnafMul(this, k);\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\\n};\\n\\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\\n};\\n\\nPoint.prototype.normalize = function normalize() {\\n if (this.zOne)\\n return this;\\n\\n // Normalize coordinates\\n var zi = this.z.redInvm();\\n this.x = this.x.redMul(zi);\\n this.y = this.y.redMul(zi);\\n if (this.t)\\n this.t = this.t.redMul(zi);\\n this.z = this.curve.one;\\n this.zOne = true;\\n return this;\\n};\\n\\nPoint.prototype.neg = function neg() {\\n return this.curve.point(this.x.redNeg(),\\n this.y,\\n this.z,\\n this.t && this.t.redNeg());\\n};\\n\\nPoint.prototype.getX = function getX() {\\n this.normalize();\\n return this.x.fromRed();\\n};\\n\\nPoint.prototype.getY = function getY() {\\n this.normalize();\\n return this.y.fromRed();\\n};\\n\\nPoint.prototype.eq = function eq(other) {\\n return this === other ||\\n this.getX().cmp(other.getX()) === 0 &&\\n this.getY().cmp(other.getY()) === 0;\\n};\\n\\nPoint.prototype.eqXToP = function eqXToP(x) {\\n var rx = x.toRed(this.curve.red).redMul(this.z);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n\\n var xc = x.clone();\\n var t = this.curve.redN.redMul(this.z);\\n for (;;) {\\n xc.iadd(this.curve.n);\\n if (xc.cmp(this.curve.p) >= 0)\\n return false;\\n\\n rx.redIAdd(t);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n }\\n};\\n\\n// Compatibility with BaseCurve\\nPoint.prototype.toP = Point.prototype.normalize;\\nPoint.prototype.mixedAdd = Point.prototype.add;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/edwards.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js\":\n/*!***************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js ***!\n \\***************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = exports;\\n\\ncurve.base = __webpack_require__(/*! ./base */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\ncurve.short = __webpack_require__(/*! ./short */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/short.js\\\");\\ncurve.mont = __webpack_require__(/*! ./mont */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/mont.js\\\");\\ncurve.edwards = __webpack_require__(/*! ./edwards */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/edwards.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/mont.js\":\n/*!**************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/mont.js ***!\n \\**************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = __webpack_require__(/*! ./base */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\n\\nfunction MontCurve(conf) {\\n Base.call(this, 'mont', conf);\\n\\n this.a = new BN(conf.a, 16).toRed(this.red);\\n this.b = new BN(conf.b, 16).toRed(this.red);\\n this.i4 = new BN(4).toRed(this.red).redInvm();\\n this.two = new BN(2).toRed(this.red);\\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\\n}\\ninherits(MontCurve, Base);\\nmodule.exports = MontCurve;\\n\\nMontCurve.prototype.validate = function validate(point) {\\n var x = point.normalize().x;\\n var x2 = x.redSqr();\\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\\n var y = rhs.redSqrt();\\n\\n return y.redSqr().cmp(rhs) === 0;\\n};\\n\\nfunction Point(curve, x, z) {\\n Base.BasePoint.call(this, curve, 'projective');\\n if (x === null && z === null) {\\n this.x = this.curve.one;\\n this.z = this.curve.zero;\\n } else {\\n this.x = new BN(x, 16);\\n this.z = new BN(z, 16);\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\\n return this.point(utils.toArray(bytes, enc), 1);\\n};\\n\\nMontCurve.prototype.point = function point(x, z) {\\n return new Point(this, x, z);\\n};\\n\\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\\n return Point.fromJSON(this, obj);\\n};\\n\\nPoint.prototype.precompute = function precompute() {\\n // No-op\\n};\\n\\nPoint.prototype._encode = function _encode() {\\n return this.getX().toArray('be', this.curve.p.byteLength());\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj) {\\n return new Point(curve, obj[0], obj[1] || curve.one);\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.z.cmpn(0) === 0;\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\\n // 2M + 2S + 4A\\n\\n // A = X1 + Z1\\n var a = this.x.redAdd(this.z);\\n // AA = A^2\\n var aa = a.redSqr();\\n // B = X1 - Z1\\n var b = this.x.redSub(this.z);\\n // BB = B^2\\n var bb = b.redSqr();\\n // C = AA - BB\\n var c = aa.redSub(bb);\\n // X3 = AA * BB\\n var nx = aa.redMul(bb);\\n // Z3 = C * (BB + A24 * C)\\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\\n return this.curve.point(nx, nz);\\n};\\n\\nPoint.prototype.add = function add() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\\n // 4M + 2S + 6A\\n\\n // A = X2 + Z2\\n var a = this.x.redAdd(this.z);\\n // B = X2 - Z2\\n var b = this.x.redSub(this.z);\\n // C = X3 + Z3\\n var c = p.x.redAdd(p.z);\\n // D = X3 - Z3\\n var d = p.x.redSub(p.z);\\n // DA = D * A\\n var da = d.redMul(a);\\n // CB = C * B\\n var cb = c.redMul(b);\\n // X5 = Z1 * (DA + CB)^2\\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\\n // Z5 = X1 * (DA - CB)^2\\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\\n return this.curve.point(nx, nz);\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n var t = k.clone();\\n var a = this; // (N / 2) * Q + Q\\n var b = this.curve.point(null, null); // (N / 2) * Q\\n var c = this; // Q\\n\\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\\n bits.push(t.andln(1));\\n\\n for (var i = bits.length - 1; i >= 0; i--) {\\n if (bits[i] === 0) {\\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\\n a = a.diffAdd(b, c);\\n // N * Q = 2 * ((N / 2) * Q + Q))\\n b = b.dbl();\\n } else {\\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\\n b = a.diffAdd(b, c);\\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\\n a = a.dbl();\\n }\\n }\\n return b;\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.jumlAdd = function jumlAdd() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.eq = function eq(other) {\\n return this.getX().cmp(other.getX()) === 0;\\n};\\n\\nPoint.prototype.normalize = function normalize() {\\n this.x = this.x.redMul(this.z.redInvm());\\n this.z = this.curve.one;\\n return this;\\n};\\n\\nPoint.prototype.getX = function getX() {\\n // Normalize coordinates\\n this.normalize();\\n\\n return this.x.fromRed();\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/mont.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/short.js\":\n/*!***************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/short.js ***!\n \\***************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = __webpack_require__(/*! ./base */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\n\\nvar assert = utils.assert;\\n\\nfunction ShortCurve(conf) {\\n Base.call(this, 'short', conf);\\n\\n this.a = new BN(conf.a, 16).toRed(this.red);\\n this.b = new BN(conf.b, 16).toRed(this.red);\\n this.tinv = this.two.redInvm();\\n\\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\\n\\n // If the curve is endomorphic, precalculate beta and lambda\\n this.endo = this._getEndomorphism(conf);\\n this._endoWnafT1 = new Array(4);\\n this._endoWnafT2 = new Array(4);\\n}\\ninherits(ShortCurve, Base);\\nmodule.exports = ShortCurve;\\n\\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\\n // No efficient endomorphism\\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\\n return;\\n\\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\\n var beta;\\n var lambda;\\n if (conf.beta) {\\n beta = new BN(conf.beta, 16).toRed(this.red);\\n } else {\\n var betas = this._getEndoRoots(this.p);\\n // Choose the smallest beta\\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\\n beta = beta.toRed(this.red);\\n }\\n if (conf.lambda) {\\n lambda = new BN(conf.lambda, 16);\\n } else {\\n // Choose the lambda that is matching selected beta\\n var lambdas = this._getEndoRoots(this.n);\\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\\n lambda = lambdas[0];\\n } else {\\n lambda = lambdas[1];\\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\\n }\\n }\\n\\n // Get basis vectors, used for balanced length-two representation\\n var basis;\\n if (conf.basis) {\\n basis = conf.basis.map(function(vec) {\\n return {\\n a: new BN(vec.a, 16),\\n b: new BN(vec.b, 16)\\n };\\n });\\n } else {\\n basis = this._getEndoBasis(lambda);\\n }\\n\\n return {\\n beta: beta,\\n lambda: lambda,\\n basis: basis\\n };\\n};\\n\\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\\n // Find roots of for x^2 + x + 1 in F\\n // Root = (-1 +- Sqrt(-3)) / 2\\n //\\n var red = num === this.p ? this.red : BN.mont(num);\\n var tinv = new BN(2).toRed(red).redInvm();\\n var ntinv = tinv.redNeg();\\n\\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\\n\\n var l1 = ntinv.redAdd(s).fromRed();\\n var l2 = ntinv.redSub(s).fromRed();\\n return [ l1, l2 ];\\n};\\n\\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\\n // aprxSqrt >= sqrt(this.n)\\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\\n\\n // 3.74\\n // Run EGCD, until r(L + 1) < aprxSqrt\\n var u = lambda;\\n var v = this.n.clone();\\n var x1 = new BN(1);\\n var y1 = new BN(0);\\n var x2 = new BN(0);\\n var y2 = new BN(1);\\n\\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\\n var a0;\\n var b0;\\n // First vector\\n var a1;\\n var b1;\\n // Second vector\\n var a2;\\n var b2;\\n\\n var prevR;\\n var i = 0;\\n var r;\\n var x;\\n while (u.cmpn(0) !== 0) {\\n var q = v.div(u);\\n r = v.sub(q.mul(u));\\n x = x2.sub(q.mul(x1));\\n var y = y2.sub(q.mul(y1));\\n\\n if (!a1 && r.cmp(aprxSqrt) < 0) {\\n a0 = prevR.neg();\\n b0 = x1;\\n a1 = r.neg();\\n b1 = x;\\n } else if (a1 && ++i === 2) {\\n break;\\n }\\n prevR = r;\\n\\n v = u;\\n u = r;\\n x2 = x1;\\n x1 = x;\\n y2 = y1;\\n y1 = y;\\n }\\n a2 = r.neg();\\n b2 = x;\\n\\n var len1 = a1.sqr().add(b1.sqr());\\n var len2 = a2.sqr().add(b2.sqr());\\n if (len2.cmp(len1) >= 0) {\\n a2 = a0;\\n b2 = b0;\\n }\\n\\n // Normalize signs\\n if (a1.negative) {\\n a1 = a1.neg();\\n b1 = b1.neg();\\n }\\n if (a2.negative) {\\n a2 = a2.neg();\\n b2 = b2.neg();\\n }\\n\\n return [\\n { a: a1, b: b1 },\\n { a: a2, b: b2 }\\n ];\\n};\\n\\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\\n var basis = this.endo.basis;\\n var v1 = basis[0];\\n var v2 = basis[1];\\n\\n var c1 = v2.b.mul(k).divRound(this.n);\\n var c2 = v1.b.neg().mul(k).divRound(this.n);\\n\\n var p1 = c1.mul(v1.a);\\n var p2 = c2.mul(v2.a);\\n var q1 = c1.mul(v1.b);\\n var q2 = c2.mul(v2.b);\\n\\n // Calculate answer\\n var k1 = k.sub(p1).sub(p2);\\n var k2 = q1.add(q2).neg();\\n return { k1: k1, k2: k2 };\\n};\\n\\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\\n x = new BN(x, 16);\\n if (!x.red)\\n x = x.toRed(this.red);\\n\\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\\n var y = y2.redSqrt();\\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n // XXX Is there any way to tell if the number is odd without converting it\\n // to non-red form?\\n var isOdd = y.fromRed().isOdd();\\n if (odd && !isOdd || !odd && isOdd)\\n y = y.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nShortCurve.prototype.validate = function validate(point) {\\n if (point.inf)\\n return true;\\n\\n var x = point.x;\\n var y = point.y;\\n\\n var ax = this.a.redMul(x);\\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\\n};\\n\\nShortCurve.prototype._endoWnafMulAdd =\\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\\n var npoints = this._endoWnafT1;\\n var ncoeffs = this._endoWnafT2;\\n for (var i = 0; i < points.length; i++) {\\n var split = this._endoSplit(coeffs[i]);\\n var p = points[i];\\n var beta = p._getBeta();\\n\\n if (split.k1.negative) {\\n split.k1.ineg();\\n p = p.neg(true);\\n }\\n if (split.k2.negative) {\\n split.k2.ineg();\\n beta = beta.neg(true);\\n }\\n\\n npoints[i * 2] = p;\\n npoints[i * 2 + 1] = beta;\\n ncoeffs[i * 2] = split.k1;\\n ncoeffs[i * 2 + 1] = split.k2;\\n }\\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\\n\\n // Clean-up references to points and coefficients\\n for (var j = 0; j < i * 2; j++) {\\n npoints[j] = null;\\n ncoeffs[j] = null;\\n }\\n return res;\\n};\\n\\nfunction Point(curve, x, y, isRed) {\\n Base.BasePoint.call(this, curve, 'affine');\\n if (x === null && y === null) {\\n this.x = null;\\n this.y = null;\\n this.inf = true;\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n // Force redgomery representation when loading from JSON\\n if (isRed) {\\n this.x.forceRed(this.curve.red);\\n this.y.forceRed(this.curve.red);\\n }\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n this.inf = false;\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nShortCurve.prototype.point = function point(x, y, isRed) {\\n return new Point(this, x, y, isRed);\\n};\\n\\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\\n return Point.fromJSON(this, obj, red);\\n};\\n\\nPoint.prototype._getBeta = function _getBeta() {\\n if (!this.curve.endo)\\n return;\\n\\n var pre = this.precomputed;\\n if (pre && pre.beta)\\n return pre.beta;\\n\\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\\n if (pre) {\\n var curve = this.curve;\\n var endoMul = function(p) {\\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\\n };\\n pre.beta = beta;\\n beta.precomputed = {\\n beta: null,\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: pre.naf.points.map(endoMul)\\n },\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: pre.doubles.points.map(endoMul)\\n }\\n };\\n }\\n return beta;\\n};\\n\\nPoint.prototype.toJSON = function toJSON() {\\n if (!this.precomputed)\\n return [ this.x, this.y ];\\n\\n return [ this.x, this.y, this.precomputed && {\\n doubles: this.precomputed.doubles && {\\n step: this.precomputed.doubles.step,\\n points: this.precomputed.doubles.points.slice(1)\\n },\\n naf: this.precomputed.naf && {\\n wnd: this.precomputed.naf.wnd,\\n points: this.precomputed.naf.points.slice(1)\\n }\\n } ];\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj, red) {\\n if (typeof obj === 'string')\\n obj = JSON.parse(obj);\\n var res = curve.point(obj[0], obj[1], red);\\n if (!obj[2])\\n return res;\\n\\n function obj2point(obj) {\\n return curve.point(obj[0], obj[1], red);\\n }\\n\\n var pre = obj[2];\\n res.precomputed = {\\n beta: null,\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: [ res ].concat(pre.doubles.points.map(obj2point))\\n },\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: [ res ].concat(pre.naf.points.map(obj2point))\\n }\\n };\\n return res;\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n return this.inf;\\n};\\n\\nPoint.prototype.add = function add(p) {\\n // O + P = P\\n if (this.inf)\\n return p;\\n\\n // P + O = P\\n if (p.inf)\\n return this;\\n\\n // P + P = 2P\\n if (this.eq(p))\\n return this.dbl();\\n\\n // P + (-P) = O\\n if (this.neg().eq(p))\\n return this.curve.point(null, null);\\n\\n // P + Q = O\\n if (this.x.cmp(p.x) === 0)\\n return this.curve.point(null, null);\\n\\n var c = this.y.redSub(p.y);\\n if (c.cmpn(0) !== 0)\\n c = c.redMul(this.x.redSub(p.x).redInvm());\\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\\n return this.curve.point(nx, ny);\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n if (this.inf)\\n return this;\\n\\n // 2P = O\\n var ys1 = this.y.redAdd(this.y);\\n if (ys1.cmpn(0) === 0)\\n return this.curve.point(null, null);\\n\\n var a = this.curve.a;\\n\\n var x2 = this.x.redSqr();\\n var dyinv = ys1.redInvm();\\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\\n\\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\\n return this.curve.point(nx, ny);\\n};\\n\\nPoint.prototype.getX = function getX() {\\n return this.x.fromRed();\\n};\\n\\nPoint.prototype.getY = function getY() {\\n return this.y.fromRed();\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n k = new BN(k, 16);\\n if (this.isInfinity())\\n return this;\\n else if (this._hasDoubles(k))\\n return this.curve._fixedNafMul(this, k);\\n else if (this.curve.endo)\\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\\n else\\n return this.curve._wnafMul(this, k);\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\\n var points = [ this, p2 ];\\n var coeffs = [ k1, k2 ];\\n if (this.curve.endo)\\n return this.curve._endoWnafMulAdd(points, coeffs);\\n else\\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\\n};\\n\\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\\n var points = [ this, p2 ];\\n var coeffs = [ k1, k2 ];\\n if (this.curve.endo)\\n return this.curve._endoWnafMulAdd(points, coeffs, true);\\n else\\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\\n};\\n\\nPoint.prototype.eq = function eq(p) {\\n return this === p ||\\n this.inf === p.inf &&\\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\\n};\\n\\nPoint.prototype.neg = function neg(_precompute) {\\n if (this.inf)\\n return this;\\n\\n var res = this.curve.point(this.x, this.y.redNeg());\\n if (_precompute && this.precomputed) {\\n var pre = this.precomputed;\\n var negate = function(p) {\\n return p.neg();\\n };\\n res.precomputed = {\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: pre.naf.points.map(negate)\\n },\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: pre.doubles.points.map(negate)\\n }\\n };\\n }\\n return res;\\n};\\n\\nPoint.prototype.toJ = function toJ() {\\n if (this.inf)\\n return this.curve.jpoint(null, null, null);\\n\\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\\n return res;\\n};\\n\\nfunction JPoint(curve, x, y, z) {\\n Base.BasePoint.call(this, curve, 'jacobian');\\n if (x === null && y === null && z === null) {\\n this.x = this.curve.one;\\n this.y = this.curve.one;\\n this.z = new BN(0);\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n this.z = new BN(z, 16);\\n }\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n\\n this.zOne = this.z === this.curve.one;\\n}\\ninherits(JPoint, Base.BasePoint);\\n\\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\\n return new JPoint(this, x, y, z);\\n};\\n\\nJPoint.prototype.toP = function toP() {\\n if (this.isInfinity())\\n return this.curve.point(null, null);\\n\\n var zinv = this.z.redInvm();\\n var zinv2 = zinv.redSqr();\\n var ax = this.x.redMul(zinv2);\\n var ay = this.y.redMul(zinv2).redMul(zinv);\\n\\n return this.curve.point(ax, ay);\\n};\\n\\nJPoint.prototype.neg = function neg() {\\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\\n};\\n\\nJPoint.prototype.add = function add(p) {\\n // O + P = P\\n if (this.isInfinity())\\n return p;\\n\\n // P + O = P\\n if (p.isInfinity())\\n return this;\\n\\n // 12M + 4S + 7A\\n var pz2 = p.z.redSqr();\\n var z2 = this.z.redSqr();\\n var u1 = this.x.redMul(pz2);\\n var u2 = p.x.redMul(z2);\\n var s1 = this.y.redMul(pz2.redMul(p.z));\\n var s2 = p.y.redMul(z2.redMul(this.z));\\n\\n var h = u1.redSub(u2);\\n var r = s1.redSub(s2);\\n if (h.cmpn(0) === 0) {\\n if (r.cmpn(0) !== 0)\\n return this.curve.jpoint(null, null, null);\\n else\\n return this.dbl();\\n }\\n\\n var h2 = h.redSqr();\\n var h3 = h2.redMul(h);\\n var v = u1.redMul(h2);\\n\\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\\n var nz = this.z.redMul(p.z).redMul(h);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\\n // O + P = P\\n if (this.isInfinity())\\n return p.toJ();\\n\\n // P + O = P\\n if (p.isInfinity())\\n return this;\\n\\n // 8M + 3S + 7A\\n var z2 = this.z.redSqr();\\n var u1 = this.x;\\n var u2 = p.x.redMul(z2);\\n var s1 = this.y;\\n var s2 = p.y.redMul(z2).redMul(this.z);\\n\\n var h = u1.redSub(u2);\\n var r = s1.redSub(s2);\\n if (h.cmpn(0) === 0) {\\n if (r.cmpn(0) !== 0)\\n return this.curve.jpoint(null, null, null);\\n else\\n return this.dbl();\\n }\\n\\n var h2 = h.redSqr();\\n var h3 = h2.redMul(h);\\n var v = u1.redMul(h2);\\n\\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\\n var nz = this.z.redMul(h);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.dblp = function dblp(pow) {\\n if (pow === 0)\\n return this;\\n if (this.isInfinity())\\n return this;\\n if (!pow)\\n return this.dbl();\\n\\n if (this.curve.zeroA || this.curve.threeA) {\\n var r = this;\\n for (var i = 0; i < pow; i++)\\n r = r.dbl();\\n return r;\\n }\\n\\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\\n // N = 1 => 6M + 6S + 9A\\n var a = this.curve.a;\\n var tinv = this.curve.tinv;\\n\\n var jx = this.x;\\n var jy = this.y;\\n var jz = this.z;\\n var jz4 = jz.redSqr().redSqr();\\n\\n // Reuse results\\n var jyd = jy.redAdd(jy);\\n for (var i = 0; i < pow; i++) {\\n var jx2 = jx.redSqr();\\n var jyd2 = jyd.redSqr();\\n var jyd4 = jyd2.redSqr();\\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\\n\\n var t1 = jx.redMul(jyd2);\\n var nx = c.redSqr().redISub(t1.redAdd(t1));\\n var t2 = t1.redISub(nx);\\n var dny = c.redMul(t2);\\n dny = dny.redIAdd(dny).redISub(jyd4);\\n var nz = jyd.redMul(jz);\\n if (i + 1 < pow)\\n jz4 = jz4.redMul(jyd4);\\n\\n jx = nx;\\n jz = nz;\\n jyd = dny;\\n }\\n\\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\\n};\\n\\nJPoint.prototype.dbl = function dbl() {\\n if (this.isInfinity())\\n return this;\\n\\n if (this.curve.zeroA)\\n return this._zeroDbl();\\n else if (this.curve.threeA)\\n return this._threeDbl();\\n else\\n return this._dbl();\\n};\\n\\nJPoint.prototype._zeroDbl = function _zeroDbl() {\\n var nx;\\n var ny;\\n var nz;\\n // Z = 1\\n if (this.zOne) {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\\n // #doubling-mdbl-2007-bl\\n // 1M + 5S + 14A\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n s = s.redIAdd(s);\\n // M = 3 * XX + a; a = 0\\n var m = xx.redAdd(xx).redIAdd(xx);\\n // T = M ^ 2 - 2*S\\n var t = m.redSqr().redISub(s).redISub(s);\\n\\n // 8 * YYYY\\n var yyyy8 = yyyy.redIAdd(yyyy);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n\\n // X3 = T\\n nx = t;\\n // Y3 = M * (S - T) - 8 * YYYY\\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\\n // Z3 = 2*Y1\\n nz = this.y.redAdd(this.y);\\n } else {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\\n // #doubling-dbl-2009-l\\n // 2M + 5S + 13A\\n\\n // A = X1^2\\n var a = this.x.redSqr();\\n // B = Y1^2\\n var b = this.y.redSqr();\\n // C = B^2\\n var c = b.redSqr();\\n // D = 2 * ((X1 + B)^2 - A - C)\\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\\n d = d.redIAdd(d);\\n // E = 3 * A\\n var e = a.redAdd(a).redIAdd(a);\\n // F = E^2\\n var f = e.redSqr();\\n\\n // 8 * C\\n var c8 = c.redIAdd(c);\\n c8 = c8.redIAdd(c8);\\n c8 = c8.redIAdd(c8);\\n\\n // X3 = F - 2 * D\\n nx = f.redISub(d).redISub(d);\\n // Y3 = E * (D - X3) - 8 * C\\n ny = e.redMul(d.redISub(nx)).redISub(c8);\\n // Z3 = 2 * Y1 * Z1\\n nz = this.y.redMul(this.z);\\n nz = nz.redIAdd(nz);\\n }\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype._threeDbl = function _threeDbl() {\\n var nx;\\n var ny;\\n var nz;\\n // Z = 1\\n if (this.zOne) {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\\n // #doubling-mdbl-2007-bl\\n // 1M + 5S + 15A\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n s = s.redIAdd(s);\\n // M = 3 * XX + a\\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\\n // T = M^2 - 2 * S\\n var t = m.redSqr().redISub(s).redISub(s);\\n // X3 = T\\n nx = t;\\n // Y3 = M * (S - T) - 8 * YYYY\\n var yyyy8 = yyyy.redIAdd(yyyy);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\\n // Z3 = 2 * Y1\\n nz = this.y.redAdd(this.y);\\n } else {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\\n // 3M + 5S\\n\\n // delta = Z1^2\\n var delta = this.z.redSqr();\\n // gamma = Y1^2\\n var gamma = this.y.redSqr();\\n // beta = X1 * gamma\\n var beta = this.x.redMul(gamma);\\n // alpha = 3 * (X1 - delta) * (X1 + delta)\\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\\n // X3 = alpha^2 - 8 * beta\\n var beta4 = beta.redIAdd(beta);\\n beta4 = beta4.redIAdd(beta4);\\n var beta8 = beta4.redAdd(beta4);\\n nx = alpha.redSqr().redISub(beta8);\\n // Z3 = (Y1 + Z1)^2 - gamma - delta\\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\\n var ggamma8 = gamma.redSqr();\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\\n }\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype._dbl = function _dbl() {\\n var a = this.curve.a;\\n\\n // 4M + 6S + 10A\\n var jx = this.x;\\n var jy = this.y;\\n var jz = this.z;\\n var jz4 = jz.redSqr().redSqr();\\n\\n var jx2 = jx.redSqr();\\n var jy2 = jy.redSqr();\\n\\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\\n\\n var jxd4 = jx.redAdd(jx);\\n jxd4 = jxd4.redIAdd(jxd4);\\n var t1 = jxd4.redMul(jy2);\\n var nx = c.redSqr().redISub(t1.redAdd(t1));\\n var t2 = t1.redISub(nx);\\n\\n var jyd8 = jy2.redSqr();\\n jyd8 = jyd8.redIAdd(jyd8);\\n jyd8 = jyd8.redIAdd(jyd8);\\n jyd8 = jyd8.redIAdd(jyd8);\\n var ny = c.redMul(t2).redISub(jyd8);\\n var nz = jy.redAdd(jy).redMul(jz);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.trpl = function trpl() {\\n if (!this.curve.zeroA)\\n return this.dbl().add(this);\\n\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\\n // 5M + 10S + ...\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // ZZ = Z1^2\\n var zz = this.z.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // M = 3 * XX + a * ZZ2; a = 0\\n var m = xx.redAdd(xx).redIAdd(xx);\\n // MM = M^2\\n var mm = m.redSqr();\\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n e = e.redIAdd(e);\\n e = e.redAdd(e).redIAdd(e);\\n e = e.redISub(mm);\\n // EE = E^2\\n var ee = e.redSqr();\\n // T = 16*YYYY\\n var t = yyyy.redIAdd(yyyy);\\n t = t.redIAdd(t);\\n t = t.redIAdd(t);\\n t = t.redIAdd(t);\\n // U = (M + E)^2 - MM - EE - T\\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\\n // X3 = 4 * (X1 * EE - 4 * YY * U)\\n var yyu4 = yy.redMul(u);\\n yyu4 = yyu4.redIAdd(yyu4);\\n yyu4 = yyu4.redIAdd(yyu4);\\n var nx = this.x.redMul(ee).redISub(yyu4);\\n nx = nx.redIAdd(nx);\\n nx = nx.redIAdd(nx);\\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\\n ny = ny.redIAdd(ny);\\n ny = ny.redIAdd(ny);\\n ny = ny.redIAdd(ny);\\n // Z3 = (Z1 + E)^2 - ZZ - EE\\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.mul = function mul(k, kbase) {\\n k = new BN(k, kbase);\\n\\n return this.curve._wnafMul(this, k);\\n};\\n\\nJPoint.prototype.eq = function eq(p) {\\n if (p.type === 'affine')\\n return this.eq(p.toJ());\\n\\n if (this === p)\\n return true;\\n\\n // x1 * z2^2 == x2 * z1^2\\n var z2 = this.z.redSqr();\\n var pz2 = p.z.redSqr();\\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\\n return false;\\n\\n // y1 * z2^3 == y2 * z1^3\\n var z3 = z2.redMul(this.z);\\n var pz3 = pz2.redMul(p.z);\\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\\n};\\n\\nJPoint.prototype.eqXToP = function eqXToP(x) {\\n var zs = this.z.redSqr();\\n var rx = x.toRed(this.curve.red).redMul(zs);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n\\n var xc = x.clone();\\n var t = this.curve.redN.redMul(zs);\\n for (;;) {\\n xc.iadd(this.curve.n);\\n if (xc.cmp(this.curve.p) >= 0)\\n return false;\\n\\n rx.redIAdd(t);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n }\\n};\\n\\nJPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC JPoint Infinity>';\\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\\n ' y: ' + this.y.toString(16, 2) +\\n ' z: ' + this.z.toString(16, 2) + '>';\\n};\\n\\nJPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.z.cmpn(0) === 0;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/short.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js\":\n/*!**********************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js ***!\n \\**********************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curves = exports;\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar curve = __webpack_require__(/*! ./curve */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\n\\nvar assert = utils.assert;\\n\\nfunction PresetCurve(options) {\\n if (options.type === 'short')\\n this.curve = new curve.short(options);\\n else if (options.type === 'edwards')\\n this.curve = new curve.edwards(options);\\n else\\n this.curve = new curve.mont(options);\\n this.g = this.curve.g;\\n this.n = this.curve.n;\\n this.hash = options.hash;\\n\\n assert(this.g.validate(), 'Invalid curve');\\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\\n}\\ncurves.PresetCurve = PresetCurve;\\n\\nfunction defineCurve(name, options) {\\n Object.defineProperty(curves, name, {\\n configurable: true,\\n enumerable: true,\\n get: function() {\\n var curve = new PresetCurve(options);\\n Object.defineProperty(curves, name, {\\n configurable: true,\\n enumerable: true,\\n value: curve\\n });\\n return curve;\\n }\\n });\\n}\\n\\ndefineCurve('p192', {\\n type: 'short',\\n prime: 'p192',\\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\\n ]\\n});\\n\\ndefineCurve('p224', {\\n type: 'short',\\n prime: 'p224',\\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\\n ]\\n});\\n\\ndefineCurve('p256', {\\n type: 'short',\\n prime: null,\\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\\n ]\\n});\\n\\ndefineCurve('p384', {\\n type: 'short',\\n prime: null,\\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\\n hash: hash.sha384,\\n gRed: false,\\n g: [\\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\\n '5502f25d bf55296c 3a545e38 72760ab7',\\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\\n ]\\n});\\n\\ndefineCurve('p521', {\\n type: 'short',\\n prime: null,\\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\\n hash: hash.sha512,\\n gRed: false,\\n g: [\\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\\n ]\\n});\\n\\ndefineCurve('curve25519', {\\n type: 'mont',\\n prime: 'p25519',\\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\\n a: '76d06',\\n b: '1',\\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '9'\\n ]\\n});\\n\\ndefineCurve('ed25519', {\\n type: 'edwards',\\n prime: 'p25519',\\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\\n a: '-1',\\n c: '1',\\n // -121665 * (121666^(-1)) (mod P)\\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\\n\\n // 4/5\\n '6666666666666666666666666666666666666666666666666666666666666658'\\n ]\\n});\\n\\nvar pre;\\ntry {\\n pre = __webpack_require__(/*! ./precomputed/secp256k1 */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js\\\");\\n} catch (e) {\\n pre = undefined;\\n}\\n\\ndefineCurve('secp256k1', {\\n type: 'short',\\n prime: 'k256',\\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\\n a: '0',\\n b: '7',\\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\\n h: '1',\\n hash: hash.sha256,\\n\\n // Precomputed endomorphism\\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\\n basis: [\\n {\\n a: '3086d221a7d46bcde86c90e49284eb15',\\n b: '-e4437ed6010e88286f547fa90abfe4c3'\\n },\\n {\\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\\n b: '3086d221a7d46bcde86c90e49284eb15'\\n }\\n ],\\n\\n gRed: false,\\n g: [\\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\\n pre\\n ]\\n});\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/index.js\":\n/*!************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/index.js ***!\n \\************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar HmacDRBG = __webpack_require__(/*! hmac-drbg */ \\\"./node_modules/hmac-drbg/lib/hmac-drbg.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar curves = __webpack_require__(/*! ../curves */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js\\\");\\nvar rand = __webpack_require__(/*! brorand */ \\\"./node_modules/brorand/index.js\\\");\\nvar assert = utils.assert;\\n\\nvar KeyPair = __webpack_require__(/*! ./key */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/key.js\\\");\\nvar Signature = __webpack_require__(/*! ./signature */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/signature.js\\\");\\n\\nfunction EC(options) {\\n if (!(this instanceof EC))\\n return new EC(options);\\n\\n // Shortcut `elliptic.ec(curve-name)`\\n if (typeof options === 'string') {\\n assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\\n\\n options = curves[options];\\n }\\n\\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\\n if (options instanceof curves.PresetCurve)\\n options = { curve: options };\\n\\n this.curve = options.curve.curve;\\n this.n = this.curve.n;\\n this.nh = this.n.ushrn(1);\\n this.g = this.curve.g;\\n\\n // Point on curve\\n this.g = options.curve.g;\\n this.g.precompute(options.curve.n.bitLength() + 1);\\n\\n // Hash for function for DRBG\\n this.hash = options.hash || options.curve.hash;\\n}\\nmodule.exports = EC;\\n\\nEC.prototype.keyPair = function keyPair(options) {\\n return new KeyPair(this, options);\\n};\\n\\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\\n return KeyPair.fromPrivate(this, priv, enc);\\n};\\n\\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\\n return KeyPair.fromPublic(this, pub, enc);\\n};\\n\\nEC.prototype.genKeyPair = function genKeyPair(options) {\\n if (!options)\\n options = {};\\n\\n // Instantiate Hmac_DRBG\\n var drbg = new HmacDRBG({\\n hash: this.hash,\\n pers: options.pers,\\n persEnc: options.persEnc || 'utf8',\\n entropy: options.entropy || rand(this.hash.hmacStrength),\\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\\n nonce: this.n.toArray()\\n });\\n\\n var bytes = this.n.byteLength();\\n var ns2 = this.n.sub(new BN(2));\\n do {\\n var priv = new BN(drbg.generate(bytes));\\n if (priv.cmp(ns2) > 0)\\n continue;\\n\\n priv.iaddn(1);\\n return this.keyFromPrivate(priv);\\n } while (true);\\n};\\n\\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\\n var delta = msg.byteLength() * 8 - this.n.bitLength();\\n if (delta > 0)\\n msg = msg.ushrn(delta);\\n if (!truncOnly && msg.cmp(this.n) >= 0)\\n return msg.sub(this.n);\\n else\\n return msg;\\n};\\n\\nEC.prototype.sign = function sign(msg, key, enc, options) {\\n if (typeof enc === 'object') {\\n options = enc;\\n enc = null;\\n }\\n if (!options)\\n options = {};\\n\\n key = this.keyFromPrivate(key, enc);\\n msg = this._truncateToN(new BN(msg, 16));\\n\\n // Zero-extend key to provide enough entropy\\n var bytes = this.n.byteLength();\\n var bkey = key.getPrivate().toArray('be', bytes);\\n\\n // Zero-extend nonce to have the same byte size as N\\n var nonce = msg.toArray('be', bytes);\\n\\n // Instantiate Hmac_DRBG\\n var drbg = new HmacDRBG({\\n hash: this.hash,\\n entropy: bkey,\\n nonce: nonce,\\n pers: options.pers,\\n persEnc: options.persEnc || 'utf8'\\n });\\n\\n // Number of bytes to generate\\n var ns1 = this.n.sub(new BN(1));\\n\\n for (var iter = 0; true; iter++) {\\n var k = options.k ?\\n options.k(iter) :\\n new BN(drbg.generate(this.n.byteLength()));\\n k = this._truncateToN(k, true);\\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\\n continue;\\n\\n var kp = this.g.mul(k);\\n if (kp.isInfinity())\\n continue;\\n\\n var kpX = kp.getX();\\n var r = kpX.umod(this.n);\\n if (r.cmpn(0) === 0)\\n continue;\\n\\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\\n s = s.umod(this.n);\\n if (s.cmpn(0) === 0)\\n continue;\\n\\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\\n (kpX.cmp(r) !== 0 ? 2 : 0);\\n\\n // Use complement of `s`, if it is > `n / 2`\\n if (options.canonical && s.cmp(this.nh) > 0) {\\n s = this.n.sub(s);\\n recoveryParam ^= 1;\\n }\\n\\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\\n }\\n};\\n\\nEC.prototype.verify = function verify(msg, signature, key, enc) {\\n msg = this._truncateToN(new BN(msg, 16));\\n key = this.keyFromPublic(key, enc);\\n signature = new Signature(signature, 'hex');\\n\\n // Perform primitive values validation\\n var r = signature.r;\\n var s = signature.s;\\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\\n return false;\\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\\n return false;\\n\\n // Validate signature\\n var sinv = s.invm(this.n);\\n var u1 = sinv.mul(msg).umod(this.n);\\n var u2 = sinv.mul(r).umod(this.n);\\n\\n if (!this.curve._maxwellTrick) {\\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\\n if (p.isInfinity())\\n return false;\\n\\n return p.getX().umod(this.n).cmp(r) === 0;\\n }\\n\\n // NOTE: Greg Maxwell's trick, inspired by:\\n // https://git.io/vad3K\\n\\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\\n if (p.isInfinity())\\n return false;\\n\\n // Compare `p.x` of Jacobian point with `r`,\\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\\n // inverse of `p.z^2`\\n return p.eqXToP(r);\\n};\\n\\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\\n assert((3 & j) === j, 'The recovery param is more than two bits');\\n signature = new Signature(signature, enc);\\n\\n var n = this.n;\\n var e = new BN(msg);\\n var r = signature.r;\\n var s = signature.s;\\n\\n // A set LSB signifies that the y-coordinate is odd\\n var isYOdd = j & 1;\\n var isSecondKey = j >> 1;\\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\\n throw new Error('Unable to find sencond key candinate');\\n\\n // 1.1. Let x = r + jn.\\n if (isSecondKey)\\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\\n else\\n r = this.curve.pointFromX(r, isYOdd);\\n\\n var rInv = signature.r.invm(n);\\n var s1 = n.sub(e).mul(rInv).umod(n);\\n var s2 = s.mul(rInv).umod(n);\\n\\n // 1.6.1 Compute Q = r^-1 (sR - eG)\\n // Q = r^-1 (sR + -eG)\\n return this.g.mulAdd(s1, r, s2);\\n};\\n\\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\\n signature = new Signature(signature, enc);\\n if (signature.recoveryParam !== null)\\n return signature.recoveryParam;\\n\\n for (var i = 0; i < 4; i++) {\\n var Qprime;\\n try {\\n Qprime = this.recoverPubKey(e, signature, i);\\n } catch (e) {\\n continue;\\n }\\n\\n if (Qprime.eq(Q))\\n return i;\\n }\\n throw new Error('Unable to find valid recovery factor');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/key.js\":\n/*!**********************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/key.js ***!\n \\**********************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\n\\nfunction KeyPair(ec, options) {\\n this.ec = ec;\\n this.priv = null;\\n this.pub = null;\\n\\n // KeyPair(ec, { priv: ..., pub: ... })\\n if (options.priv)\\n this._importPrivate(options.priv, options.privEnc);\\n if (options.pub)\\n this._importPublic(options.pub, options.pubEnc);\\n}\\nmodule.exports = KeyPair;\\n\\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\\n if (pub instanceof KeyPair)\\n return pub;\\n\\n return new KeyPair(ec, {\\n pub: pub,\\n pubEnc: enc\\n });\\n};\\n\\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\\n if (priv instanceof KeyPair)\\n return priv;\\n\\n return new KeyPair(ec, {\\n priv: priv,\\n privEnc: enc\\n });\\n};\\n\\nKeyPair.prototype.validate = function validate() {\\n var pub = this.getPublic();\\n\\n if (pub.isInfinity())\\n return { result: false, reason: 'Invalid public key' };\\n if (!pub.validate())\\n return { result: false, reason: 'Public key is not a point' };\\n if (!pub.mul(this.ec.curve.n).isInfinity())\\n return { result: false, reason: 'Public key * N != O' };\\n\\n return { result: true, reason: null };\\n};\\n\\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\\n // compact is optional argument\\n if (typeof compact === 'string') {\\n enc = compact;\\n compact = null;\\n }\\n\\n if (!this.pub)\\n this.pub = this.ec.g.mul(this.priv);\\n\\n if (!enc)\\n return this.pub;\\n\\n return this.pub.encode(enc, compact);\\n};\\n\\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\\n if (enc === 'hex')\\n return this.priv.toString(16, 2);\\n else\\n return this.priv;\\n};\\n\\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\\n this.priv = new BN(key, enc || 16);\\n\\n // Ensure that the priv won't be bigger than n, otherwise we may fail\\n // in fixed multiplication method\\n this.priv = this.priv.umod(this.ec.curve.n);\\n};\\n\\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\\n if (key.x || key.y) {\\n // Montgomery points only have an `x` coordinate.\\n // Weierstrass/Edwards points on the other hand have both `x` and\\n // `y` coordinates.\\n if (this.ec.curve.type === 'mont') {\\n assert(key.x, 'Need x coordinate');\\n } else if (this.ec.curve.type === 'short' ||\\n this.ec.curve.type === 'edwards') {\\n assert(key.x && key.y, 'Need both x and y coordinate');\\n }\\n this.pub = this.ec.curve.point(key.x, key.y);\\n return;\\n }\\n this.pub = this.ec.curve.decodePoint(key, enc);\\n};\\n\\n// ECDH\\nKeyPair.prototype.derive = function derive(pub) {\\n return pub.mul(this.priv).getX();\\n};\\n\\n// ECDSA\\nKeyPair.prototype.sign = function sign(msg, enc, options) {\\n return this.ec.sign(msg, this, enc, options);\\n};\\n\\nKeyPair.prototype.verify = function verify(msg, signature) {\\n return this.ec.verify(msg, signature, this);\\n};\\n\\nKeyPair.prototype.inspect = function inspect() {\\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/key.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/signature.js\":\n/*!****************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/signature.js ***!\n \\****************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\n\\nfunction Signature(options, enc) {\\n if (options instanceof Signature)\\n return options;\\n\\n if (this._importDER(options, enc))\\n return;\\n\\n assert(options.r && options.s, 'Signature without r or s');\\n this.r = new BN(options.r, 16);\\n this.s = new BN(options.s, 16);\\n if (options.recoveryParam === undefined)\\n this.recoveryParam = null;\\n else\\n this.recoveryParam = options.recoveryParam;\\n}\\nmodule.exports = Signature;\\n\\nfunction Position() {\\n this.place = 0;\\n}\\n\\nfunction getLength(buf, p) {\\n var initial = buf[p.place++];\\n if (!(initial & 0x80)) {\\n return initial;\\n }\\n var octetLen = initial & 0xf;\\n var val = 0;\\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\\n val <<= 8;\\n val |= buf[off];\\n }\\n p.place = off;\\n return val;\\n}\\n\\nfunction rmPadding(buf) {\\n var i = 0;\\n var len = buf.length - 1;\\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\\n i++;\\n }\\n if (i === 0) {\\n return buf;\\n }\\n return buf.slice(i);\\n}\\n\\nSignature.prototype._importDER = function _importDER(data, enc) {\\n data = utils.toArray(data, enc);\\n var p = new Position();\\n if (data[p.place++] !== 0x30) {\\n return false;\\n }\\n var len = getLength(data, p);\\n if ((len + p.place) !== data.length) {\\n return false;\\n }\\n if (data[p.place++] !== 0x02) {\\n return false;\\n }\\n var rlen = getLength(data, p);\\n var r = data.slice(p.place, rlen + p.place);\\n p.place += rlen;\\n if (data[p.place++] !== 0x02) {\\n return false;\\n }\\n var slen = getLength(data, p);\\n if (data.length !== slen + p.place) {\\n return false;\\n }\\n var s = data.slice(p.place, slen + p.place);\\n if (r[0] === 0 && (r[1] & 0x80)) {\\n r = r.slice(1);\\n }\\n if (s[0] === 0 && (s[1] & 0x80)) {\\n s = s.slice(1);\\n }\\n\\n this.r = new BN(r);\\n this.s = new BN(s);\\n this.recoveryParam = null;\\n\\n return true;\\n};\\n\\nfunction constructLength(arr, len) {\\n if (len < 0x80) {\\n arr.push(len);\\n return;\\n }\\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\\n arr.push(octets | 0x80);\\n while (--octets) {\\n arr.push((len >>> (octets << 3)) & 0xff);\\n }\\n arr.push(len);\\n}\\n\\nSignature.prototype.toDER = function toDER(enc) {\\n var r = this.r.toArray();\\n var s = this.s.toArray();\\n\\n // Pad values\\n if (r[0] & 0x80)\\n r = [ 0 ].concat(r);\\n // Pad values\\n if (s[0] & 0x80)\\n s = [ 0 ].concat(s);\\n\\n r = rmPadding(r);\\n s = rmPadding(s);\\n\\n while (!s[0] && !(s[1] & 0x80)) {\\n s = s.slice(1);\\n }\\n var arr = [ 0x02 ];\\n constructLength(arr, r.length);\\n arr = arr.concat(r);\\n arr.push(0x02);\\n constructLength(arr, s.length);\\n var backHalf = arr.concat(s);\\n var res = [ 0x30 ];\\n constructLength(res, backHalf.length);\\n res = res.concat(backHalf);\\n return utils.encode(res, enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/signature.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/index.js\":\n/*!***************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/index.js ***!\n \\***************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar curves = __webpack_require__(/*! ../curves */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\nvar parseBytes = utils.parseBytes;\\nvar KeyPair = __webpack_require__(/*! ./key */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/key.js\\\");\\nvar Signature = __webpack_require__(/*! ./signature */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/signature.js\\\");\\n\\nfunction EDDSA(curve) {\\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\\n\\n if (!(this instanceof EDDSA))\\n return new EDDSA(curve);\\n\\n var curve = curves[curve].curve;\\n this.curve = curve;\\n this.g = curve.g;\\n this.g.precompute(curve.n.bitLength() + 1);\\n\\n this.pointClass = curve.point().constructor;\\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\\n this.hash = hash.sha512;\\n}\\n\\nmodule.exports = EDDSA;\\n\\n/**\\n* @param {Array|String} message - message bytes\\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\\n* @returns {Signature} - signature\\n*/\\nEDDSA.prototype.sign = function sign(message, secret) {\\n message = parseBytes(message);\\n var key = this.keyFromSecret(secret);\\n var r = this.hashInt(key.messagePrefix(), message);\\n var R = this.g.mul(r);\\n var Rencoded = this.encodePoint(R);\\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\\n .mul(key.priv());\\n var S = r.add(s_).umod(this.curve.n);\\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\\n};\\n\\n/**\\n* @param {Array} message - message bytes\\n* @param {Array|String|Signature} sig - sig bytes\\n* @param {Array|String|Point|KeyPair} pub - public key\\n* @returns {Boolean} - true if public key matches sig of message\\n*/\\nEDDSA.prototype.verify = function verify(message, sig, pub) {\\n message = parseBytes(message);\\n sig = this.makeSignature(sig);\\n var key = this.keyFromPublic(pub);\\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\\n var SG = this.g.mul(sig.S());\\n var RplusAh = sig.R().add(key.pub().mul(h));\\n return RplusAh.eq(SG);\\n};\\n\\nEDDSA.prototype.hashInt = function hashInt() {\\n var hash = this.hash();\\n for (var i = 0; i < arguments.length; i++)\\n hash.update(arguments[i]);\\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\\n};\\n\\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\\n return KeyPair.fromPublic(this, pub);\\n};\\n\\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\\n return KeyPair.fromSecret(this, secret);\\n};\\n\\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\\n if (sig instanceof Signature)\\n return sig;\\n return new Signature(this, sig);\\n};\\n\\n/**\\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\\n*\\n* EDDSA defines methods for encoding and decoding points and integers. These are\\n* helper convenience methods, that pass along to utility functions implied\\n* parameters.\\n*\\n*/\\nEDDSA.prototype.encodePoint = function encodePoint(point) {\\n var enc = point.getY().toArray('le', this.encodingLength);\\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\\n return enc;\\n};\\n\\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\\n bytes = utils.parseBytes(bytes);\\n\\n var lastIx = bytes.length - 1;\\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\\n\\n var y = utils.intFromLE(normed);\\n return this.curve.pointFromY(y, xIsOdd);\\n};\\n\\nEDDSA.prototype.encodeInt = function encodeInt(num) {\\n return num.toArray('le', this.encodingLength);\\n};\\n\\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\\n return utils.intFromLE(bytes);\\n};\\n\\nEDDSA.prototype.isPoint = function isPoint(val) {\\n return val instanceof this.pointClass;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/key.js\":\n/*!*************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/key.js ***!\n \\*************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\nvar parseBytes = utils.parseBytes;\\nvar cachedProperty = utils.cachedProperty;\\n\\n/**\\n* @param {EDDSA} eddsa - instance\\n* @param {Object} params - public/private key parameters\\n*\\n* @param {Array<Byte>} [params.secret] - secret seed bytes\\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\\n*\\n*/\\nfunction KeyPair(eddsa, params) {\\n this.eddsa = eddsa;\\n this._secret = parseBytes(params.secret);\\n if (eddsa.isPoint(params.pub))\\n this._pub = params.pub;\\n else\\n this._pubBytes = parseBytes(params.pub);\\n}\\n\\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\\n if (pub instanceof KeyPair)\\n return pub;\\n return new KeyPair(eddsa, { pub: pub });\\n};\\n\\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\\n if (secret instanceof KeyPair)\\n return secret;\\n return new KeyPair(eddsa, { secret: secret });\\n};\\n\\nKeyPair.prototype.secret = function secret() {\\n return this._secret;\\n};\\n\\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\\n return this.eddsa.encodePoint(this.pub());\\n});\\n\\ncachedProperty(KeyPair, 'pub', function pub() {\\n if (this._pubBytes)\\n return this.eddsa.decodePoint(this._pubBytes);\\n return this.eddsa.g.mul(this.priv());\\n});\\n\\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\\n var eddsa = this.eddsa;\\n var hash = this.hash();\\n var lastIx = eddsa.encodingLength - 1;\\n\\n var a = hash.slice(0, eddsa.encodingLength);\\n a[0] &= 248;\\n a[lastIx] &= 127;\\n a[lastIx] |= 64;\\n\\n return a;\\n});\\n\\ncachedProperty(KeyPair, 'priv', function priv() {\\n return this.eddsa.decodeInt(this.privBytes());\\n});\\n\\ncachedProperty(KeyPair, 'hash', function hash() {\\n return this.eddsa.hash().update(this.secret()).digest();\\n});\\n\\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\\n return this.hash().slice(this.eddsa.encodingLength);\\n});\\n\\nKeyPair.prototype.sign = function sign(message) {\\n assert(this._secret, 'KeyPair can only verify');\\n return this.eddsa.sign(message, this);\\n};\\n\\nKeyPair.prototype.verify = function verify(message, sig) {\\n return this.eddsa.verify(message, sig, this);\\n};\\n\\nKeyPair.prototype.getSecret = function getSecret(enc) {\\n assert(this._secret, 'KeyPair is public only');\\n return utils.encode(this.secret(), enc);\\n};\\n\\nKeyPair.prototype.getPublic = function getPublic(enc) {\\n return utils.encode(this.pubBytes(), enc);\\n};\\n\\nmodule.exports = KeyPair;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/key.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/signature.js\":\n/*!*******************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/signature.js ***!\n \\*******************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\nvar cachedProperty = utils.cachedProperty;\\nvar parseBytes = utils.parseBytes;\\n\\n/**\\n* @param {EDDSA} eddsa - eddsa instance\\n* @param {Array<Bytes>|Object} sig -\\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\\n*/\\nfunction Signature(eddsa, sig) {\\n this.eddsa = eddsa;\\n\\n if (typeof sig !== 'object')\\n sig = parseBytes(sig);\\n\\n if (Array.isArray(sig)) {\\n sig = {\\n R: sig.slice(0, eddsa.encodingLength),\\n S: sig.slice(eddsa.encodingLength)\\n };\\n }\\n\\n assert(sig.R && sig.S, 'Signature without R or S');\\n\\n if (eddsa.isPoint(sig.R))\\n this._R = sig.R;\\n if (sig.S instanceof BN)\\n this._S = sig.S;\\n\\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\\n}\\n\\ncachedProperty(Signature, 'S', function S() {\\n return this.eddsa.decodeInt(this.Sencoded());\\n});\\n\\ncachedProperty(Signature, 'R', function R() {\\n return this.eddsa.decodePoint(this.Rencoded());\\n});\\n\\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\\n return this.eddsa.encodePoint(this.R());\\n});\\n\\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\\n return this.eddsa.encodeInt(this.S());\\n});\\n\\nSignature.prototype.toBytes = function toBytes() {\\n return this.Rencoded().concat(this.Sencoded());\\n};\\n\\nSignature.prototype.toHex = function toHex() {\\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\\n};\\n\\nmodule.exports = Signature;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/signature.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js\":\n/*!*************************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js ***!\n \\*************************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = {\\n doubles: {\\n step: 4,\\n points: [\\n [\\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\\n ],\\n [\\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\\n ],\\n [\\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\\n ],\\n [\\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\\n ],\\n [\\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\\n ],\\n [\\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\\n ],\\n [\\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\\n ],\\n [\\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\\n ],\\n [\\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\\n ],\\n [\\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\\n ],\\n [\\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\\n ],\\n [\\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\\n ],\\n [\\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\\n ],\\n [\\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\\n ],\\n [\\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\\n ],\\n [\\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\\n ],\\n [\\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\\n ],\\n [\\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\\n ],\\n [\\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\\n ],\\n [\\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\\n ],\\n [\\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\\n ],\\n [\\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\\n ],\\n [\\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\\n ],\\n [\\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\\n ],\\n [\\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\\n ],\\n [\\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\\n ],\\n [\\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\\n ],\\n [\\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\\n ],\\n [\\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\\n ],\\n [\\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\\n ],\\n [\\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\\n ],\\n [\\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\\n ],\\n [\\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\\n ],\\n [\\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\\n ],\\n [\\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\\n ],\\n [\\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\\n ],\\n [\\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\\n ],\\n [\\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\\n ],\\n [\\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\\n ],\\n [\\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\\n ],\\n [\\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\\n ],\\n [\\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\\n ],\\n [\\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\\n ],\\n [\\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\\n ],\\n [\\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\\n ],\\n [\\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\\n ],\\n [\\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\\n ],\\n [\\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\\n ],\\n [\\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\\n ],\\n [\\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\\n ],\\n [\\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\\n ],\\n [\\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\\n ],\\n [\\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\\n ],\\n [\\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\\n ],\\n [\\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\\n ],\\n [\\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\\n ],\\n [\\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\\n ],\\n [\\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\\n ],\\n [\\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\\n ],\\n [\\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\\n ],\\n [\\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\\n ],\\n [\\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\\n ],\\n [\\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\\n ],\\n [\\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\\n ],\\n [\\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\\n ]\\n ]\\n },\\n naf: {\\n wnd: 7,\\n points: [\\n [\\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\\n ],\\n [\\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\\n ],\\n [\\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\\n ],\\n [\\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\\n ],\\n [\\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\\n ],\\n [\\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\\n ],\\n [\\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\\n ],\\n [\\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\\n ],\\n [\\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\\n ],\\n [\\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\\n ],\\n [\\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\\n ],\\n [\\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\\n ],\\n [\\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\\n ],\\n [\\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\\n ],\\n [\\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\\n ],\\n [\\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\\n ],\\n [\\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\\n ],\\n [\\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\\n ],\\n [\\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\\n ],\\n [\\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\\n ],\\n [\\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\\n ],\\n [\\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\\n ],\\n [\\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\\n ],\\n [\\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\\n ],\\n [\\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\\n ],\\n [\\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\\n ],\\n [\\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\\n ],\\n [\\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\\n ],\\n [\\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\\n ],\\n [\\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\\n ],\\n [\\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\\n ],\\n [\\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\\n ],\\n [\\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\\n ],\\n [\\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\\n ],\\n [\\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\\n ],\\n [\\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\\n ],\\n [\\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\\n ],\\n [\\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\\n ],\\n [\\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\\n ],\\n [\\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\\n ],\\n [\\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\\n ],\\n [\\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\\n ],\\n [\\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\\n ],\\n [\\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\\n ],\\n [\\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\\n ],\\n [\\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\\n ],\\n [\\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\\n ],\\n [\\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\\n ],\\n [\\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\\n ],\\n [\\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\\n ],\\n [\\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\\n ],\\n [\\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\\n ],\\n [\\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\\n ],\\n [\\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\\n ],\\n [\\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\\n ],\\n [\\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\\n ],\\n [\\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\\n ],\\n [\\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\\n ],\\n [\\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\\n ],\\n [\\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\\n ],\\n [\\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\\n ],\\n [\\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\\n ],\\n [\\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\\n ],\\n [\\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\\n ],\\n [\\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\\n ],\\n [\\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\\n ],\\n [\\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\\n ],\\n [\\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\\n ],\\n [\\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\\n ],\\n [\\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\\n ],\\n [\\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\\n ],\\n [\\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\\n ],\\n [\\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\\n ],\\n [\\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\\n ],\\n [\\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\\n ],\\n [\\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\\n ],\\n [\\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\\n ],\\n [\\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\\n ],\\n [\\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\\n ],\\n [\\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\\n ],\\n [\\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\\n ],\\n [\\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\\n ],\\n [\\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\\n ],\\n [\\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\\n ],\\n [\\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\\n ],\\n [\\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\\n ],\\n [\\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\\n ],\\n [\\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\\n ],\\n [\\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\\n ],\\n [\\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\\n ],\\n [\\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\\n ],\\n [\\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\\n ],\\n [\\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\\n ],\\n [\\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\\n ],\\n [\\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\\n ],\\n [\\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\\n ],\\n [\\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\\n ],\\n [\\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\\n ],\\n [\\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\\n ],\\n [\\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\\n ],\\n [\\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\\n ],\\n [\\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\\n ],\\n [\\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\\n ],\\n [\\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\\n ],\\n [\\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\\n ],\\n [\\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\\n ],\\n [\\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\\n ],\\n [\\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\\n ],\\n [\\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\\n ],\\n [\\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\\n ],\\n [\\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\\n ],\\n [\\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\\n ],\\n [\\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\\n ],\\n [\\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\\n ],\\n [\\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\\n ],\\n [\\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\\n ],\\n [\\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\\n ],\\n [\\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\\n ],\\n [\\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\\n ],\\n [\\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\\n ],\\n [\\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\\n ],\\n [\\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\\n ],\\n [\\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\\n ],\\n [\\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\\n ],\\n [\\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\\n ],\\n [\\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\\n ],\\n [\\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\\n ]\\n ]\\n }\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\":\n/*!*********************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js ***!\n \\*********************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = exports;\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar minAssert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\nvar minUtils = __webpack_require__(/*! minimalistic-crypto-utils */ \\\"./node_modules/minimalistic-crypto-utils/lib/utils.js\\\");\\n\\nutils.assert = minAssert;\\nutils.toArray = minUtils.toArray;\\nutils.zero2 = minUtils.zero2;\\nutils.toHex = minUtils.toHex;\\nutils.encode = minUtils.encode;\\n\\n// Represent num in a w-NAF form\\nfunction getNAF(num, w, bits) {\\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\\n naf.fill(0);\\n\\n var ws = 1 << (w + 1);\\n var k = num.clone();\\n\\n for (var i = 0; i < naf.length; i++) {\\n var z;\\n var mod = k.andln(ws - 1);\\n if (k.isOdd()) {\\n if (mod > (ws >> 1) - 1)\\n z = (ws >> 1) - mod;\\n else\\n z = mod;\\n k.isubn(z);\\n } else {\\n z = 0;\\n }\\n\\n naf[i] = z;\\n k.iushrn(1);\\n }\\n\\n return naf;\\n}\\nutils.getNAF = getNAF;\\n\\n// Represent k1, k2 in a Joint Sparse Form\\nfunction getJSF(k1, k2) {\\n var jsf = [\\n [],\\n []\\n ];\\n\\n k1 = k1.clone();\\n k2 = k2.clone();\\n var d1 = 0;\\n var d2 = 0;\\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\\n\\n // First phase\\n var m14 = (k1.andln(3) + d1) & 3;\\n var m24 = (k2.andln(3) + d2) & 3;\\n if (m14 === 3)\\n m14 = -1;\\n if (m24 === 3)\\n m24 = -1;\\n var u1;\\n if ((m14 & 1) === 0) {\\n u1 = 0;\\n } else {\\n var m8 = (k1.andln(7) + d1) & 7;\\n if ((m8 === 3 || m8 === 5) && m24 === 2)\\n u1 = -m14;\\n else\\n u1 = m14;\\n }\\n jsf[0].push(u1);\\n\\n var u2;\\n if ((m24 & 1) === 0) {\\n u2 = 0;\\n } else {\\n var m8 = (k2.andln(7) + d2) & 7;\\n if ((m8 === 3 || m8 === 5) && m14 === 2)\\n u2 = -m24;\\n else\\n u2 = m24;\\n }\\n jsf[1].push(u2);\\n\\n // Second phase\\n if (2 * d1 === u1 + 1)\\n d1 = 1 - d1;\\n if (2 * d2 === u2 + 1)\\n d2 = 1 - d2;\\n k1.iushrn(1);\\n k2.iushrn(1);\\n }\\n\\n return jsf;\\n}\\nutils.getJSF = getJSF;\\n\\nfunction cachedProperty(obj, name, computer) {\\n var key = '_' + name;\\n obj.prototype[name] = function cachedProperty() {\\n return this[key] !== undefined ? this[key] :\\n this[key] = computer.call(this);\\n };\\n}\\nutils.cachedProperty = cachedProperty;\\n\\nfunction parseBytes(bytes) {\\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\\n bytes;\\n}\\nutils.parseBytes = parseBytes;\\n\\nfunction intFromLE(bytes) {\\n return new BN(bytes, 'hex', 'le');\\n}\\nutils.intFromLE = intFromLE;\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/package.json\":\n/*!************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/package.json ***!\n \\************************************************************************************/\n/*! exports provided: _from, _id, _inBundle, _integrity, _location, _phantomChildren, _requested, _requiredBy, _resolved, _shasum, _spec, _where, author, bugs, bundleDependencies, dependencies, deprecated, description, devDependencies, files, homepage, keywords, license, main, name, repository, scripts, version, default */\n/***/ (function(module) {\n\neval(\"module.exports = {\\\"_from\\\":\\\"elliptic@6.5.2\\\",\\\"_id\\\":\\\"elliptic@6.5.2\\\",\\\"_inBundle\\\":false,\\\"_integrity\\\":\\\"sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==\\\",\\\"_location\\\":\\\"/@ethersproject/signing-key/elliptic\\\",\\\"_phantomChildren\\\":{},\\\"_requested\\\":{\\\"type\\\":\\\"version\\\",\\\"registry\\\":true,\\\"raw\\\":\\\"elliptic@6.5.2\\\",\\\"name\\\":\\\"elliptic\\\",\\\"escapedName\\\":\\\"elliptic\\\",\\\"rawSpec\\\":\\\"6.5.2\\\",\\\"saveSpec\\\":null,\\\"fetchSpec\\\":\\\"6.5.2\\\"},\\\"_requiredBy\\\":[\\\"/@ethersproject/signing-key\\\"],\\\"_resolved\\\":\\\"https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz\\\",\\\"_shasum\\\":\\\"05c5678d7173c049d8ca433552224a495d0e3762\\\",\\\"_spec\\\":\\\"elliptic@6.5.2\\\",\\\"_where\\\":\\\"/Users/kenzo/profile-hover/node_modules/@ethersproject/signing-key\\\",\\\"author\\\":{\\\"name\\\":\\\"Fedor Indutny\\\",\\\"email\\\":\\\"fedor@indutny.com\\\"},\\\"bugs\\\":{\\\"url\\\":\\\"https://github.com/indutny/elliptic/issues\\\"},\\\"bundleDependencies\\\":false,\\\"dependencies\\\":{\\\"bn.js\\\":\\\"^4.4.0\\\",\\\"brorand\\\":\\\"^1.0.1\\\",\\\"hash.js\\\":\\\"^1.0.0\\\",\\\"hmac-drbg\\\":\\\"^1.0.0\\\",\\\"inherits\\\":\\\"^2.0.1\\\",\\\"minimalistic-assert\\\":\\\"^1.0.0\\\",\\\"minimalistic-crypto-utils\\\":\\\"^1.0.0\\\"},\\\"deprecated\\\":false,\\\"description\\\":\\\"EC cryptography\\\",\\\"devDependencies\\\":{\\\"brfs\\\":\\\"^1.4.3\\\",\\\"coveralls\\\":\\\"^3.0.8\\\",\\\"grunt\\\":\\\"^1.0.4\\\",\\\"grunt-browserify\\\":\\\"^5.0.0\\\",\\\"grunt-cli\\\":\\\"^1.2.0\\\",\\\"grunt-contrib-connect\\\":\\\"^1.0.0\\\",\\\"grunt-contrib-copy\\\":\\\"^1.0.0\\\",\\\"grunt-contrib-uglify\\\":\\\"^1.0.1\\\",\\\"grunt-mocha-istanbul\\\":\\\"^3.0.1\\\",\\\"grunt-saucelabs\\\":\\\"^9.0.1\\\",\\\"istanbul\\\":\\\"^0.4.2\\\",\\\"jscs\\\":\\\"^3.0.7\\\",\\\"jshint\\\":\\\"^2.10.3\\\",\\\"mocha\\\":\\\"^6.2.2\\\"},\\\"files\\\":[\\\"lib\\\"],\\\"homepage\\\":\\\"https://github.com/indutny/elliptic\\\",\\\"keywords\\\":[\\\"EC\\\",\\\"Elliptic\\\",\\\"curve\\\",\\\"Cryptography\\\"],\\\"license\\\":\\\"MIT\\\",\\\"main\\\":\\\"lib/elliptic.js\\\",\\\"name\\\":\\\"elliptic\\\",\\\"repository\\\":{\\\"type\\\":\\\"git\\\",\\\"url\\\":\\\"git+ssh://git@github.com/indutny/elliptic.git\\\"},\\\"scripts\\\":{\\\"jscs\\\":\\\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\\\",\\\"jshint\\\":\\\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\\\",\\\"lint\\\":\\\"npm run jscs && npm run jshint\\\",\\\"test\\\":\\\"npm run lint && npm run unit\\\",\\\"unit\\\":\\\"istanbul test _mocha --reporter=spec test/index.js\\\",\\\"version\\\":\\\"grunt dist && git add dist/\\\"},\\\"version\\\":\\\"6.5.2\\\"};\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/package.json?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/_version.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/_version.js ***!\n \\*****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"strings/5.0.0-beta.136\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/bytes32.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/bytes32.js ***!\n \\****************************************************************/\n/*! exports provided: formatBytes32String, parseBytes32String */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"formatBytes32String\\\", function() { return formatBytes32String; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"parseBytes32String\\\", function() { return parseBytes32String; });\\n/* harmony import */ var _ethersproject_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/constants */ \\\"./node_modules/@ethersproject/constants/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _utf8__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utf8 */ \\\"./node_modules/@ethersproject/strings/lib.esm/utf8.js\\\");\\n\\n\\n\\n\\nfunction formatBytes32String(text) {\\n // Get the bytes\\n const bytes = Object(_utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8Bytes\\\"])(text);\\n // Check we have room for null-termination\\n if (bytes.length > 31) {\\n throw new Error(\\\"bytes32 string must be less than 32 bytes\\\");\\n }\\n // Zero-pad (implicitly null-terminates)\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([bytes, _ethersproject_constants__WEBPACK_IMPORTED_MODULE_0__[\\\"HashZero\\\"]]).slice(0, 32));\\n}\\nfunction parseBytes32String(bytes) {\\n const data = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(bytes);\\n // Must be 32 bytes with a null-termination\\n if (data.length !== 32) {\\n throw new Error(\\\"invalid bytes32 - not 32 bytes long\\\");\\n }\\n if (data[31] !== 0) {\\n throw new Error(\\\"invalid bytes32 string - no null terminator\\\");\\n }\\n // Find the null termination\\n let length = 31;\\n while (data[length - 1] === 0) {\\n length--;\\n }\\n // Determine the string value\\n return Object(_utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8String\\\"])(data.slice(0, length));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/bytes32.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/idna.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/idna.js ***!\n \\*************************************************************/\n/*! exports provided: _nameprepTableA1, _nameprepTableB2, _nameprepTableC, nameprep */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_nameprepTableA1\\\", function() { return _nameprepTableA1; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_nameprepTableB2\\\", function() { return _nameprepTableB2; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_nameprepTableC\\\", function() { return _nameprepTableC; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"nameprep\\\", function() { return nameprep; });\\n/* harmony import */ var _utf8__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utf8 */ \\\"./node_modules/@ethersproject/strings/lib.esm/utf8.js\\\");\\n\\n\\nfunction bytes2(data) {\\n if ((data.length % 4) !== 0) {\\n throw new Error(\\\"bad data\\\");\\n }\\n let result = [];\\n for (let i = 0; i < data.length; i += 4) {\\n result.push(parseInt(data.substring(i, i + 4), 16));\\n }\\n return result;\\n}\\nfunction createTable(data, func) {\\n if (!func) {\\n func = function (value) { return [parseInt(value, 16)]; };\\n }\\n let lo = 0;\\n let result = {};\\n data.split(\\\",\\\").forEach((pair) => {\\n let comps = pair.split(\\\":\\\");\\n lo += parseInt(comps[0], 16);\\n result[lo] = func(comps[1]);\\n });\\n return result;\\n}\\nfunction createRangeTable(data) {\\n let hi = 0;\\n return data.split(\\\",\\\").map((v) => {\\n let comps = v.split(\\\"-\\\");\\n if (comps.length === 1) {\\n comps[1] = \\\"0\\\";\\n }\\n else if (comps[1] === \\\"\\\") {\\n comps[1] = \\\"1\\\";\\n }\\n let lo = hi + parseInt(comps[0], 16);\\n hi = parseInt(comps[1], 16);\\n return { l: lo, h: hi };\\n });\\n}\\nfunction matchMap(value, ranges) {\\n let lo = 0;\\n for (let i = 0; i < ranges.length; i++) {\\n let range = ranges[i];\\n lo += range.l;\\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\\n if (range.e && range.e.indexOf(value - lo) !== -1) {\\n continue;\\n }\\n return range;\\n }\\n }\\n return null;\\n}\\nconst Table_A_1_ranges = createRangeTable(\\\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\\\");\\n// @TODO: Make this relative...\\nconst Table_B_1_flags = \\\"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\\\".split(\\\",\\\").map((v) => parseInt(v, 16));\\nconst Table_B_2_ranges = [\\n { h: 25, s: 32, l: 65 },\\n { h: 30, s: 32, e: [23], l: 127 },\\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\\n { h: 14, s: 1, l: 57, d: 2 },\\n { h: 44, s: 1, l: 17, d: 2 },\\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\\n { h: 16, s: 1, l: 68, d: 2 },\\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\\n { h: 26, s: 32, e: [17], l: 435 },\\n { h: 22, s: 1, l: 71, d: 2 },\\n { h: 15, s: 80, l: 40 },\\n { h: 31, s: 32, l: 16 },\\n { h: 32, s: 1, l: 80, d: 2 },\\n { h: 52, s: 1, l: 42, d: 2 },\\n { h: 12, s: 1, l: 55, d: 2 },\\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\\n { h: 14, s: 1, l: 48, d: 2 },\\n { h: 37, s: 48, l: 49 },\\n { h: 148, s: 1, l: 6351, d: 2 },\\n { h: 88, s: 1, l: 160, d: 2 },\\n { h: 15, s: 16, l: 704 },\\n { h: 25, s: 26, l: 854 },\\n { h: 25, s: 32, l: 55915 },\\n { h: 37, s: 40, l: 1247 },\\n { h: 25, s: -119711, l: 53248 },\\n { h: 25, s: -119763, l: 52 },\\n { h: 25, s: -119815, l: 52 },\\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\\n { h: 25, s: -119919, l: 52 },\\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\\n { h: 25, s: -120075, l: 52 },\\n { h: 25, s: -120127, l: 52 },\\n { h: 25, s: -120179, l: 52 },\\n { h: 25, s: -120231, l: 52 },\\n { h: 25, s: -120283, l: 52 },\\n { h: 25, s: -120335, l: 52 },\\n { h: 24, s: -119543, e: [17], l: 56 },\\n { h: 24, s: -119601, e: [17], l: 58 },\\n { h: 24, s: -119659, e: [17], l: 58 },\\n { h: 24, s: -119717, e: [17], l: 58 },\\n { h: 24, s: -119775, e: [17], l: 58 }\\n];\\nconst Table_B_2_lut_abs = createTable(\\\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\\\");\\nconst Table_B_2_lut_rel = createTable(\\\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\\\");\\nconst Table_B_2_complex = createTable(\\\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\\\", bytes2);\\nconst Table_C_ranges = createRangeTable(\\\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\\\");\\nfunction flatten(values) {\\n return values.reduce((accum, value) => {\\n value.forEach((value) => { accum.push(value); });\\n return accum;\\n }, []);\\n}\\nfunction _nameprepTableA1(codepoint) {\\n return !!matchMap(codepoint, Table_A_1_ranges);\\n}\\nfunction _nameprepTableB2(codepoint) {\\n let range = matchMap(codepoint, Table_B_2_ranges);\\n if (range) {\\n return [codepoint + range.s];\\n }\\n let codes = Table_B_2_lut_abs[codepoint];\\n if (codes) {\\n return codes;\\n }\\n let shift = Table_B_2_lut_rel[codepoint];\\n if (shift) {\\n return [codepoint + shift[0]];\\n }\\n let complex = Table_B_2_complex[codepoint];\\n if (complex) {\\n return complex;\\n }\\n return null;\\n}\\nfunction _nameprepTableC(codepoint) {\\n return !!matchMap(codepoint, Table_C_ranges);\\n}\\nfunction nameprep(value) {\\n // This allows platforms with incomplete normalize to bypass\\n // it for very basic names which the built-in toLowerCase\\n // will certainly handle correctly\\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\\n return value.toLowerCase();\\n }\\n // Get the code points (keeping the current normalization)\\n let codes = Object(_utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"toUtf8CodePoints\\\"])(value);\\n codes = flatten(codes.map((code) => {\\n // Substitute Table B.1 (Maps to Nothing)\\n if (Table_B_1_flags.indexOf(code) >= 0) {\\n return [];\\n }\\n if (code >= 0xfe00 && code <= 0xfe0f) {\\n return [];\\n }\\n // Substitute Table B.2 (Case Folding)\\n let codesTableB2 = _nameprepTableB2(code);\\n if (codesTableB2) {\\n return codesTableB2;\\n }\\n // No Substitution\\n return [code];\\n }));\\n // Normalize using form KC\\n codes = Object(_utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"toUtf8CodePoints\\\"])(Object(_utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"_toUtf8String\\\"])(codes), _utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"UnicodeNormalizationForm\\\"].NFKC);\\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\\n codes.forEach((code) => {\\n if (_nameprepTableC(code)) {\\n throw new Error(\\\"STRINGPREP_CONTAINS_PROHIBITED\\\");\\n }\\n });\\n // Prohibit Unassigned Code Points (Table A.1)\\n codes.forEach((code) => {\\n if (_nameprepTableA1(code)) {\\n throw new Error(\\\"STRINGPREP_CONTAINS_UNASSIGNED\\\");\\n }\\n });\\n // IDNA extras\\n let name = Object(_utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"_toUtf8String\\\"])(codes);\\n // IDNA: 4.2.3.1\\n if (name.substring(0, 1) === \\\"-\\\" || name.substring(2, 4) === \\\"--\\\" || name.substring(name.length - 1) === \\\"-\\\") {\\n throw new Error(\\\"invalid hyphen\\\");\\n }\\n // IDNA: 4.2.4\\n if (name.length > 63) {\\n throw new Error(\\\"too long\\\");\\n }\\n return name;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/idna.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/index.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/index.js ***!\n \\**************************************************************/\n/*! exports provided: _toEscapedUtf8String, toUtf8Bytes, toUtf8CodePoints, toUtf8String, Utf8ErrorFuncs, Utf8ErrorReason, UnicodeNormalizationForm, formatBytes32String, parseBytes32String, nameprep */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _bytes32__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bytes32 */ \\\"./node_modules/@ethersproject/strings/lib.esm/bytes32.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"formatBytes32String\\\", function() { return _bytes32__WEBPACK_IMPORTED_MODULE_0__[\\\"formatBytes32String\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"parseBytes32String\\\", function() { return _bytes32__WEBPACK_IMPORTED_MODULE_0__[\\\"parseBytes32String\\\"]; });\\n\\n/* harmony import */ var _idna__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./idna */ \\\"./node_modules/@ethersproject/strings/lib.esm/idna.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"nameprep\\\", function() { return _idna__WEBPACK_IMPORTED_MODULE_1__[\\\"nameprep\\\"]; });\\n\\n/* harmony import */ var _utf8__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utf8 */ \\\"./node_modules/@ethersproject/strings/lib.esm/utf8.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"_toEscapedUtf8String\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"_toEscapedUtf8String\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8Bytes\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8Bytes\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8CodePoints\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8CodePoints\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8String\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8String\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"Utf8ErrorFuncs\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"Utf8ErrorFuncs\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"Utf8ErrorReason\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"Utf8ErrorReason\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"UnicodeNormalizationForm\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"UnicodeNormalizationForm\\\"]; });\\n\\n\\n\\n\\n\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/utf8.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/utf8.js ***!\n \\*************************************************************/\n/*! exports provided: UnicodeNormalizationForm, Utf8ErrorReason, Utf8ErrorFuncs, toUtf8Bytes, _toEscapedUtf8String, _toUtf8String, toUtf8String, toUtf8CodePoints */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"UnicodeNormalizationForm\\\", function() { return UnicodeNormalizationForm; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Utf8ErrorReason\\\", function() { return Utf8ErrorReason; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Utf8ErrorFuncs\\\", function() { return Utf8ErrorFuncs; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8Bytes\\\", function() { return toUtf8Bytes; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_toEscapedUtf8String\\\", function() { return _toEscapedUtf8String; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_toUtf8String\\\", function() { return _toUtf8String; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8String\\\", function() { return toUtf8String; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8CodePoints\\\", function() { return toUtf8CodePoints; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/strings/lib.esm/_version.js\\\");\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_2__[\\\"version\\\"]);\\n///////////////////////////////\\nvar UnicodeNormalizationForm;\\n(function (UnicodeNormalizationForm) {\\n UnicodeNormalizationForm[\\\"current\\\"] = \\\"\\\";\\n UnicodeNormalizationForm[\\\"NFC\\\"] = \\\"NFC\\\";\\n UnicodeNormalizationForm[\\\"NFD\\\"] = \\\"NFD\\\";\\n UnicodeNormalizationForm[\\\"NFKC\\\"] = \\\"NFKC\\\";\\n UnicodeNormalizationForm[\\\"NFKD\\\"] = \\\"NFKD\\\";\\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\\n;\\nvar Utf8ErrorReason;\\n(function (Utf8ErrorReason) {\\n // A continuation byte was present where there was nothing to continue\\n // - offset = the index the codepoint began in\\n Utf8ErrorReason[\\\"UNEXPECTED_CONTINUE\\\"] = \\\"unexpected continuation byte\\\";\\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\\n // - offset = the index the codepoint began in\\n Utf8ErrorReason[\\\"BAD_PREFIX\\\"] = \\\"bad codepoint prefix\\\";\\n // The string is too short to process the expected codepoint\\n // - offset = the index the codepoint began in\\n Utf8ErrorReason[\\\"OVERRUN\\\"] = \\\"string overrun\\\";\\n // A missing continuation byte was expected but not found\\n // - offset = the index the continuation byte was expected at\\n Utf8ErrorReason[\\\"MISSING_CONTINUE\\\"] = \\\"missing continuation byte\\\";\\n // The computed code point is outside the range for UTF-8\\n // - offset = start of this codepoint\\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\\n Utf8ErrorReason[\\\"OUT_OF_RANGE\\\"] = \\\"out of UTF-8 range\\\";\\n // UTF-8 strings may not contain UTF-16 surrogate pairs\\n // - offset = start of this codepoint\\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\\n Utf8ErrorReason[\\\"UTF16_SURROGATE\\\"] = \\\"UTF-16 surrogate\\\";\\n // The string is an overlong reperesentation\\n // - offset = start of this codepoint\\n // - badCodepoint = the computed codepoint; already bounds checked\\n Utf8ErrorReason[\\\"OVERLONG\\\"] = \\\"overlong representation\\\";\\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\\n;\\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \\\"bytes\\\", bytes);\\n}\\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\\n let i = 0;\\n for (let o = offset + 1; o < bytes.length; o++) {\\n if (bytes[o] >> 6 !== 0x02) {\\n break;\\n }\\n i++;\\n }\\n return i;\\n }\\n // This byte runs us past the end of the string, so just jump to the end\\n // (but the first byte was read already read and therefore skipped)\\n if (reason === Utf8ErrorReason.OVERRUN) {\\n return bytes.length - offset - 1;\\n }\\n // Nothing to skip\\n return 0;\\n}\\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\\n // Overlong representations are otherwise \\\"valid\\\" code points; just non-deistingtished\\n if (reason === Utf8ErrorReason.OVERLONG) {\\n output.push(badCodepoint);\\n return 0;\\n }\\n // Put the replacement character into the output\\n output.push(0xfffd);\\n // Otherwise, process as if ignoring errors\\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\\n}\\n// Common error handing strategies\\nconst Utf8ErrorFuncs = Object.freeze({\\n error: errorFunc,\\n ignore: ignoreFunc,\\n replace: replaceFunc\\n});\\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\\nfunction getUtf8CodePoints(bytes, onError) {\\n if (onError == null) {\\n onError = Utf8ErrorFuncs.error;\\n }\\n bytes = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(bytes);\\n const result = [];\\n let i = 0;\\n // Invalid bytes are ignored\\n while (i < bytes.length) {\\n const c = bytes[i++];\\n // 0xxx xxxx\\n if (c >> 7 === 0) {\\n result.push(c);\\n continue;\\n }\\n // Multibyte; how many bytes left for this character?\\n let extraLength = null;\\n let overlongMask = null;\\n // 110x xxxx 10xx xxxx\\n if ((c & 0xe0) === 0xc0) {\\n extraLength = 1;\\n overlongMask = 0x7f;\\n // 1110 xxxx 10xx xxxx 10xx xxxx\\n }\\n else if ((c & 0xf0) === 0xe0) {\\n extraLength = 2;\\n overlongMask = 0x7ff;\\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\\n }\\n else if ((c & 0xf8) === 0xf0) {\\n extraLength = 3;\\n overlongMask = 0xffff;\\n }\\n else {\\n if ((c & 0xc0) === 0x80) {\\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\\n }\\n else {\\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\\n }\\n continue;\\n }\\n // Do we have enough bytes in our data?\\n if (i - 1 + extraLength >= bytes.length) {\\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\\n continue;\\n }\\n // Remove the length prefix from the char\\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\\n for (let j = 0; j < extraLength; j++) {\\n let nextChar = bytes[i];\\n // Invalid continuation byte\\n if ((nextChar & 0xc0) != 0x80) {\\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\\n res = null;\\n break;\\n }\\n ;\\n res = (res << 6) | (nextChar & 0x3f);\\n i++;\\n }\\n // See above loop for invalid contimuation byte\\n if (res === null) {\\n continue;\\n }\\n // Maximum code point\\n if (res > 0x10ffff) {\\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\\n continue;\\n }\\n // Reserved for UTF-16 surrogate halves\\n if (res >= 0xd800 && res <= 0xdfff) {\\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\\n continue;\\n }\\n // Check for overlong sequences (more bytes than needed)\\n if (res <= overlongMask) {\\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\\n continue;\\n }\\n result.push(res);\\n }\\n return result;\\n}\\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\\nfunction toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\\n if (form != UnicodeNormalizationForm.current) {\\n logger.checkNormalize();\\n str = str.normalize(form);\\n }\\n let result = [];\\n for (let i = 0; i < str.length; i++) {\\n const c = str.charCodeAt(i);\\n if (c < 0x80) {\\n result.push(c);\\n }\\n else if (c < 0x800) {\\n result.push((c >> 6) | 0xc0);\\n result.push((c & 0x3f) | 0x80);\\n }\\n else if ((c & 0xfc00) == 0xd800) {\\n i++;\\n const c2 = str.charCodeAt(i);\\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\\n throw new Error(\\\"invalid utf-8 string\\\");\\n }\\n // Surrogate Pair\\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\\n result.push((pair >> 18) | 0xf0);\\n result.push(((pair >> 12) & 0x3f) | 0x80);\\n result.push(((pair >> 6) & 0x3f) | 0x80);\\n result.push((pair & 0x3f) | 0x80);\\n }\\n else {\\n result.push((c >> 12) | 0xe0);\\n result.push(((c >> 6) & 0x3f) | 0x80);\\n result.push((c & 0x3f) | 0x80);\\n }\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(result);\\n}\\n;\\nfunction escapeChar(value) {\\n const hex = (\\\"0000\\\" + value.toString(16));\\n return \\\"\\\\\\\\u\\\" + hex.substring(hex.length - 4);\\n}\\nfunction _toEscapedUtf8String(bytes, onError) {\\n return '\\\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\\n if (codePoint < 256) {\\n switch (codePoint) {\\n case 8: return \\\"\\\\\\\\b\\\";\\n case 9: return \\\"\\\\\\\\t\\\";\\n case 10: return \\\"\\\\\\\\n\\\";\\n case 13: return \\\"\\\\\\\\r\\\";\\n case 34: return \\\"\\\\\\\\\\\\\\\"\\\";\\n case 92: return \\\"\\\\\\\\\\\\\\\\\\\";\\n }\\n if (codePoint >= 32 && codePoint < 127) {\\n return String.fromCharCode(codePoint);\\n }\\n }\\n if (codePoint <= 0xffff) {\\n return escapeChar(codePoint);\\n }\\n codePoint -= 0x10000;\\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\\n }).join(\\\"\\\") + '\\\"';\\n}\\nfunction _toUtf8String(codePoints) {\\n return codePoints.map((codePoint) => {\\n if (codePoint <= 0xffff) {\\n return String.fromCharCode(codePoint);\\n }\\n codePoint -= 0x10000;\\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\\n }).join(\\\"\\\");\\n}\\nfunction toUtf8String(bytes, onError) {\\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\\n}\\nfunction toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\\n return getUtf8CodePoints(toUtf8Bytes(str, form));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/utf8.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/transactions/lib.esm/_version.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/transactions/lib.esm/_version.js ***!\n \\**********************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"transactions/5.0.0-beta.134\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/transactions/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/transactions/lib.esm/index.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@ethersproject/transactions/lib.esm/index.js ***!\n \\*******************************************************************/\n/*! exports provided: computeAddress, recoverAddress, serialize, parse */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"computeAddress\\\", function() { return computeAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"recoverAddress\\\", function() { return recoverAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"serialize\\\", function() { return serialize; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"parse\\\", function() { return parse; });\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/constants */ \\\"./node_modules/@ethersproject/constants/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/rlp */ \\\"./node_modules/@ethersproject/rlp/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/signing-key */ \\\"./node_modules/@ethersproject/signing-key/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/transactions/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_8__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_9__[\\\"version\\\"]);\\n///////////////////////////////\\nfunction handleAddress(value) {\\n if (value === \\\"0x\\\") {\\n return null;\\n }\\n return Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(value);\\n}\\nfunction handleNumber(value) {\\n if (value === \\\"0x\\\") {\\n return _ethersproject_constants__WEBPACK_IMPORTED_MODULE_3__[\\\"Zero\\\"];\\n }\\n return _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__[\\\"BigNumber\\\"].from(value);\\n}\\nconst transactionFields = [\\n { name: \\\"nonce\\\", maxLength: 32, numeric: true },\\n { name: \\\"gasPrice\\\", maxLength: 32, numeric: true },\\n { name: \\\"gasLimit\\\", maxLength: 32, numeric: true },\\n { name: \\\"to\\\", length: 20 },\\n { name: \\\"value\\\", maxLength: 32, numeric: true },\\n { name: \\\"data\\\" },\\n];\\nconst allowedTransactionKeys = {\\n chainId: true, data: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true\\n};\\nfunction computeAddress(key) {\\n const publicKey = Object(_ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_7__[\\\"computePublicKey\\\"])(key);\\n return Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexDataSlice\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_4__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexDataSlice\\\"])(publicKey, 1)), 12));\\n}\\nfunction recoverAddress(digest, signature) {\\n return computeAddress(Object(_ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_7__[\\\"recoverPublicKey\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(digest), signature));\\n}\\nfunction serialize(transaction, signature) {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"checkProperties\\\"])(transaction, allowedTransactionKeys);\\n const raw = [];\\n transactionFields.forEach(function (fieldInfo) {\\n let value = transaction[fieldInfo.name] || ([]);\\n const options = {};\\n if (fieldInfo.numeric) {\\n options.hexPad = \\\"left\\\";\\n }\\n value = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(value, options));\\n // Fixed-width field\\n if (fieldInfo.length && value.length !== fieldInfo.length && value.length > 0) {\\n logger.throwArgumentError(\\\"invalid length for \\\" + fieldInfo.name, (\\\"transaction:\\\" + fieldInfo.name), value);\\n }\\n // Variable-width (with a maximum)\\n if (fieldInfo.maxLength) {\\n value = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"stripZeros\\\"])(value);\\n if (value.length > fieldInfo.maxLength) {\\n logger.throwArgumentError(\\\"invalid length for \\\" + fieldInfo.name, (\\\"transaction:\\\" + fieldInfo.name), value);\\n }\\n }\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(value));\\n });\\n let chainId = 0;\\n if (transaction.chainId != null) {\\n // A chainId was provided; if non-zero we'll use EIP-155\\n chainId = transaction.chainId;\\n if (typeof (chainId) !== \\\"number\\\") {\\n logger.throwArgumentError(\\\"invalid transaction.chainId\\\", \\\"transaction\\\", transaction);\\n }\\n }\\n else if (signature && !Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"isBytesLike\\\"])(signature) && signature.v > 28) {\\n // No chainId provided, but the signature is signing with EIP-155; derive chainId\\n chainId = Math.floor((signature.v - 35) / 2);\\n }\\n // We have an EIP-155 transaction (chainId was specified and non-zero)\\n if (chainId !== 0) {\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(chainId));\\n raw.push(\\\"0x\\\");\\n raw.push(\\\"0x\\\");\\n }\\n // Requesting an unsigned transation\\n if (!signature) {\\n return _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__[\\\"encode\\\"](raw);\\n }\\n // The splitSignature will ensure the transaction has a recoveryParam in the\\n // case that the signTransaction function only adds a v.\\n const sig = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"splitSignature\\\"])(signature);\\n // We pushed a chainId and null r, s on for hashing only; remove those\\n let v = 27 + sig.recoveryParam;\\n if (chainId !== 0) {\\n raw.pop();\\n raw.pop();\\n raw.pop();\\n v += chainId * 2 + 8;\\n // If an EIP-155 v (directly or indirectly; maybe _vs) was provided, check it!\\n if (sig.v > 28 && sig.v !== v) {\\n logger.throwArgumentError(\\\"transaction.chainId/signature.v mismatch\\\", \\\"signature\\\", signature);\\n }\\n }\\n else if (sig.v !== v) {\\n logger.throwArgumentError(\\\"transaction.chainId/signature.v mismatch\\\", \\\"signature\\\", signature);\\n }\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(v));\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"stripZeros\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(sig.r)));\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"stripZeros\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(sig.s)));\\n return _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__[\\\"encode\\\"](raw);\\n}\\nfunction parse(rawTransaction) {\\n const transaction = _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__[\\\"decode\\\"](rawTransaction);\\n if (transaction.length !== 9 && transaction.length !== 6) {\\n logger.throwArgumentError(\\\"invalid raw transaction\\\", \\\"rawTransactin\\\", rawTransaction);\\n }\\n const tx = {\\n nonce: handleNumber(transaction[0]).toNumber(),\\n gasPrice: handleNumber(transaction[1]),\\n gasLimit: handleNumber(transaction[2]),\\n to: handleAddress(transaction[3]),\\n value: handleNumber(transaction[4]),\\n data: transaction[5],\\n chainId: 0\\n };\\n // Legacy unsigned transaction\\n if (transaction.length === 6) {\\n return tx;\\n }\\n try {\\n tx.v = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__[\\\"BigNumber\\\"].from(transaction[6]).toNumber();\\n }\\n catch (error) {\\n console.log(error);\\n return tx;\\n }\\n tx.r = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexZeroPad\\\"])(transaction[7], 32);\\n tx.s = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexZeroPad\\\"])(transaction[8], 32);\\n if (_ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__[\\\"BigNumber\\\"].from(tx.r).isZero() && _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__[\\\"BigNumber\\\"].from(tx.s).isZero()) {\\n // EIP-155 unsigned transaction\\n tx.chainId = tx.v;\\n tx.v = 0;\\n }\\n else {\\n // Signed Tranasaction\\n tx.chainId = Math.floor((tx.v - 35) / 2);\\n if (tx.chainId < 0) {\\n tx.chainId = 0;\\n }\\n let recoveryParam = tx.v - 27;\\n const raw = transaction.slice(0, 6);\\n if (tx.chainId !== 0) {\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(tx.chainId));\\n raw.push(\\\"0x\\\");\\n raw.push(\\\"0x\\\");\\n recoveryParam -= tx.chainId * 2 + 8;\\n }\\n const digest = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_4__[\\\"keccak256\\\"])(_ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__[\\\"encode\\\"](raw));\\n try {\\n tx.from = recoverAddress(digest, { r: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(tx.r), s: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(tx.s), recoveryParam: recoveryParam });\\n }\\n catch (error) {\\n console.log(error);\\n }\\n tx.hash = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_4__[\\\"keccak256\\\"])(rawTransaction);\\n }\\n return tx;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/transactions/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wallet/lib.esm/_version.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/wallet/lib.esm/_version.js ***!\n \\****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"wallet/5.0.0-beta.138\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wallet/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wallet/lib.esm/index.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/wallet/lib.esm/index.js ***!\n \\*************************************************************/\n/*! exports provided: Wallet, verifyMessage */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Wallet\\\", function() { return Wallet; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"verifyMessage\\\", function() { return verifyMessage; });\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_abstract_provider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/abstract-provider */ \\\"./node_modules/@ethersproject/abstract-provider/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_abstract_signer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/abstract-signer */ \\\"./node_modules/@ethersproject/abstract-signer/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_hash__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/hash */ \\\"./node_modules/@ethersproject/hash/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/hdnode */ \\\"./node_modules/@ethersproject/hdnode/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_random__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @ethersproject/random */ \\\"./node_modules/@ethersproject/random/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_random__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__);\\n/* harmony import */ var _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @ethersproject/signing-key */ \\\"./node_modules/@ethersproject/signing-key/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_json_wallets__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ethersproject/json-wallets */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @ethersproject/transactions */ \\\"./node_modules/@ethersproject/transactions/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/wallet/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_13__[\\\"version\\\"]);\\nfunction isAccount(value) {\\n return (value != null && Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"isHexString\\\"])(value.privateKey, 32) && value.address != null);\\n}\\nfunction hasMnemonic(value) {\\n const mnemonic = value.mnemonic;\\n return (mnemonic && mnemonic.phrase);\\n}\\nclass Wallet extends _ethersproject_abstract_signer__WEBPACK_IMPORTED_MODULE_2__[\\\"Signer\\\"] {\\n constructor(privateKey, provider) {\\n logger.checkNew(new.target, Wallet);\\n super();\\n if (isAccount(privateKey)) {\\n const signingKey = new _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_9__[\\\"SigningKey\\\"](privateKey.privateKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_signingKey\\\", () => signingKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"address\\\", Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"computeAddress\\\"])(this.publicKey));\\n if (this.address !== Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(privateKey.address)) {\\n logger.throwArgumentError(\\\"privateKey/address mismatch\\\", \\\"privateKey\\\", \\\"[REDCACTED]\\\");\\n }\\n if (hasMnemonic(privateKey)) {\\n const srcMnemonic = privateKey.mnemonic;\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_mnemonic\\\", () => ({\\n phrase: srcMnemonic.phrase,\\n path: srcMnemonic.path || _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"],\\n locale: srcMnemonic.locale || \\\"en\\\"\\n }));\\n const mnemonic = this.mnemonic;\\n const node = _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"HDNode\\\"].fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path);\\n if (Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"computeAddress\\\"])(node.privateKey) !== this.address) {\\n logger.throwArgumentError(\\\"mnemonic/address mismatch\\\", \\\"privateKey\\\", \\\"[REDCACTED]\\\");\\n }\\n }\\n else {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_mnemonic\\\", () => null);\\n }\\n }\\n else {\\n if (_ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_9__[\\\"SigningKey\\\"].isSigningKey(privateKey)) {\\n if (privateKey.curve !== \\\"secp256k1\\\") {\\n logger.throwArgumentError(\\\"unsupported curve; must be secp256k1\\\", \\\"privateKey\\\", \\\"[REDACTED]\\\");\\n }\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_signingKey\\\", () => privateKey);\\n }\\n else {\\n const signingKey = new _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_9__[\\\"SigningKey\\\"](privateKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_signingKey\\\", () => signingKey);\\n }\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_mnemonic\\\", () => null);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"address\\\", Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"computeAddress\\\"])(this.publicKey));\\n }\\n if (provider && !_ethersproject_abstract_provider__WEBPACK_IMPORTED_MODULE_1__[\\\"Provider\\\"].isProvider(provider)) {\\n logger.throwArgumentError(\\\"invalid provider\\\", \\\"provider\\\", provider);\\n }\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"provider\\\", provider || null);\\n }\\n get mnemonic() { return this._mnemonic(); }\\n get privateKey() { return this._signingKey().privateKey; }\\n get publicKey() { return this._signingKey().publicKey; }\\n getAddress() {\\n return Promise.resolve(this.address);\\n }\\n connect(provider) {\\n return new Wallet(this, provider);\\n }\\n signTransaction(transaction) {\\n return Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"resolveProperties\\\"])(transaction).then((tx) => {\\n if (tx.from != null) {\\n if (Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(tx.from) !== this.address) {\\n throw new Error(\\\"transaction from address mismatch\\\");\\n }\\n delete tx.from;\\n }\\n const signature = this._signingKey().signDigest(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__[\\\"keccak256\\\"])(Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"serialize\\\"])(tx)));\\n return Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"serialize\\\"])(tx, signature);\\n });\\n }\\n signMessage(message) {\\n return Promise.resolve(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"joinSignature\\\"])(this._signingKey().signDigest(Object(_ethersproject_hash__WEBPACK_IMPORTED_MODULE_4__[\\\"hashMessage\\\"])(message))));\\n }\\n encrypt(password, options, progressCallback) {\\n if (typeof (options) === \\\"function\\\" && !progressCallback) {\\n progressCallback = options;\\n options = {};\\n }\\n if (progressCallback && typeof (progressCallback) !== \\\"function\\\") {\\n throw new Error(\\\"invalid callback\\\");\\n }\\n if (!options) {\\n options = {};\\n }\\n return Object(_ethersproject_json_wallets__WEBPACK_IMPORTED_MODULE_10__[\\\"encryptKeystore\\\"])(this, password, options, progressCallback);\\n }\\n /**\\n * Static methods to create Wallet instances.\\n */\\n static createRandom(options) {\\n let entropy = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(16);\\n if (!options) {\\n options = {};\\n }\\n if (options.extraEntropy) {\\n entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"arrayify\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"hexDataSlice\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"concat\\\"])([entropy, options.extraEntropy])), 0, 16));\\n }\\n const mnemonic = Object(_ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"entropyToMnemonic\\\"])(entropy, options.locale);\\n return Wallet.fromMnemonic(mnemonic, options.path, options.locale);\\n }\\n static fromEncryptedJson(json, password, progressCallback) {\\n return Object(_ethersproject_json_wallets__WEBPACK_IMPORTED_MODULE_10__[\\\"decryptJsonWallet\\\"])(json, password, progressCallback).then((account) => {\\n return new Wallet(account);\\n });\\n }\\n static fromEncryptedJsonSync(json, password) {\\n return new Wallet(Object(_ethersproject_json_wallets__WEBPACK_IMPORTED_MODULE_10__[\\\"decryptJsonWalletSync\\\"])(json, password));\\n }\\n static fromMnemonic(mnemonic, path, wordlist) {\\n if (!path) {\\n path = _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"];\\n }\\n return new Wallet(_ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"HDNode\\\"].fromMnemonic(mnemonic, null, wordlist).derivePath(path));\\n }\\n}\\nfunction verifyMessage(message, signature) {\\n return Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"recoverAddress\\\"])(Object(_ethersproject_hash__WEBPACK_IMPORTED_MODULE_4__[\\\"hashMessage\\\"])(message), signature);\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wallet/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wordlists/lib/_version.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@ethersproject/wordlists/lib/_version.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nexports.version = \\\"wordlists/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wordlists/lib/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wordlists/lib/browser.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/wordlists/lib/browser.js ***!\n \\**************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n// Wordlists\\n// See: https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md\\nvar wordlist_1 = __webpack_require__(/*! ./wordlist */ \\\"./node_modules/@ethersproject/wordlists/lib/wordlist.js\\\");\\nexports.Wordlist = wordlist_1.Wordlist;\\nvar lang_en_1 = __webpack_require__(/*! ./lang-en */ \\\"./node_modules/@ethersproject/wordlists/lib/lang-en.js\\\");\\nvar wordlists = { en: lang_en_1.langEn };\\nexports.wordlists = wordlists;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wordlists/lib/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wordlists/lib/lang-en.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/wordlists/lib/lang-en.js ***!\n \\**************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __extends = (this && this.__extends) || (function () {\\n var extendStatics = function (d, b) {\\n extendStatics = Object.setPrototypeOf ||\\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\\n return extendStatics(d, b);\\n };\\n return function (d, b) {\\n extendStatics(d, b);\\n function __() { this.constructor = d; }\\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\\n };\\n})();\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar wordlist_1 = __webpack_require__(/*! ./wordlist */ \\\"./node_modules/@ethersproject/wordlists/lib/wordlist.js\\\");\\nvar words = \\\"AbandonAbilityAbleAboutAboveAbsentAbsorbAbstractAbsurdAbuseAccessAccidentAccountAccuseAchieveAcidAcousticAcquireAcrossActActionActorActressActualAdaptAddAddictAddressAdjustAdmitAdultAdvanceAdviceAerobicAffairAffordAfraidAgainAgeAgentAgreeAheadAimAirAirportAisleAlarmAlbumAlcoholAlertAlienAllAlleyAllowAlmostAloneAlphaAlreadyAlsoAlterAlwaysAmateurAmazingAmongAmountAmusedAnalystAnchorAncientAngerAngleAngryAnimalAnkleAnnounceAnnualAnotherAnswerAntennaAntiqueAnxietyAnyApartApologyAppearAppleApproveAprilArchArcticAreaArenaArgueArmArmedArmorArmyAroundArrangeArrestArriveArrowArtArtefactArtistArtworkAskAspectAssaultAssetAssistAssumeAsthmaAthleteAtomAttackAttendAttitudeAttractAuctionAuditAugustAuntAuthorAutoAutumnAverageAvocadoAvoidAwakeAwareAwayAwesomeAwfulAwkwardAxisBabyBachelorBaconBadgeBagBalanceBalconyBallBambooBananaBannerBarBarelyBargainBarrelBaseBasicBasketBattleBeachBeanBeautyBecauseBecomeBeefBeforeBeginBehaveBehindBelieveBelowBeltBenchBenefitBestBetrayBetterBetweenBeyondBicycleBidBikeBindBiologyBirdBirthBitterBlackBladeBlameBlanketBlastBleakBlessBlindBloodBlossomBlouseBlueBlurBlushBoardBoatBodyBoilBombBoneBonusBookBoostBorderBoringBorrowBossBottomBounceBoxBoyBracketBrainBrandBrassBraveBreadBreezeBrickBridgeBriefBrightBringBriskBroccoliBrokenBronzeBroomBrotherBrownBrushBubbleBuddyBudgetBuffaloBuildBulbBulkBulletBundleBunkerBurdenBurgerBurstBusBusinessBusyButterBuyerBuzzCabbageCabinCableCactusCageCakeCallCalmCameraCampCanCanalCancelCandyCannonCanoeCanvasCanyonCapableCapitalCaptainCarCarbonCardCargoCarpetCarryCartCaseCashCasinoCastleCasualCatCatalogCatchCategoryCattleCaughtCauseCautionCaveCeilingCeleryCementCensusCenturyCerealCertainChairChalkChampionChangeChaosChapterChargeChaseChatCheapCheckCheeseChefCherryChestChickenChiefChildChimneyChoiceChooseChronicChuckleChunkChurnCigarCinnamonCircleCitizenCityCivilClaimClapClarifyClawClayCleanClerkCleverClickClientCliffClimbClinicClipClockClogCloseClothCloudClownClubClumpClusterClutchCoachCoastCoconutCodeCoffeeCoilCoinCollectColorColumnCombineComeComfortComicCommonCompanyConcertConductConfirmCongressConnectConsiderControlConvinceCookCoolCopperCopyCoralCoreCornCorrectCostCottonCouchCountryCoupleCourseCousinCoverCoyoteCrackCradleCraftCramCraneCrashCraterCrawlCrazyCreamCreditCreekCrewCricketCrimeCrispCriticCropCrossCrouchCrowdCrucialCruelCruiseCrumbleCrunchCrushCryCrystalCubeCultureCupCupboardCuriousCurrentCurtainCurveCushionCustomCuteCycleDadDamageDampDanceDangerDaringDashDaughterDawnDayDealDebateDebrisDecadeDecemberDecideDeclineDecorateDecreaseDeerDefenseDefineDefyDegreeDelayDeliverDemandDemiseDenialDentistDenyDepartDependDepositDepthDeputyDeriveDescribeDesertDesignDeskDespairDestroyDetailDetectDevelopDeviceDevoteDiagramDialDiamondDiaryDiceDieselDietDifferDigitalDignityDilemmaDinnerDinosaurDirectDirtDisagreeDiscoverDiseaseDishDismissDisorderDisplayDistanceDivertDivideDivorceDizzyDoctorDocumentDogDollDolphinDomainDonateDonkeyDonorDoorDoseDoubleDoveDraftDragonDramaDrasticDrawDreamDressDriftDrillDrinkDripDriveDropDrumDryDuckDumbDuneDuringDustDutchDutyDwarfDynamicEagerEagleEarlyEarnEarthEasilyEastEasyEchoEcologyEconomyEdgeEditEducateEffortEggEightEitherElbowElderElectricElegantElementElephantElevatorEliteElseEmbarkEmbodyEmbraceEmergeEmotionEmployEmpowerEmptyEnableEnactEndEndlessEndorseEnemyEnergyEnforceEngageEngineEnhanceEnjoyEnlistEnoughEnrichEnrollEnsureEnterEntireEntryEnvelopeEpisodeEqualEquipEraEraseErodeErosionErrorEruptEscapeEssayEssenceEstateEternalEthicsEvidenceEvilEvokeEvolveExactExampleExcessExchangeExciteExcludeExcuseExecuteExerciseExhaustExhibitExileExistExitExoticExpandExpectExpireExplainExposeExpressExtendExtraEyeEyebrowFabricFaceFacultyFadeFaintFaithFallFalseFameFamilyFamousFanFancyFantasyFarmFashionFatFatalFatherFatigueFaultFavoriteFeatureFebruaryFederalFeeFeedFeelFemaleFenceFestivalFetchFeverFewFiberFictionFieldFigureFileFilmFilterFinalFindFineFingerFinishFireFirmFirstFiscalFishFitFitnessFixFlagFlameFlashFlatFlavorFleeFlightFlipFloatFlockFloorFlowerFluidFlushFlyFoamFocusFogFoilFoldFollowFoodFootForceForestForgetForkFortuneForumForwardFossilFosterFoundFoxFragileFrameFrequentFreshFriendFringeFrogFrontFrostFrownFrozenFruitFuelFunFunnyFurnaceFuryFutureGadgetGainGalaxyGalleryGameGapGarageGarbageGardenGarlicGarmentGasGaspGateGatherGaugeGazeGeneralGeniusGenreGentleGenuineGestureGhostGiantGiftGiggleGingerGiraffeGirlGiveGladGlanceGlareGlassGlideGlimpseGlobeGloomGloryGloveGlowGlueGoatGoddessGoldGoodGooseGorillaGospelGossipGovernGownGrabGraceGrainGrantGrapeGrassGravityGreatGreenGridGriefGritGroceryGroupGrowGruntGuardGuessGuideGuiltGuitarGunGymHabitHairHalfHammerHamsterHandHappyHarborHardHarshHarvestHatHaveHawkHazardHeadHealthHeartHeavyHedgehogHeightHelloHelmetHelpHenHeroHiddenHighHillHintHipHireHistoryHobbyHockeyHoldHoleHolidayHollowHomeHoneyHoodHopeHornHorrorHorseHospitalHostHotelHourHoverHubHugeHumanHumbleHumorHundredHungryHuntHurdleHurryHurtHusbandHybridIceIconIdeaIdentifyIdleIgnoreIllIllegalIllnessImageImitateImmenseImmuneImpactImposeImproveImpulseInchIncludeIncomeIncreaseIndexIndicateIndoorIndustryInfantInflictInformInhaleInheritInitialInjectInjuryInmateInnerInnocentInputInquiryInsaneInsectInsideInspireInstallIntactInterestIntoInvestInviteInvolveIronIslandIsolateIssueItemIvoryJacketJaguarJarJazzJealousJeansJellyJewelJobJoinJokeJourneyJoyJudgeJuiceJumpJungleJuniorJunkJustKangarooKeenKeepKetchupKeyKickKidKidneyKindKingdomKissKitKitchenKiteKittenKiwiKneeKnifeKnockKnowLabLabelLaborLadderLadyLakeLampLanguageLaptopLargeLaterLatinLaughLaundryLavaLawLawnLawsuitLayerLazyLeaderLeafLearnLeaveLectureLeftLegLegalLegendLeisureLemonLendLengthLensLeopardLessonLetterLevelLiarLibertyLibraryLicenseLifeLiftLightLikeLimbLimitLinkLionLiquidListLittleLiveLizardLoadLoanLobsterLocalLockLogicLonelyLongLoopLotteryLoudLoungeLoveLoyalLuckyLuggageLumberLunarLunchLuxuryLyricsMachineMadMagicMagnetMaidMailMainMajorMakeMammalManManageMandateMangoMansionManualMapleMarbleMarchMarginMarineMarketMarriageMaskMassMasterMatchMaterialMathMatrixMatterMaximumMazeMeadowMeanMeasureMeatMechanicMedalMediaMelodyMeltMemberMemoryMentionMenuMercyMergeMeritMerryMeshMessageMetalMethodMiddleMidnightMilkMillionMimicMindMinimumMinorMinuteMiracleMirrorMiseryMissMistakeMixMixedMixtureMobileModelModifyMomMomentMonitorMonkeyMonsterMonthMoonMoralMoreMorningMosquitoMotherMotionMotorMountainMouseMoveMovieMuchMuffinMuleMultiplyMuscleMuseumMushroomMusicMustMutualMyselfMysteryMythNaiveNameNapkinNarrowNastyNationNatureNearNeckNeedNegativeNeglectNeitherNephewNerveNestNetNetworkNeutralNeverNewsNextNiceNightNobleNoiseNomineeNoodleNormalNorthNoseNotableNoteNothingNoticeNovelNowNuclearNumberNurseNutOakObeyObjectObligeObscureObserveObtainObviousOccurOceanOctoberOdorOffOfferOfficeOftenOilOkayOldOliveOlympicOmitOnceOneOnionOnlineOnlyOpenOperaOpinionOpposeOptionOrangeOrbitOrchardOrderOrdinaryOrganOrientOriginalOrphanOstrichOtherOutdoorOuterOutputOutsideOvalOvenOverOwnOwnerOxygenOysterOzonePactPaddlePagePairPalacePalmPandaPanelPanicPantherPaperParadeParentParkParrotPartyPassPatchPathPatientPatrolPatternPausePavePaymentPeacePeanutPearPeasantPelicanPenPenaltyPencilPeoplePepperPerfectPermitPersonPetPhonePhotoPhrasePhysicalPianoPicnicPicturePiecePigPigeonPillPilotPinkPioneerPipePistolPitchPizzaPlacePlanetPlasticPlatePlayPleasePledgePluckPlugPlungePoemPoetPointPolarPolePolicePondPonyPoolPopularPortionPositionPossiblePostPotatoPotteryPovertyPowderPowerPracticePraisePredictPreferPreparePresentPrettyPreventPricePridePrimaryPrintPriorityPrisonPrivatePrizeProblemProcessProduceProfitProgramProjectPromoteProofPropertyProsperProtectProudProvidePublicPuddingPullPulpPulsePumpkinPunchPupilPuppyPurchasePurityPurposePursePushPutPuzzlePyramidQualityQuantumQuarterQuestionQuickQuitQuizQuoteRabbitRaccoonRaceRackRadarRadioRailRainRaiseRallyRampRanchRandomRangeRapidRareRateRatherRavenRawRazorReadyRealReasonRebelRebuildRecallReceiveRecipeRecordRecycleReduceReflectReformRefuseRegionRegretRegularRejectRelaxReleaseReliefRelyRemainRememberRemindRemoveRenderRenewRentReopenRepairRepeatReplaceReportRequireRescueResembleResistResourceResponseResultRetireRetreatReturnReunionRevealReviewRewardRhythmRibRibbonRiceRichRideRidgeRifleRightRigidRingRiotRippleRiskRitualRivalRiverRoadRoastRobotRobustRocketRomanceRoofRookieRoomRoseRotateRoughRoundRouteRoyalRubberRudeRugRuleRunRunwayRuralSadSaddleSadnessSafeSailSaladSalmonSalonSaltSaluteSameSampleSandSatisfySatoshiSauceSausageSaveSayScaleScanScareScatterSceneSchemeSchoolScienceScissorsScorpionScoutScrapScreenScriptScrubSeaSearchSeasonSeatSecondSecretSectionSecuritySeedSeekSegmentSelectSellSeminarSeniorSenseSentenceSeriesServiceSessionSettleSetupSevenShadowShaftShallowShareShedShellSheriffShieldShiftShineShipShiverShockShoeShootShopShortShoulderShoveShrimpShrugShuffleShySiblingSickSideSiegeSightSignSilentSilkSillySilverSimilarSimpleSinceSingSirenSisterSituateSixSizeSkateSketchSkiSkillSkinSkirtSkullSlabSlamSleepSlenderSliceSlideSlightSlimSloganSlotSlowSlushSmallSmartSmileSmokeSmoothSnackSnakeSnapSniffSnowSoapSoccerSocialSockSodaSoftSolarSoldierSolidSolutionSolveSomeoneSongSoonSorrySortSoulSoundSoupSourceSouthSpaceSpareSpatialSpawnSpeakSpecialSpeedSpellSpendSphereSpiceSpiderSpikeSpinSpiritSplitSpoilSponsorSpoonSportSpotSpraySpreadSpringSpySquareSqueezeSquirrelStableStadiumStaffStageStairsStampStandStartStateStaySteakSteelStemStepStereoStickStillStingStockStomachStoneStoolStoryStoveStrategyStreetStrikeStrongStruggleStudentStuffStumbleStyleSubjectSubmitSubwaySuccessSuchSuddenSufferSugarSuggestSuitSummerSunSunnySunsetSuperSupplySupremeSureSurfaceSurgeSurpriseSurroundSurveySuspectSustainSwallowSwampSwapSwarmSwearSweetSwiftSwimSwingSwitchSwordSymbolSymptomSyrupSystemTableTackleTagTailTalentTalkTankTapeTargetTaskTasteTattooTaxiTeachTeamTellTenTenantTennisTentTermTestTextThankThatThemeThenTheoryThereTheyThingThisThoughtThreeThriveThrowThumbThunderTicketTideTigerTiltTimberTimeTinyTipTiredTissueTitleToastTobaccoTodayToddlerToeTogetherToiletTokenTomatoTomorrowToneTongueTonightToolToothTopTopicToppleTorchTornadoTortoiseTossTotalTouristTowardTowerTownToyTrackTradeTrafficTragicTrainTransferTrapTrashTravelTrayTreatTreeTrendTrialTribeTrickTriggerTrimTripTrophyTroubleTruckTrueTrulyTrumpetTrustTruthTryTubeTuitionTumbleTunaTunnelTurkeyTurnTurtleTwelveTwentyTwiceTwinTwistTwoTypeTypicalUglyUmbrellaUnableUnawareUncleUncoverUnderUndoUnfairUnfoldUnhappyUniformUniqueUnitUniverseUnknownUnlockUntilUnusualUnveilUpdateUpgradeUpholdUponUpperUpsetUrbanUrgeUsageUseUsedUsefulUselessUsualUtilityVacantVacuumVagueValidValleyValveVanVanishVaporVariousVastVaultVehicleVelvetVendorVentureVenueVerbVerifyVersionVeryVesselVeteranViableVibrantViciousVictoryVideoViewVillageVintageViolinVirtualVirusVisaVisitVisualVitalVividVocalVoiceVoidVolcanoVolumeVoteVoyageWageWagonWaitWalkWallWalnutWantWarfareWarmWarriorWashWaspWasteWaterWaveWayWealthWeaponWearWeaselWeatherWebWeddingWeekendWeirdWelcomeWestWetWhaleWhatWheatWheelWhenWhereWhipWhisperWideWidthWifeWildWillWinWindowWineWingWinkWinnerWinterWireWisdomWiseWishWitnessWolfWomanWonderWoodWoolWordWorkWorldWorryWorthWrapWreckWrestleWristWriteWrongYardYearYellowYouYoungYouthZebraZeroZoneZoo\\\";\\nvar wordlist = null;\\nfunction loadWords(lang) {\\n if (wordlist != null) {\\n return;\\n }\\n wordlist = words.replace(/([A-Z])/g, \\\" $1\\\").toLowerCase().substring(1).split(\\\" \\\");\\n if (wordlist_1.Wordlist.check(lang) !== \\\"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\\\") {\\n wordlist = null;\\n throw new Error(\\\"BIP39 Wordlist for en (English) FAILED\\\");\\n }\\n}\\nvar LangEn = /** @class */ (function (_super) {\\n __extends(LangEn, _super);\\n function LangEn() {\\n return _super.call(this, \\\"en\\\") || this;\\n }\\n LangEn.prototype.getWord = function (index) {\\n loadWords(this);\\n return wordlist[index];\\n };\\n LangEn.prototype.getWordIndex = function (word) {\\n loadWords(this);\\n return wordlist.indexOf(word);\\n };\\n return LangEn;\\n}(wordlist_1.Wordlist));\\nvar langEn = new LangEn();\\nexports.langEn = langEn;\\nwordlist_1.Wordlist.register(langEn);\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wordlists/lib/lang-en.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wordlists/lib/wordlist.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@ethersproject/wordlists/lib/wordlist.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n// This gets overridden by rollup\\nvar exportWordlist = false;\\nvar hash_1 = __webpack_require__(/*! @ethersproject/hash */ \\\"./node_modules/@ethersproject/hash/lib.esm/index.js\\\");\\nvar properties_1 = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\nvar logger_1 = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\nvar _version_1 = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/wordlists/lib/_version.js\\\");\\nexports.logger = new logger_1.Logger(_version_1.version);\\nvar Wordlist = /** @class */ (function () {\\n function Wordlist(locale) {\\n var _newTarget = this.constructor;\\n exports.logger.checkAbstract(_newTarget, Wordlist);\\n properties_1.defineReadOnly(this, \\\"locale\\\", locale);\\n }\\n // Subclasses may override this\\n Wordlist.prototype.split = function (mnemonic) {\\n return mnemonic.toLowerCase().split(/ +/g);\\n };\\n // Subclasses may override this\\n Wordlist.prototype.join = function (words) {\\n return words.join(\\\" \\\");\\n };\\n Wordlist.check = function (wordlist) {\\n var words = [];\\n for (var i = 0; i < 2048; i++) {\\n var word = wordlist.getWord(i);\\n if (i !== wordlist.getWordIndex(word)) {\\n return \\\"0x\\\";\\n }\\n words.push(word);\\n }\\n return hash_1.id(words.join(\\\"\\\\n\\\") + \\\"\\\\n\\\");\\n };\\n Wordlist.register = function (lang, name) {\\n if (!name) {\\n name = lang.locale;\\n }\\n if (exportWordlist) {\\n try {\\n var anyGlobal = window;\\n if (anyGlobal._ethers && anyGlobal._ethers.wordlists) {\\n if (!anyGlobal._ethers.wordlists[name]) {\\n properties_1.defineReadOnly(anyGlobal._ethers.wordlists, name, lang);\\n }\\n }\\n }\\n catch (error) { }\\n }\\n };\\n return Wordlist;\\n}());\\nexports.Wordlist = Wordlist;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wordlists/lib/wordlist.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/fontawesome-svg-core/index.es.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/@fortawesome/fontawesome-svg-core/index.es.js ***!\n \\********************************************************************/\n/*! exports provided: icon, noAuto, config, toHtml, layer, text, counter, library, dom, parse, findIconDefinition */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"icon\\\", function() { return icon; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"noAuto\\\", function() { return noAuto; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"config\\\", function() { return config; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"toHtml\\\", function() { return toHtml; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"layer\\\", function() { return layer; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"text\\\", function() { return text; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"counter\\\", function() { return counter; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"library\\\", function() { return library; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"dom\\\", function() { return dom; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"parse\\\", function() { return parse; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"findIconDefinition\\\", function() { return findIconDefinition; });\\nfunction _typeof(obj) {\\n if (typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\") {\\n _typeof = function (obj) {\\n return typeof obj;\\n };\\n } else {\\n _typeof = function (obj) {\\n return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj;\\n };\\n }\\n\\n return _typeof(obj);\\n}\\n\\nfunction _classCallCheck(instance, Constructor) {\\n if (!(instance instanceof Constructor)) {\\n throw new TypeError(\\\"Cannot call a class as a function\\\");\\n }\\n}\\n\\nfunction _defineProperties(target, props) {\\n for (var i = 0; i < props.length; i++) {\\n var descriptor = props[i];\\n descriptor.enumerable = descriptor.enumerable || false;\\n descriptor.configurable = true;\\n if (\\\"value\\\" in descriptor) descriptor.writable = true;\\n Object.defineProperty(target, descriptor.key, descriptor);\\n }\\n}\\n\\nfunction _createClass(Constructor, protoProps, staticProps) {\\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\\n if (staticProps) _defineProperties(Constructor, staticProps);\\n return Constructor;\\n}\\n\\nfunction _defineProperty(obj, key, value) {\\n if (key in obj) {\\n Object.defineProperty(obj, key, {\\n value: value,\\n enumerable: true,\\n configurable: true,\\n writable: true\\n });\\n } else {\\n obj[key] = value;\\n }\\n\\n return obj;\\n}\\n\\nfunction _objectSpread(target) {\\n for (var i = 1; i < arguments.length; i++) {\\n var source = arguments[i] != null ? arguments[i] : {};\\n var ownKeys = Object.keys(source);\\n\\n if (typeof Object.getOwnPropertySymbols === 'function') {\\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\\n }));\\n }\\n\\n ownKeys.forEach(function (key) {\\n _defineProperty(target, key, source[key]);\\n });\\n }\\n\\n return target;\\n}\\n\\nfunction _slicedToArray(arr, i) {\\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\\n}\\n\\nfunction _toConsumableArray(arr) {\\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\\n}\\n\\nfunction _arrayWithoutHoles(arr) {\\n if (Array.isArray(arr)) {\\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\\n\\n return arr2;\\n }\\n}\\n\\nfunction _arrayWithHoles(arr) {\\n if (Array.isArray(arr)) return arr;\\n}\\n\\nfunction _iterableToArray(iter) {\\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \\\"[object Arguments]\\\") return Array.from(iter);\\n}\\n\\nfunction _iterableToArrayLimit(arr, i) {\\n var _arr = [];\\n var _n = true;\\n var _d = false;\\n var _e = undefined;\\n\\n try {\\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\\n _arr.push(_s.value);\\n\\n if (i && _arr.length === i) break;\\n }\\n } catch (err) {\\n _d = true;\\n _e = err;\\n } finally {\\n try {\\n if (!_n && _i[\\\"return\\\"] != null) _i[\\\"return\\\"]();\\n } finally {\\n if (_d) throw _e;\\n }\\n }\\n\\n return _arr;\\n}\\n\\nfunction _nonIterableSpread() {\\n throw new TypeError(\\\"Invalid attempt to spread non-iterable instance\\\");\\n}\\n\\nfunction _nonIterableRest() {\\n throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance\\\");\\n}\\n\\nvar noop = function noop() {};\\n\\nvar _WINDOW = {};\\nvar _DOCUMENT = {};\\nvar _MUTATION_OBSERVER = null;\\nvar _PERFORMANCE = {\\n mark: noop,\\n measure: noop\\n};\\n\\ntry {\\n if (typeof window !== 'undefined') _WINDOW = window;\\n if (typeof document !== 'undefined') _DOCUMENT = document;\\n if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\\n if (typeof performance !== 'undefined') _PERFORMANCE = performance;\\n} catch (e) {}\\n\\nvar _ref = _WINDOW.navigator || {},\\n _ref$userAgent = _ref.userAgent,\\n userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\\n\\nvar WINDOW = _WINDOW;\\nvar DOCUMENT = _DOCUMENT;\\nvar MUTATION_OBSERVER = _MUTATION_OBSERVER;\\nvar PERFORMANCE = _PERFORMANCE;\\nvar IS_BROWSER = !!WINDOW.document;\\nvar IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\\nvar IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\\n\\nvar NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\\nvar UNITS_IN_GRID = 16;\\nvar DEFAULT_FAMILY_PREFIX = 'fa';\\nvar DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\\nvar DATA_FA_I2SVG = 'data-fa-i2svg';\\nvar DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\\nvar DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\\nvar DATA_PREFIX = 'data-prefix';\\nvar DATA_ICON = 'data-icon';\\nvar HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\\nvar TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\\nvar PRODUCTION = function () {\\n try {\\n return \\\"development\\\" === 'production';\\n } catch (e) {\\n return false;\\n }\\n}();\\nvar PREFIX_TO_STYLE = {\\n 'fas': 'solid',\\n 'far': 'regular',\\n 'fal': 'light',\\n 'fab': 'brands',\\n 'fa': 'solid'\\n};\\nvar STYLE_TO_PREFIX = {\\n 'solid': 'fas',\\n 'regular': 'far',\\n 'light': 'fal',\\n 'brands': 'fab'\\n};\\nvar LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\\nvar FONT_FAMILY_PATTERN = /Font Awesome 5 (Solid|Regular|Light|Brands|Free|Pro)/;\\nvar FONT_WEIGHT_TO_PREFIX = {\\n '900': 'fas',\\n '400': 'far',\\n 'normal': 'far',\\n '300': 'fal'\\n};\\nvar oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\\nvar oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\\nvar ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\\nvar RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) {\\n return \\\"\\\".concat(n, \\\"x\\\");\\n})).concat(oneToTwenty.map(function (n) {\\n return \\\"w-\\\".concat(n);\\n}));\\n\\nvar initial = WINDOW.FontAwesomeConfig || {};\\n\\nfunction getAttrConfig(attr) {\\n var element = DOCUMENT.querySelector('script[' + attr + ']');\\n\\n if (element) {\\n return element.getAttribute(attr);\\n }\\n}\\n\\nfunction coerce(val) {\\n // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\\n // We'll assume that this is an indication that it should be toggled to true\\n // For example <script data-search-pseudo-elements src=\\\"...\\\"></script>\\n if (val === '') return true;\\n if (val === 'false') return false;\\n if (val === 'true') return true;\\n return val;\\n}\\n\\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\\n var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\\n attrs.forEach(function (_ref) {\\n var _ref2 = _slicedToArray(_ref, 2),\\n attr = _ref2[0],\\n key = _ref2[1];\\n\\n var val = coerce(getAttrConfig(attr));\\n\\n if (val !== undefined && val !== null) {\\n initial[key] = val;\\n }\\n });\\n}\\n\\nvar _default = {\\n familyPrefix: DEFAULT_FAMILY_PREFIX,\\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\\n autoReplaceSvg: true,\\n autoAddCss: true,\\n autoA11y: true,\\n searchPseudoElements: false,\\n observeMutations: true,\\n keepOriginalSource: true,\\n measurePerformance: false,\\n showMissingIcons: true\\n};\\n\\nvar _config = _objectSpread({}, _default, initial);\\n\\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\\n\\nvar config = _objectSpread({}, _config);\\n\\nWINDOW.FontAwesomeConfig = config;\\n\\nvar w = WINDOW || {};\\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\\nvar namespace = w[NAMESPACE_IDENTIFIER];\\n\\nvar functions = [];\\n\\nvar listener = function listener() {\\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\\n loaded = 1;\\n functions.map(function (fn) {\\n return fn();\\n });\\n};\\n\\nvar loaded = false;\\n\\nif (IS_DOM) {\\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\\n}\\n\\nfunction domready (fn) {\\n if (!IS_DOM) return;\\n loaded ? setTimeout(fn, 0) : functions.push(fn);\\n}\\n\\nvar PENDING = 'pending';\\nvar SETTLED = 'settled';\\nvar FULFILLED = 'fulfilled';\\nvar REJECTED = 'rejected';\\n\\nvar NOOP = function NOOP() {};\\n\\nvar isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';\\nvar asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;\\nvar asyncQueue = [];\\nvar asyncTimer;\\n\\nfunction asyncFlush() {\\n // run promise callbacks\\n for (var i = 0; i < asyncQueue.length; i++) {\\n asyncQueue[i][0](asyncQueue[i][1]);\\n } // reset async asyncQueue\\n\\n\\n asyncQueue = [];\\n asyncTimer = false;\\n}\\n\\nfunction asyncCall(callback, arg) {\\n asyncQueue.push([callback, arg]);\\n\\n if (!asyncTimer) {\\n asyncTimer = true;\\n asyncSetTimer(asyncFlush, 0);\\n }\\n}\\n\\nfunction invokeResolver(resolver, promise) {\\n function resolvePromise(value) {\\n resolve(promise, value);\\n }\\n\\n function rejectPromise(reason) {\\n reject(promise, reason);\\n }\\n\\n try {\\n resolver(resolvePromise, rejectPromise);\\n } catch (e) {\\n rejectPromise(e);\\n }\\n}\\n\\nfunction invokeCallback(subscriber) {\\n var owner = subscriber.owner;\\n var settled = owner._state;\\n var value = owner._data;\\n var callback = subscriber[settled];\\n var promise = subscriber.then;\\n\\n if (typeof callback === 'function') {\\n settled = FULFILLED;\\n\\n try {\\n value = callback(value);\\n } catch (e) {\\n reject(promise, e);\\n }\\n }\\n\\n if (!handleThenable(promise, value)) {\\n if (settled === FULFILLED) {\\n resolve(promise, value);\\n }\\n\\n if (settled === REJECTED) {\\n reject(promise, value);\\n }\\n }\\n}\\n\\nfunction handleThenable(promise, value) {\\n var resolved;\\n\\n try {\\n if (promise === value) {\\n throw new TypeError('A promises callback cannot return that same promise.');\\n }\\n\\n if (value && (typeof value === 'function' || _typeof(value) === 'object')) {\\n // then should be retrieved only once\\n var then = value.then;\\n\\n if (typeof then === 'function') {\\n then.call(value, function (val) {\\n if (!resolved) {\\n resolved = true;\\n\\n if (value === val) {\\n fulfill(promise, val);\\n } else {\\n resolve(promise, val);\\n }\\n }\\n }, function (reason) {\\n if (!resolved) {\\n resolved = true;\\n reject(promise, reason);\\n }\\n });\\n return true;\\n }\\n }\\n } catch (e) {\\n if (!resolved) {\\n reject(promise, e);\\n }\\n\\n return true;\\n }\\n\\n return false;\\n}\\n\\nfunction resolve(promise, value) {\\n if (promise === value || !handleThenable(promise, value)) {\\n fulfill(promise, value);\\n }\\n}\\n\\nfunction fulfill(promise, value) {\\n if (promise._state === PENDING) {\\n promise._state = SETTLED;\\n promise._data = value;\\n asyncCall(publishFulfillment, promise);\\n }\\n}\\n\\nfunction reject(promise, reason) {\\n if (promise._state === PENDING) {\\n promise._state = SETTLED;\\n promise._data = reason;\\n asyncCall(publishRejection, promise);\\n }\\n}\\n\\nfunction publish(promise) {\\n promise._then = promise._then.forEach(invokeCallback);\\n}\\n\\nfunction publishFulfillment(promise) {\\n promise._state = FULFILLED;\\n publish(promise);\\n}\\n\\nfunction publishRejection(promise) {\\n promise._state = REJECTED;\\n publish(promise);\\n\\n if (!promise._handled && isNode) {\\n global.process.emit('unhandledRejection', promise._data, promise);\\n }\\n}\\n\\nfunction notifyRejectionHandled(promise) {\\n global.process.emit('rejectionHandled', promise);\\n}\\n/**\\n * @class\\n */\\n\\n\\nfunction P(resolver) {\\n if (typeof resolver !== 'function') {\\n throw new TypeError('Promise resolver ' + resolver + ' is not a function');\\n }\\n\\n if (this instanceof P === false) {\\n throw new TypeError('Failed to construct \\\\'Promise\\\\': Please use the \\\\'new\\\\' operator, this object constructor cannot be called as a function.');\\n }\\n\\n this._then = [];\\n invokeResolver(resolver, this);\\n}\\n\\nP.prototype = {\\n constructor: P,\\n _state: PENDING,\\n _then: null,\\n _data: undefined,\\n _handled: false,\\n then: function then(onFulfillment, onRejection) {\\n var subscriber = {\\n owner: this,\\n then: new this.constructor(NOOP),\\n fulfilled: onFulfillment,\\n rejected: onRejection\\n };\\n\\n if ((onRejection || onFulfillment) && !this._handled) {\\n this._handled = true;\\n\\n if (this._state === REJECTED && isNode) {\\n asyncCall(notifyRejectionHandled, this);\\n }\\n }\\n\\n if (this._state === FULFILLED || this._state === REJECTED) {\\n // already resolved, call callback async\\n asyncCall(invokeCallback, subscriber);\\n } else {\\n // subscribe\\n this._then.push(subscriber);\\n }\\n\\n return subscriber.then;\\n },\\n catch: function _catch(onRejection) {\\n return this.then(null, onRejection);\\n }\\n};\\n\\nP.all = function (promises) {\\n if (!Array.isArray(promises)) {\\n throw new TypeError('You must pass an array to Promise.all().');\\n }\\n\\n return new P(function (resolve, reject) {\\n var results = [];\\n var remaining = 0;\\n\\n function resolver(index) {\\n remaining++;\\n return function (value) {\\n results[index] = value;\\n\\n if (! --remaining) {\\n resolve(results);\\n }\\n };\\n }\\n\\n for (var i = 0, promise; i < promises.length; i++) {\\n promise = promises[i];\\n\\n if (promise && typeof promise.then === 'function') {\\n promise.then(resolver(i), reject);\\n } else {\\n results[i] = promise;\\n }\\n }\\n\\n if (!remaining) {\\n resolve(results);\\n }\\n });\\n};\\n\\nP.race = function (promises) {\\n if (!Array.isArray(promises)) {\\n throw new TypeError('You must pass an array to Promise.race().');\\n }\\n\\n return new P(function (resolve, reject) {\\n for (var i = 0, promise; i < promises.length; i++) {\\n promise = promises[i];\\n\\n if (promise && typeof promise.then === 'function') {\\n promise.then(resolve, reject);\\n } else {\\n resolve(promise);\\n }\\n }\\n });\\n};\\n\\nP.resolve = function (value) {\\n if (value && _typeof(value) === 'object' && value.constructor === P) {\\n return value;\\n }\\n\\n return new P(function (resolve) {\\n resolve(value);\\n });\\n};\\n\\nP.reject = function (reason) {\\n return new P(function (resolve, reject) {\\n reject(reason);\\n });\\n};\\n\\nvar picked = typeof Promise === 'function' ? Promise : P;\\n\\nvar d = UNITS_IN_GRID;\\nvar meaninglessTransform = {\\n size: 16,\\n x: 0,\\n y: 0,\\n rotate: 0,\\n flipX: false,\\n flipY: false\\n};\\n\\nfunction isReserved(name) {\\n return ~RESERVED_CLASSES.indexOf(name);\\n}\\nfunction insertCss(css) {\\n if (!css || !IS_DOM) {\\n return;\\n }\\n\\n var style = DOCUMENT.createElement('style');\\n style.setAttribute('type', 'text/css');\\n style.innerHTML = css;\\n var headChildren = DOCUMENT.head.childNodes;\\n var beforeChild = null;\\n\\n for (var i = headChildren.length - 1; i > -1; i--) {\\n var child = headChildren[i];\\n var tagName = (child.tagName || '').toUpperCase();\\n\\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\\n beforeChild = child;\\n }\\n }\\n\\n DOCUMENT.head.insertBefore(style, beforeChild);\\n return css;\\n}\\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\\nfunction nextUniqueId() {\\n var size = 12;\\n var id = '';\\n\\n while (size-- > 0) {\\n id += idPool[Math.random() * 62 | 0];\\n }\\n\\n return id;\\n}\\nfunction toArray(obj) {\\n var array = [];\\n\\n for (var i = (obj || []).length >>> 0; i--;) {\\n array[i] = obj[i];\\n }\\n\\n return array;\\n}\\nfunction classArray(node) {\\n if (node.classList) {\\n return toArray(node.classList);\\n } else {\\n return (node.getAttribute('class') || '').split(' ').filter(function (i) {\\n return i;\\n });\\n }\\n}\\nfunction getIconName(familyPrefix, cls) {\\n var parts = cls.split('-');\\n var prefix = parts[0];\\n var iconName = parts.slice(1).join('-');\\n\\n if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\\n return iconName;\\n } else {\\n return null;\\n }\\n}\\nfunction htmlEscape(str) {\\n return \\\"\\\".concat(str).replace(/&/g, '&').replace(/\\\"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>');\\n}\\nfunction joinAttributes(attributes) {\\n return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\\n return acc + \\\"\\\".concat(attributeName, \\\"=\\\\\\\"\\\").concat(htmlEscape(attributes[attributeName]), \\\"\\\\\\\" \\\");\\n }, '').trim();\\n}\\nfunction joinStyles(styles) {\\n return Object.keys(styles || {}).reduce(function (acc, styleName) {\\n return acc + \\\"\\\".concat(styleName, \\\": \\\").concat(styles[styleName], \\\";\\\");\\n }, '');\\n}\\nfunction transformIsMeaningful(transform) {\\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\\n}\\nfunction transformForSvg(_ref) {\\n var transform = _ref.transform,\\n containerWidth = _ref.containerWidth,\\n iconWidth = _ref.iconWidth;\\n var outer = {\\n transform: \\\"translate(\\\".concat(containerWidth / 2, \\\" 256)\\\")\\n };\\n var innerTranslate = \\\"translate(\\\".concat(transform.x * 32, \\\", \\\").concat(transform.y * 32, \\\") \\\");\\n var innerScale = \\\"scale(\\\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \\\", \\\").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \\\") \\\");\\n var innerRotate = \\\"rotate(\\\".concat(transform.rotate, \\\" 0 0)\\\");\\n var inner = {\\n transform: \\\"\\\".concat(innerTranslate, \\\" \\\").concat(innerScale, \\\" \\\").concat(innerRotate)\\n };\\n var path = {\\n transform: \\\"translate(\\\".concat(iconWidth / 2 * -1, \\\" -256)\\\")\\n };\\n return {\\n outer: outer,\\n inner: inner,\\n path: path\\n };\\n}\\nfunction transformForCss(_ref2) {\\n var transform = _ref2.transform,\\n _ref2$width = _ref2.width,\\n width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\\n _ref2$height = _ref2.height,\\n height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\\n _ref2$startCentered = _ref2.startCentered,\\n startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\\n var val = '';\\n\\n if (startCentered && IS_IE) {\\n val += \\\"translate(\\\".concat(transform.x / d - width / 2, \\\"em, \\\").concat(transform.y / d - height / 2, \\\"em) \\\");\\n } else if (startCentered) {\\n val += \\\"translate(calc(-50% + \\\".concat(transform.x / d, \\\"em), calc(-50% + \\\").concat(transform.y / d, \\\"em)) \\\");\\n } else {\\n val += \\\"translate(\\\".concat(transform.x / d, \\\"em, \\\").concat(transform.y / d, \\\"em) \\\");\\n }\\n\\n val += \\\"scale(\\\".concat(transform.size / d * (transform.flipX ? -1 : 1), \\\", \\\").concat(transform.size / d * (transform.flipY ? -1 : 1), \\\") \\\");\\n val += \\\"rotate(\\\".concat(transform.rotate, \\\"deg) \\\");\\n return val;\\n}\\n\\nvar ALL_SPACE = {\\n x: 0,\\n y: 0,\\n width: '100%',\\n height: '100%'\\n};\\nfunction makeIconMasking (_ref) {\\n var children = _ref.children,\\n attributes = _ref.attributes,\\n main = _ref.main,\\n mask = _ref.mask,\\n transform = _ref.transform;\\n var mainWidth = main.width,\\n mainPath = main.icon;\\n var maskWidth = mask.width,\\n maskPath = mask.icon;\\n var trans = transformForSvg({\\n transform: transform,\\n containerWidth: maskWidth,\\n iconWidth: mainWidth\\n });\\n var maskRect = {\\n tag: 'rect',\\n attributes: _objectSpread({}, ALL_SPACE, {\\n fill: 'white'\\n })\\n };\\n var maskInnerGroup = {\\n tag: 'g',\\n attributes: _objectSpread({}, trans.inner),\\n children: [{\\n tag: 'path',\\n attributes: _objectSpread({}, mainPath.attributes, trans.path, {\\n fill: 'black'\\n })\\n }]\\n };\\n var maskOuterGroup = {\\n tag: 'g',\\n attributes: _objectSpread({}, trans.outer),\\n children: [maskInnerGroup]\\n };\\n var maskId = \\\"mask-\\\".concat(nextUniqueId());\\n var clipId = \\\"clip-\\\".concat(nextUniqueId());\\n var maskTag = {\\n tag: 'mask',\\n attributes: _objectSpread({}, ALL_SPACE, {\\n id: maskId,\\n maskUnits: 'userSpaceOnUse',\\n maskContentUnits: 'userSpaceOnUse'\\n }),\\n children: [maskRect, maskOuterGroup]\\n };\\n var defs = {\\n tag: 'defs',\\n children: [{\\n tag: 'clipPath',\\n attributes: {\\n id: clipId\\n },\\n children: [maskPath]\\n }, maskTag]\\n };\\n children.push(defs, {\\n tag: 'rect',\\n attributes: _objectSpread({\\n fill: 'currentColor',\\n 'clip-path': \\\"url(#\\\".concat(clipId, \\\")\\\"),\\n mask: \\\"url(#\\\".concat(maskId, \\\")\\\")\\n }, ALL_SPACE)\\n });\\n return {\\n children: children,\\n attributes: attributes\\n };\\n}\\n\\nfunction makeIconStandard (_ref) {\\n var children = _ref.children,\\n attributes = _ref.attributes,\\n main = _ref.main,\\n transform = _ref.transform,\\n styles = _ref.styles;\\n var styleString = joinStyles(styles);\\n\\n if (styleString.length > 0) {\\n attributes['style'] = styleString;\\n }\\n\\n if (transformIsMeaningful(transform)) {\\n var trans = transformForSvg({\\n transform: transform,\\n containerWidth: main.width,\\n iconWidth: main.width\\n });\\n children.push({\\n tag: 'g',\\n attributes: _objectSpread({}, trans.outer),\\n children: [{\\n tag: 'g',\\n attributes: _objectSpread({}, trans.inner),\\n children: [{\\n tag: main.icon.tag,\\n children: main.icon.children,\\n attributes: _objectSpread({}, main.icon.attributes, trans.path)\\n }]\\n }]\\n });\\n } else {\\n children.push(main.icon);\\n }\\n\\n return {\\n children: children,\\n attributes: attributes\\n };\\n}\\n\\nfunction asIcon (_ref) {\\n var children = _ref.children,\\n main = _ref.main,\\n mask = _ref.mask,\\n attributes = _ref.attributes,\\n styles = _ref.styles,\\n transform = _ref.transform;\\n\\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\\n var width = main.width,\\n height = main.height;\\n var offset = {\\n x: width / height / 2,\\n y: 0.5\\n };\\n attributes['style'] = joinStyles(_objectSpread({}, styles, {\\n 'transform-origin': \\\"\\\".concat(offset.x + transform.x / 16, \\\"em \\\").concat(offset.y + transform.y / 16, \\\"em\\\")\\n }));\\n }\\n\\n return [{\\n tag: 'svg',\\n attributes: attributes,\\n children: children\\n }];\\n}\\n\\nfunction asSymbol (_ref) {\\n var prefix = _ref.prefix,\\n iconName = _ref.iconName,\\n children = _ref.children,\\n attributes = _ref.attributes,\\n symbol = _ref.symbol;\\n var id = symbol === true ? \\\"\\\".concat(prefix, \\\"-\\\").concat(config.familyPrefix, \\\"-\\\").concat(iconName) : symbol;\\n return [{\\n tag: 'svg',\\n attributes: {\\n style: 'display: none;'\\n },\\n children: [{\\n tag: 'symbol',\\n attributes: _objectSpread({}, attributes, {\\n id: id\\n }),\\n children: children\\n }]\\n }];\\n}\\n\\nfunction makeInlineSvgAbstract(params) {\\n var _params$icons = params.icons,\\n main = _params$icons.main,\\n mask = _params$icons.mask,\\n prefix = params.prefix,\\n iconName = params.iconName,\\n transform = params.transform,\\n symbol = params.symbol,\\n title = params.title,\\n extra = params.extra,\\n _params$watchable = params.watchable,\\n watchable = _params$watchable === void 0 ? false : _params$watchable;\\n\\n var _ref = mask.found ? mask : main,\\n width = _ref.width,\\n height = _ref.height;\\n\\n var widthClass = \\\"fa-w-\\\".concat(Math.ceil(width / height * 16));\\n var attrClass = [config.replacementClass, iconName ? \\\"\\\".concat(config.familyPrefix, \\\"-\\\").concat(iconName) : '', widthClass].filter(function (c) {\\n return extra.classes.indexOf(c) === -1;\\n }).concat(extra.classes).join(' ');\\n var content = {\\n children: [],\\n attributes: _objectSpread({}, extra.attributes, {\\n 'data-prefix': prefix,\\n 'data-icon': iconName,\\n 'class': attrClass,\\n 'role': 'img',\\n 'xmlns': 'http://www.w3.org/2000/svg',\\n 'viewBox': \\\"0 0 \\\".concat(width, \\\" \\\").concat(height)\\n })\\n };\\n\\n if (watchable) {\\n content.attributes[DATA_FA_I2SVG] = '';\\n }\\n\\n if (title) content.children.push({\\n tag: 'title',\\n attributes: {\\n id: content.attributes['aria-labelledby'] || \\\"title-\\\".concat(nextUniqueId())\\n },\\n children: [title]\\n });\\n\\n var args = _objectSpread({}, content, {\\n prefix: prefix,\\n iconName: iconName,\\n main: main,\\n mask: mask,\\n transform: transform,\\n symbol: symbol,\\n styles: extra.styles\\n });\\n\\n var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),\\n children = _ref2.children,\\n attributes = _ref2.attributes;\\n\\n args.children = children;\\n args.attributes = attributes;\\n\\n if (symbol) {\\n return asSymbol(args);\\n } else {\\n return asIcon(args);\\n }\\n}\\nfunction makeLayersTextAbstract(params) {\\n var content = params.content,\\n width = params.width,\\n height = params.height,\\n transform = params.transform,\\n title = params.title,\\n extra = params.extra,\\n _params$watchable2 = params.watchable,\\n watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\\n\\n var attributes = _objectSpread({}, extra.attributes, title ? {\\n 'title': title\\n } : {}, {\\n 'class': extra.classes.join(' ')\\n });\\n\\n if (watchable) {\\n attributes[DATA_FA_I2SVG] = '';\\n }\\n\\n var styles = _objectSpread({}, extra.styles);\\n\\n if (transformIsMeaningful(transform)) {\\n styles['transform'] = transformForCss({\\n transform: transform,\\n startCentered: true,\\n width: width,\\n height: height\\n });\\n styles['-webkit-transform'] = styles['transform'];\\n }\\n\\n var styleString = joinStyles(styles);\\n\\n if (styleString.length > 0) {\\n attributes['style'] = styleString;\\n }\\n\\n var val = [];\\n val.push({\\n tag: 'span',\\n attributes: attributes,\\n children: [content]\\n });\\n\\n if (title) {\\n val.push({\\n tag: 'span',\\n attributes: {\\n class: 'sr-only'\\n },\\n children: [title]\\n });\\n }\\n\\n return val;\\n}\\nfunction makeLayersCounterAbstract(params) {\\n var content = params.content,\\n title = params.title,\\n extra = params.extra;\\n\\n var attributes = _objectSpread({}, extra.attributes, title ? {\\n 'title': title\\n } : {}, {\\n 'class': extra.classes.join(' ')\\n });\\n\\n var styleString = joinStyles(extra.styles);\\n\\n if (styleString.length > 0) {\\n attributes['style'] = styleString;\\n }\\n\\n var val = [];\\n val.push({\\n tag: 'span',\\n attributes: attributes,\\n children: [content]\\n });\\n\\n if (title) {\\n val.push({\\n tag: 'span',\\n attributes: {\\n class: 'sr-only'\\n },\\n children: [title]\\n });\\n }\\n\\n return val;\\n}\\n\\nvar noop$1 = function noop() {};\\n\\nvar p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\\n mark: noop$1,\\n measure: noop$1\\n};\\nvar preamble = \\\"FA \\\\\\\"5.7.2\\\\\\\"\\\";\\n\\nvar begin = function begin(name) {\\n p.mark(\\\"\\\".concat(preamble, \\\" \\\").concat(name, \\\" begins\\\"));\\n return function () {\\n return end(name);\\n };\\n};\\n\\nvar end = function end(name) {\\n p.mark(\\\"\\\".concat(preamble, \\\" \\\").concat(name, \\\" ends\\\"));\\n p.measure(\\\"\\\".concat(preamble, \\\" \\\").concat(name), \\\"\\\".concat(preamble, \\\" \\\").concat(name, \\\" begins\\\"), \\\"\\\".concat(preamble, \\\" \\\").concat(name, \\\" ends\\\"));\\n};\\n\\nvar perf = {\\n begin: begin,\\n end: end\\n};\\n\\n/**\\n * Internal helper to bind a function known to have 4 arguments\\n * to a given context.\\n */\\n\\nvar bindInternal4 = function bindInternal4(func, thisContext) {\\n return function (a, b, c, d) {\\n return func.call(thisContext, a, b, c, d);\\n };\\n};\\n\\n/**\\n * # Reduce\\n *\\n * A fast object `.reduce()` implementation.\\n *\\n * @param {Object} subject The object to reduce over.\\n * @param {Function} fn The reducer function.\\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\\n * @param {Object} thisContext The context for the reducer.\\n * @return {mixed} The final result.\\n */\\n\\n\\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\\n var keys = Object.keys(subject),\\n length = keys.length,\\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\\n i,\\n key,\\n result;\\n\\n if (initialValue === undefined) {\\n i = 1;\\n result = subject[keys[0]];\\n } else {\\n i = 0;\\n result = initialValue;\\n }\\n\\n for (; i < length; i++) {\\n key = keys[i];\\n result = iterator(result, subject[key], key, subject);\\n }\\n\\n return result;\\n};\\n\\nfunction defineIcons(prefix, icons) {\\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\\n var _params$skipHooks = params.skipHooks,\\n skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\\n var normalized = Object.keys(icons).reduce(function (acc, iconName) {\\n var icon = icons[iconName];\\n var expanded = !!icon.icon;\\n\\n if (expanded) {\\n acc[icon.iconName] = icon.icon;\\n } else {\\n acc[iconName] = icon;\\n }\\n\\n return acc;\\n }, {});\\n\\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\\n namespace.hooks.addPack(prefix, normalized);\\n } else {\\n namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);\\n }\\n /**\\n * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\\n * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\\n * for `fas` so we'll easy the upgrade process for our users by automatically defining\\n * this as well.\\n */\\n\\n\\n if (prefix === 'fas') {\\n defineIcons('fa', icons);\\n }\\n}\\n\\nvar styles = namespace.styles,\\n shims = namespace.shims;\\nvar _byUnicode = {};\\nvar _byLigature = {};\\nvar _byOldName = {};\\nvar build = function build() {\\n var lookup = function lookup(reducer) {\\n return reduce(styles, function (o, style, prefix) {\\n o[prefix] = reduce(style, reducer, {});\\n return o;\\n }, {});\\n };\\n\\n _byUnicode = lookup(function (acc, icon, iconName) {\\n if (icon[3]) {\\n acc[icon[3]] = iconName;\\n }\\n\\n return acc;\\n });\\n _byLigature = lookup(function (acc, icon, iconName) {\\n var ligatures = icon[2];\\n acc[iconName] = iconName;\\n ligatures.forEach(function (ligature) {\\n acc[ligature] = iconName;\\n });\\n return acc;\\n });\\n var hasRegular = 'far' in styles;\\n _byOldName = reduce(shims, function (acc, shim) {\\n var oldName = shim[0];\\n var prefix = shim[1];\\n var iconName = shim[2];\\n\\n if (prefix === 'far' && !hasRegular) {\\n prefix = 'fas';\\n }\\n\\n acc[oldName] = {\\n prefix: prefix,\\n iconName: iconName\\n };\\n return acc;\\n }, {});\\n};\\nbuild();\\nfunction byUnicode(prefix, unicode) {\\n return _byUnicode[prefix][unicode];\\n}\\nfunction byLigature(prefix, ligature) {\\n return _byLigature[prefix][ligature];\\n}\\nfunction byOldName(name) {\\n return _byOldName[name] || {\\n prefix: null,\\n iconName: null\\n };\\n}\\n\\nvar styles$1 = namespace.styles;\\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\\n return {\\n prefix: null,\\n iconName: null,\\n rest: []\\n };\\n};\\nfunction getCanonicalIcon(values) {\\n return values.reduce(function (acc, cls) {\\n var iconName = getIconName(config.familyPrefix, cls);\\n\\n if (styles$1[cls]) {\\n acc.prefix = cls;\\n } else if (config.autoFetchSvg && ['fas', 'far', 'fal', 'fab', 'fa'].indexOf(cls) > -1) {\\n acc.prefix = cls;\\n } else if (iconName) {\\n var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};\\n acc.iconName = shim.iconName || iconName;\\n acc.prefix = shim.prefix || acc.prefix;\\n } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {\\n acc.rest.push(cls);\\n }\\n\\n return acc;\\n }, emptyCanonicalIcon());\\n}\\nfunction iconFromMapping(mapping, prefix, iconName) {\\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\\n return {\\n prefix: prefix,\\n iconName: iconName,\\n icon: mapping[prefix][iconName]\\n };\\n }\\n}\\n\\nfunction toHtml(abstractNodes) {\\n var tag = abstractNodes.tag,\\n _abstractNodes$attrib = abstractNodes.attributes,\\n attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\\n _abstractNodes$childr = abstractNodes.children,\\n children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\\n\\n if (typeof abstractNodes === 'string') {\\n return htmlEscape(abstractNodes);\\n } else {\\n return \\\"<\\\".concat(tag, \\\" \\\").concat(joinAttributes(attributes), \\\">\\\").concat(children.map(toHtml).join(''), \\\"</\\\").concat(tag, \\\">\\\");\\n }\\n}\\n\\nvar noop$2 = function noop() {};\\n\\nfunction isWatched(node) {\\n var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\\n return typeof i2svg === 'string';\\n}\\n\\nfunction getMutator() {\\n if (config.autoReplaceSvg === true) {\\n return mutators.replace;\\n }\\n\\n var mutator = mutators[config.autoReplaceSvg];\\n return mutator || mutators.replace;\\n}\\n\\nvar mutators = {\\n replace: function replace(mutation) {\\n var node = mutation[0];\\n var abstract = mutation[1];\\n var newOuterHTML = abstract.map(function (a) {\\n return toHtml(a);\\n }).join('\\\\n');\\n\\n if (node.parentNode && node.outerHTML) {\\n node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? \\\"<!-- \\\".concat(node.outerHTML, \\\" -->\\\") : '');\\n } else if (node.parentNode) {\\n var newNode = document.createElement('span');\\n node.parentNode.replaceChild(newNode, node);\\n newNode.outerHTML = newOuterHTML;\\n }\\n },\\n nest: function nest(mutation) {\\n var node = mutation[0];\\n var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\\n // Short-circuit to the standard replacement\\n\\n if (~classArray(node).indexOf(config.replacementClass)) {\\n return mutators.replace(mutation);\\n }\\n\\n var forSvg = new RegExp(\\\"\\\".concat(config.familyPrefix, \\\"-.*\\\"));\\n delete abstract[0].attributes.style;\\n var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\\n if (cls === config.replacementClass || cls.match(forSvg)) {\\n acc.toSvg.push(cls);\\n } else {\\n acc.toNode.push(cls);\\n }\\n\\n return acc;\\n }, {\\n toNode: [],\\n toSvg: []\\n });\\n abstract[0].attributes.class = splitClasses.toSvg.join(' ');\\n var newInnerHTML = abstract.map(function (a) {\\n return toHtml(a);\\n }).join('\\\\n');\\n node.setAttribute('class', splitClasses.toNode.join(' '));\\n node.setAttribute(DATA_FA_I2SVG, '');\\n node.innerHTML = newInnerHTML;\\n }\\n};\\nfunction perform(mutations, callback) {\\n var callbackFunction = typeof callback === 'function' ? callback : noop$2;\\n\\n if (mutations.length === 0) {\\n callbackFunction();\\n } else {\\n var frame = WINDOW.requestAnimationFrame || function (op) {\\n return op();\\n };\\n\\n frame(function () {\\n var mutator = getMutator();\\n var mark = perf.begin('mutate');\\n mutations.map(mutator);\\n mark();\\n callbackFunction();\\n });\\n }\\n}\\nvar disabled = false;\\nfunction disableObservation() {\\n disabled = true;\\n}\\nfunction enableObservation() {\\n disabled = false;\\n}\\nvar mo = null;\\nfunction observe(options) {\\n if (!MUTATION_OBSERVER) {\\n return;\\n }\\n\\n if (!config.observeMutations) {\\n return;\\n }\\n\\n var treeCallback = options.treeCallback,\\n nodeCallback = options.nodeCallback,\\n pseudoElementsCallback = options.pseudoElementsCallback,\\n _options$observeMutat = options.observeMutationsRoot,\\n observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\\n mo = new MUTATION_OBSERVER(function (objects) {\\n if (disabled) return;\\n toArray(objects).forEach(function (mutationRecord) {\\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\\n if (config.searchPseudoElements) {\\n pseudoElementsCallback(mutationRecord.target);\\n }\\n\\n treeCallback(mutationRecord.target);\\n }\\n\\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\\n pseudoElementsCallback(mutationRecord.target.parentNode);\\n }\\n\\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\\n if (mutationRecord.attributeName === 'class') {\\n var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\\n prefix = _getCanonicalIcon.prefix,\\n iconName = _getCanonicalIcon.iconName;\\n\\n if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);\\n if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);\\n } else {\\n nodeCallback(mutationRecord.target);\\n }\\n }\\n });\\n });\\n if (!IS_DOM) return;\\n mo.observe(observeMutationsRoot, {\\n childList: true,\\n attributes: true,\\n characterData: true,\\n subtree: true\\n });\\n}\\nfunction disconnect() {\\n if (!mo) return;\\n mo.disconnect();\\n}\\n\\nfunction styleParser (node) {\\n var style = node.getAttribute('style');\\n var val = [];\\n\\n if (style) {\\n val = style.split(';').reduce(function (acc, style) {\\n var styles = style.split(':');\\n var prop = styles[0];\\n var value = styles.slice(1);\\n\\n if (prop && value.length > 0) {\\n acc[prop] = value.join(':').trim();\\n }\\n\\n return acc;\\n }, {});\\n }\\n\\n return val;\\n}\\n\\nfunction toHex(unicode) {\\n var result = '';\\n\\n for (var i = 0; i < unicode.length; i++) {\\n var hex = unicode.charCodeAt(i).toString(16);\\n result += ('000' + hex).slice(-4);\\n }\\n\\n return result;\\n}\\n\\nfunction classParser (node) {\\n var existingPrefix = node.getAttribute('data-prefix');\\n var existingIconName = node.getAttribute('data-icon');\\n var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\\n var val = getCanonicalIcon(classArray(node));\\n\\n if (existingPrefix && existingIconName) {\\n val.prefix = existingPrefix;\\n val.iconName = existingIconName;\\n }\\n\\n if (val.prefix && innerText.length > 1) {\\n val.iconName = byLigature(val.prefix, node.innerText);\\n } else if (val.prefix && innerText.length === 1) {\\n val.iconName = byUnicode(val.prefix, toHex(node.innerText));\\n }\\n\\n return val;\\n}\\n\\nvar parseTransformString = function parseTransformString(transformString) {\\n var transform = {\\n size: 16,\\n x: 0,\\n y: 0,\\n flipX: false,\\n flipY: false,\\n rotate: 0\\n };\\n\\n if (!transformString) {\\n return transform;\\n } else {\\n return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\\n var parts = n.toLowerCase().split('-');\\n var first = parts[0];\\n var rest = parts.slice(1).join('-');\\n\\n if (first && rest === 'h') {\\n acc.flipX = true;\\n return acc;\\n }\\n\\n if (first && rest === 'v') {\\n acc.flipY = true;\\n return acc;\\n }\\n\\n rest = parseFloat(rest);\\n\\n if (isNaN(rest)) {\\n return acc;\\n }\\n\\n switch (first) {\\n case 'grow':\\n acc.size = acc.size + rest;\\n break;\\n\\n case 'shrink':\\n acc.size = acc.size - rest;\\n break;\\n\\n case 'left':\\n acc.x = acc.x - rest;\\n break;\\n\\n case 'right':\\n acc.x = acc.x + rest;\\n break;\\n\\n case 'up':\\n acc.y = acc.y - rest;\\n break;\\n\\n case 'down':\\n acc.y = acc.y + rest;\\n break;\\n\\n case 'rotate':\\n acc.rotate = acc.rotate + rest;\\n break;\\n }\\n\\n return acc;\\n }, transform);\\n }\\n};\\nfunction transformParser (node) {\\n return parseTransformString(node.getAttribute('data-fa-transform'));\\n}\\n\\nfunction symbolParser (node) {\\n var symbol = node.getAttribute('data-fa-symbol');\\n return symbol === null ? false : symbol === '' ? true : symbol;\\n}\\n\\nfunction attributesParser (node) {\\n var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\\n if (acc.name !== 'class' && acc.name !== 'style') {\\n acc[attr.name] = attr.value;\\n }\\n\\n return acc;\\n }, {});\\n var title = node.getAttribute('title');\\n\\n if (config.autoA11y) {\\n if (title) {\\n extraAttributes['aria-labelledby'] = \\\"\\\".concat(config.replacementClass, \\\"-title-\\\").concat(nextUniqueId());\\n } else {\\n extraAttributes['aria-hidden'] = 'true';\\n extraAttributes['focusable'] = 'false';\\n }\\n }\\n\\n return extraAttributes;\\n}\\n\\nfunction maskParser (node) {\\n var mask = node.getAttribute('data-fa-mask');\\n\\n if (!mask) {\\n return emptyCanonicalIcon();\\n } else {\\n return getCanonicalIcon(mask.split(' ').map(function (i) {\\n return i.trim();\\n }));\\n }\\n}\\n\\nfunction blankMeta() {\\n return {\\n iconName: null,\\n title: null,\\n prefix: null,\\n transform: meaninglessTransform,\\n symbol: false,\\n mask: null,\\n extra: {\\n classes: [],\\n styles: {},\\n attributes: {}\\n }\\n };\\n}\\nfunction parseMeta(node) {\\n var _classParser = classParser(node),\\n iconName = _classParser.iconName,\\n prefix = _classParser.prefix,\\n extraClasses = _classParser.rest;\\n\\n var extraStyles = styleParser(node);\\n var transform = transformParser(node);\\n var symbol = symbolParser(node);\\n var extraAttributes = attributesParser(node);\\n var mask = maskParser(node);\\n return {\\n iconName: iconName,\\n title: node.getAttribute('title'),\\n prefix: prefix,\\n transform: transform,\\n symbol: symbol,\\n mask: mask,\\n extra: {\\n classes: extraClasses,\\n styles: extraStyles,\\n attributes: extraAttributes\\n }\\n };\\n}\\n\\nfunction MissingIcon(error) {\\n this.name = 'MissingIcon';\\n this.message = error || 'Icon unavailable';\\n this.stack = new Error().stack;\\n}\\nMissingIcon.prototype = Object.create(Error.prototype);\\nMissingIcon.prototype.constructor = MissingIcon;\\n\\nvar FILL = {\\n fill: 'currentColor'\\n};\\nvar ANIMATION_BASE = {\\n attributeType: 'XML',\\n repeatCount: 'indefinite',\\n dur: '2s'\\n};\\nvar RING = {\\n tag: 'path',\\n attributes: _objectSpread({}, FILL, {\\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\\n })\\n};\\n\\nvar OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, {\\n attributeName: 'opacity'\\n});\\n\\nvar DOT = {\\n tag: 'circle',\\n attributes: _objectSpread({}, FILL, {\\n cx: '256',\\n cy: '364',\\n r: '28'\\n }),\\n children: [{\\n tag: 'animate',\\n attributes: _objectSpread({}, ANIMATION_BASE, {\\n attributeName: 'r',\\n values: '28;14;28;28;14;28;'\\n })\\n }, {\\n tag: 'animate',\\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\\n values: '1;0;1;1;0;1;'\\n })\\n }]\\n};\\nvar QUESTION = {\\n tag: 'path',\\n attributes: _objectSpread({}, FILL, {\\n opacity: '1',\\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\\n }),\\n children: [{\\n tag: 'animate',\\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\\n values: '1;0;0;0;0;1;'\\n })\\n }]\\n};\\nvar EXCLAMATION = {\\n tag: 'path',\\n attributes: _objectSpread({}, FILL, {\\n opacity: '0',\\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\\n }),\\n children: [{\\n tag: 'animate',\\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\\n values: '0;0;1;1;0;0;'\\n })\\n }]\\n};\\nvar missing = {\\n tag: 'g',\\n children: [RING, DOT, QUESTION, EXCLAMATION]\\n};\\n\\nvar styles$2 = namespace.styles;\\nfunction findIcon(iconName, prefix) {\\n return new picked(function (resolve, reject) {\\n var val = {\\n found: false,\\n width: 512,\\n height: 512,\\n icon: missing\\n };\\n\\n if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) {\\n var icon = styles$2[prefix][iconName];\\n var width = icon[0];\\n var height = icon[1];\\n var vectorData = icon.slice(4);\\n val = {\\n found: true,\\n width: width,\\n height: height,\\n icon: {\\n tag: 'path',\\n attributes: {\\n fill: 'currentColor',\\n d: vectorData[0]\\n }\\n }\\n };\\n return resolve(val);\\n }\\n\\n if (iconName && prefix && !config.showMissingIcons) {\\n reject(new MissingIcon(\\\"Icon is missing for prefix \\\".concat(prefix, \\\" with icon name \\\").concat(iconName)));\\n } else {\\n resolve(val);\\n }\\n });\\n}\\n\\nvar styles$3 = namespace.styles;\\n\\nfunction generateSvgReplacementMutation(node, nodeMeta) {\\n var iconName = nodeMeta.iconName,\\n title = nodeMeta.title,\\n prefix = nodeMeta.prefix,\\n transform = nodeMeta.transform,\\n symbol = nodeMeta.symbol,\\n mask = nodeMeta.mask,\\n extra = nodeMeta.extra;\\n return new picked(function (resolve, reject) {\\n picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) {\\n var _ref2 = _slicedToArray(_ref, 2),\\n main = _ref2[0],\\n mask = _ref2[1];\\n\\n resolve([node, makeInlineSvgAbstract({\\n icons: {\\n main: main,\\n mask: mask\\n },\\n prefix: prefix,\\n iconName: iconName,\\n transform: transform,\\n symbol: symbol,\\n mask: mask,\\n title: title,\\n extra: extra,\\n watchable: true\\n })]);\\n });\\n });\\n}\\n\\nfunction generateLayersText(node, nodeMeta) {\\n var title = nodeMeta.title,\\n transform = nodeMeta.transform,\\n extra = nodeMeta.extra;\\n var width = null;\\n var height = null;\\n\\n if (IS_IE) {\\n var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\\n var boundingClientRect = node.getBoundingClientRect();\\n width = boundingClientRect.width / computedFontSize;\\n height = boundingClientRect.height / computedFontSize;\\n }\\n\\n if (config.autoA11y && !title) {\\n extra.attributes['aria-hidden'] = 'true';\\n }\\n\\n return picked.resolve([node, makeLayersTextAbstract({\\n content: node.innerHTML,\\n width: width,\\n height: height,\\n transform: transform,\\n title: title,\\n extra: extra,\\n watchable: true\\n })]);\\n}\\n\\nfunction generateMutation(node) {\\n var nodeMeta = parseMeta(node);\\n\\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\\n return generateLayersText(node, nodeMeta);\\n } else {\\n return generateSvgReplacementMutation(node, nodeMeta);\\n }\\n}\\n\\nfunction onTree(root) {\\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\\n if (!IS_DOM) return;\\n var htmlClassList = DOCUMENT.documentElement.classList;\\n\\n var hclAdd = function hclAdd(suffix) {\\n return htmlClassList.add(\\\"\\\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \\\"-\\\").concat(suffix));\\n };\\n\\n var hclRemove = function hclRemove(suffix) {\\n return htmlClassList.remove(\\\"\\\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \\\"-\\\").concat(suffix));\\n };\\n\\n var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3);\\n var prefixesDomQuery = [\\\".\\\".concat(LAYERS_TEXT_CLASSNAME, \\\":not([\\\").concat(DATA_FA_I2SVG, \\\"])\\\")].concat(prefixes.map(function (p) {\\n return \\\".\\\".concat(p, \\\":not([\\\").concat(DATA_FA_I2SVG, \\\"])\\\");\\n })).join(', ');\\n\\n if (prefixesDomQuery.length === 0) {\\n return;\\n }\\n\\n var candidates = toArray(root.querySelectorAll(prefixesDomQuery));\\n\\n if (candidates.length > 0) {\\n hclAdd('pending');\\n hclRemove('complete');\\n } else {\\n return;\\n }\\n\\n var mark = perf.begin('onTree');\\n var mutations = candidates.reduce(function (acc, node) {\\n try {\\n var mutation = generateMutation(node);\\n\\n if (mutation) {\\n acc.push(mutation);\\n }\\n } catch (e) {\\n if (!PRODUCTION) {\\n if (e instanceof MissingIcon) {\\n console.error(e);\\n }\\n }\\n }\\n\\n return acc;\\n }, []);\\n return new picked(function (resolve, reject) {\\n picked.all(mutations).then(function (resolvedMutations) {\\n perform(resolvedMutations, function () {\\n hclAdd('active');\\n hclAdd('complete');\\n hclRemove('pending');\\n if (typeof callback === 'function') callback();\\n mark();\\n resolve();\\n });\\n }).catch(function () {\\n mark();\\n reject();\\n });\\n });\\n}\\nfunction onNode(node) {\\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\\n generateMutation(node).then(function (mutation) {\\n if (mutation) {\\n perform([mutation], callback);\\n }\\n });\\n}\\n\\nfunction replaceForPosition(node, position) {\\n var pendingAttribute = \\\"\\\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\\n return new picked(function (resolve, reject) {\\n if (node.getAttribute(pendingAttribute) !== null) {\\n // This node is already being processed\\n return resolve();\\n }\\n\\n var children = toArray(node.children);\\n var alreadyProcessedPseudoElement = children.filter(function (c) {\\n return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\\n })[0];\\n var styles = WINDOW.getComputedStyle(node, position);\\n var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\\n var fontWeight = styles.getPropertyValue('font-weight');\\n\\n if (alreadyProcessedPseudoElement && !fontFamily) {\\n // If we've already processed it but the current computed style does not result in a font-family,\\n // that probably means that a class name that was previously present to make the icon has been\\n // removed. So we now should delete the icon.\\n node.removeChild(alreadyProcessedPseudoElement);\\n return resolve();\\n } else if (fontFamily) {\\n var content = styles.getPropertyValue('content');\\n var prefix = ~['Light', 'Regular', 'Solid', 'Brands'].indexOf(fontFamily[1]) ? STYLE_TO_PREFIX[fontFamily[1].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\\n var iconName = byUnicode(prefix, toHex(content.length === 3 ? content.substr(1, 1) : content)); // Only convert the pseudo element in this :before/:after position into an icon if we haven't\\n // already done so with the same prefix and iconName\\n\\n if (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconName) {\\n node.setAttribute(pendingAttribute, iconName);\\n\\n if (alreadyProcessedPseudoElement) {\\n // Delete the old one, since we're replacing it with a new one\\n node.removeChild(alreadyProcessedPseudoElement);\\n }\\n\\n var meta = blankMeta();\\n var extra = meta.extra;\\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\\n findIcon(iconName, prefix).then(function (main) {\\n var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, {\\n icons: {\\n main: main,\\n mask: emptyCanonicalIcon()\\n },\\n prefix: prefix,\\n iconName: iconName,\\n extra: extra,\\n watchable: true\\n }));\\n var element = DOCUMENT.createElement('svg');\\n\\n if (position === ':before') {\\n node.insertBefore(element, node.firstChild);\\n } else {\\n node.appendChild(element);\\n }\\n\\n element.outerHTML = abstract.map(function (a) {\\n return toHtml(a);\\n }).join('\\\\n');\\n node.removeAttribute(pendingAttribute);\\n resolve();\\n }).catch(reject);\\n } else {\\n resolve();\\n }\\n } else {\\n resolve();\\n }\\n });\\n}\\n\\nfunction replace(node) {\\n return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]);\\n}\\n\\nfunction processable(node) {\\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\\n}\\n\\nfunction searchPseudoElements (root) {\\n if (!IS_DOM) return;\\n return new picked(function (resolve, reject) {\\n var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\\n var end = perf.begin('searchPseudoElements');\\n disableObservation();\\n picked.all(operations).then(function () {\\n end();\\n enableObservation();\\n resolve();\\n }).catch(function () {\\n end();\\n enableObservation();\\n reject();\\n });\\n });\\n}\\n\\nvar baseStyles = \\\"svg:not(:root).svg-inline--fa {\\\\n overflow: visible;\\\\n}\\\\n\\\\n.svg-inline--fa {\\\\n display: inline-block;\\\\n font-size: inherit;\\\\n height: 1em;\\\\n overflow: visible;\\\\n vertical-align: -0.125em;\\\\n}\\\\n.svg-inline--fa.fa-lg {\\\\n vertical-align: -0.225em;\\\\n}\\\\n.svg-inline--fa.fa-w-1 {\\\\n width: 0.0625em;\\\\n}\\\\n.svg-inline--fa.fa-w-2 {\\\\n width: 0.125em;\\\\n}\\\\n.svg-inline--fa.fa-w-3 {\\\\n width: 0.1875em;\\\\n}\\\\n.svg-inline--fa.fa-w-4 {\\\\n width: 0.25em;\\\\n}\\\\n.svg-inline--fa.fa-w-5 {\\\\n width: 0.3125em;\\\\n}\\\\n.svg-inline--fa.fa-w-6 {\\\\n width: 0.375em;\\\\n}\\\\n.svg-inline--fa.fa-w-7 {\\\\n width: 0.4375em;\\\\n}\\\\n.svg-inline--fa.fa-w-8 {\\\\n width: 0.5em;\\\\n}\\\\n.svg-inline--fa.fa-w-9 {\\\\n width: 0.5625em;\\\\n}\\\\n.svg-inline--fa.fa-w-10 {\\\\n width: 0.625em;\\\\n}\\\\n.svg-inline--fa.fa-w-11 {\\\\n width: 0.6875em;\\\\n}\\\\n.svg-inline--fa.fa-w-12 {\\\\n width: 0.75em;\\\\n}\\\\n.svg-inline--fa.fa-w-13 {\\\\n width: 0.8125em;\\\\n}\\\\n.svg-inline--fa.fa-w-14 {\\\\n width: 0.875em;\\\\n}\\\\n.svg-inline--fa.fa-w-15 {\\\\n width: 0.9375em;\\\\n}\\\\n.svg-inline--fa.fa-w-16 {\\\\n width: 1em;\\\\n}\\\\n.svg-inline--fa.fa-w-17 {\\\\n width: 1.0625em;\\\\n}\\\\n.svg-inline--fa.fa-w-18 {\\\\n width: 1.125em;\\\\n}\\\\n.svg-inline--fa.fa-w-19 {\\\\n width: 1.1875em;\\\\n}\\\\n.svg-inline--fa.fa-w-20 {\\\\n width: 1.25em;\\\\n}\\\\n.svg-inline--fa.fa-pull-left {\\\\n margin-right: 0.3em;\\\\n width: auto;\\\\n}\\\\n.svg-inline--fa.fa-pull-right {\\\\n margin-left: 0.3em;\\\\n width: auto;\\\\n}\\\\n.svg-inline--fa.fa-border {\\\\n height: 1.5em;\\\\n}\\\\n.svg-inline--fa.fa-li {\\\\n width: 2em;\\\\n}\\\\n.svg-inline--fa.fa-fw {\\\\n width: 1.25em;\\\\n}\\\\n\\\\n.fa-layers svg.svg-inline--fa {\\\\n bottom: 0;\\\\n left: 0;\\\\n margin: auto;\\\\n position: absolute;\\\\n right: 0;\\\\n top: 0;\\\\n}\\\\n\\\\n.fa-layers {\\\\n display: inline-block;\\\\n height: 1em;\\\\n position: relative;\\\\n text-align: center;\\\\n vertical-align: -0.125em;\\\\n width: 1em;\\\\n}\\\\n.fa-layers svg.svg-inline--fa {\\\\n -webkit-transform-origin: center center;\\\\n transform-origin: center center;\\\\n}\\\\n\\\\n.fa-layers-counter, .fa-layers-text {\\\\n display: inline-block;\\\\n position: absolute;\\\\n text-align: center;\\\\n}\\\\n\\\\n.fa-layers-text {\\\\n left: 50%;\\\\n top: 50%;\\\\n -webkit-transform: translate(-50%, -50%);\\\\n transform: translate(-50%, -50%);\\\\n -webkit-transform-origin: center center;\\\\n transform-origin: center center;\\\\n}\\\\n\\\\n.fa-layers-counter {\\\\n background-color: #ff253a;\\\\n border-radius: 1em;\\\\n -webkit-box-sizing: border-box;\\\\n box-sizing: border-box;\\\\n color: #fff;\\\\n height: 1.5em;\\\\n line-height: 1;\\\\n max-width: 5em;\\\\n min-width: 1.5em;\\\\n overflow: hidden;\\\\n padding: 0.25em;\\\\n right: 0;\\\\n text-overflow: ellipsis;\\\\n top: 0;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: top right;\\\\n transform-origin: top right;\\\\n}\\\\n\\\\n.fa-layers-bottom-right {\\\\n bottom: 0;\\\\n right: 0;\\\\n top: auto;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: bottom right;\\\\n transform-origin: bottom right;\\\\n}\\\\n\\\\n.fa-layers-bottom-left {\\\\n bottom: 0;\\\\n left: 0;\\\\n right: auto;\\\\n top: auto;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: bottom left;\\\\n transform-origin: bottom left;\\\\n}\\\\n\\\\n.fa-layers-top-right {\\\\n right: 0;\\\\n top: 0;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: top right;\\\\n transform-origin: top right;\\\\n}\\\\n\\\\n.fa-layers-top-left {\\\\n left: 0;\\\\n right: auto;\\\\n top: 0;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: top left;\\\\n transform-origin: top left;\\\\n}\\\\n\\\\n.fa-lg {\\\\n font-size: 1.3333333333em;\\\\n line-height: 0.75em;\\\\n vertical-align: -0.0667em;\\\\n}\\\\n\\\\n.fa-xs {\\\\n font-size: 0.75em;\\\\n}\\\\n\\\\n.fa-sm {\\\\n font-size: 0.875em;\\\\n}\\\\n\\\\n.fa-1x {\\\\n font-size: 1em;\\\\n}\\\\n\\\\n.fa-2x {\\\\n font-size: 2em;\\\\n}\\\\n\\\\n.fa-3x {\\\\n font-size: 3em;\\\\n}\\\\n\\\\n.fa-4x {\\\\n font-size: 4em;\\\\n}\\\\n\\\\n.fa-5x {\\\\n font-size: 5em;\\\\n}\\\\n\\\\n.fa-6x {\\\\n font-size: 6em;\\\\n}\\\\n\\\\n.fa-7x {\\\\n font-size: 7em;\\\\n}\\\\n\\\\n.fa-8x {\\\\n font-size: 8em;\\\\n}\\\\n\\\\n.fa-9x {\\\\n font-size: 9em;\\\\n}\\\\n\\\\n.fa-10x {\\\\n font-size: 10em;\\\\n}\\\\n\\\\n.fa-fw {\\\\n text-align: center;\\\\n width: 1.25em;\\\\n}\\\\n\\\\n.fa-ul {\\\\n list-style-type: none;\\\\n margin-left: 2.5em;\\\\n padding-left: 0;\\\\n}\\\\n.fa-ul > li {\\\\n position: relative;\\\\n}\\\\n\\\\n.fa-li {\\\\n left: -2em;\\\\n position: absolute;\\\\n text-align: center;\\\\n width: 2em;\\\\n line-height: inherit;\\\\n}\\\\n\\\\n.fa-border {\\\\n border: solid 0.08em #eee;\\\\n border-radius: 0.1em;\\\\n padding: 0.2em 0.25em 0.15em;\\\\n}\\\\n\\\\n.fa-pull-left {\\\\n float: left;\\\\n}\\\\n\\\\n.fa-pull-right {\\\\n float: right;\\\\n}\\\\n\\\\n.fa.fa-pull-left,\\\\n.fas.fa-pull-left,\\\\n.far.fa-pull-left,\\\\n.fal.fa-pull-left,\\\\n.fab.fa-pull-left {\\\\n margin-right: 0.3em;\\\\n}\\\\n.fa.fa-pull-right,\\\\n.fas.fa-pull-right,\\\\n.far.fa-pull-right,\\\\n.fal.fa-pull-right,\\\\n.fab.fa-pull-right {\\\\n margin-left: 0.3em;\\\\n}\\\\n\\\\n.fa-spin {\\\\n -webkit-animation: fa-spin 2s infinite linear;\\\\n animation: fa-spin 2s infinite linear;\\\\n}\\\\n\\\\n.fa-pulse {\\\\n -webkit-animation: fa-spin 1s infinite steps(8);\\\\n animation: fa-spin 1s infinite steps(8);\\\\n}\\\\n\\\\n@-webkit-keyframes fa-spin {\\\\n 0% {\\\\n -webkit-transform: rotate(0deg);\\\\n transform: rotate(0deg);\\\\n }\\\\n 100% {\\\\n -webkit-transform: rotate(360deg);\\\\n transform: rotate(360deg);\\\\n }\\\\n}\\\\n\\\\n@keyframes fa-spin {\\\\n 0% {\\\\n -webkit-transform: rotate(0deg);\\\\n transform: rotate(0deg);\\\\n }\\\\n 100% {\\\\n -webkit-transform: rotate(360deg);\\\\n transform: rotate(360deg);\\\\n }\\\\n}\\\\n.fa-rotate-90 {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\\\\\\\";\\\\n -webkit-transform: rotate(90deg);\\\\n transform: rotate(90deg);\\\\n}\\\\n\\\\n.fa-rotate-180 {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\\\\\\\";\\\\n -webkit-transform: rotate(180deg);\\\\n transform: rotate(180deg);\\\\n}\\\\n\\\\n.fa-rotate-270 {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\\\\\\\";\\\\n -webkit-transform: rotate(270deg);\\\\n transform: rotate(270deg);\\\\n}\\\\n\\\\n.fa-flip-horizontal {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\\\\\\\";\\\\n -webkit-transform: scale(-1, 1);\\\\n transform: scale(-1, 1);\\\\n}\\\\n\\\\n.fa-flip-vertical {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\\\\\";\\\\n -webkit-transform: scale(1, -1);\\\\n transform: scale(1, -1);\\\\n}\\\\n\\\\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\\\\\";\\\\n -webkit-transform: scale(-1, -1);\\\\n transform: scale(-1, -1);\\\\n}\\\\n\\\\n:root .fa-rotate-90,\\\\n:root .fa-rotate-180,\\\\n:root .fa-rotate-270,\\\\n:root .fa-flip-horizontal,\\\\n:root .fa-flip-vertical,\\\\n:root .fa-flip-both {\\\\n -webkit-filter: none;\\\\n filter: none;\\\\n}\\\\n\\\\n.fa-stack {\\\\n display: inline-block;\\\\n height: 2em;\\\\n position: relative;\\\\n width: 2.5em;\\\\n}\\\\n\\\\n.fa-stack-1x,\\\\n.fa-stack-2x {\\\\n bottom: 0;\\\\n left: 0;\\\\n margin: auto;\\\\n position: absolute;\\\\n right: 0;\\\\n top: 0;\\\\n}\\\\n\\\\n.svg-inline--fa.fa-stack-1x {\\\\n height: 1em;\\\\n width: 1.25em;\\\\n}\\\\n.svg-inline--fa.fa-stack-2x {\\\\n height: 2em;\\\\n width: 2.5em;\\\\n}\\\\n\\\\n.fa-inverse {\\\\n color: #fff;\\\\n}\\\\n\\\\n.sr-only {\\\\n border: 0;\\\\n clip: rect(0, 0, 0, 0);\\\\n height: 1px;\\\\n margin: -1px;\\\\n overflow: hidden;\\\\n padding: 0;\\\\n position: absolute;\\\\n width: 1px;\\\\n}\\\\n\\\\n.sr-only-focusable:active, .sr-only-focusable:focus {\\\\n clip: auto;\\\\n height: auto;\\\\n margin: 0;\\\\n overflow: visible;\\\\n position: static;\\\\n width: auto;\\\\n}\\\";\\n\\nfunction css () {\\n var dfp = DEFAULT_FAMILY_PREFIX;\\n var drc = DEFAULT_REPLACEMENT_CLASS;\\n var fp = config.familyPrefix;\\n var rc = config.replacementClass;\\n var s = baseStyles;\\n\\n if (fp !== dfp || rc !== drc) {\\n var dPatt = new RegExp(\\\"\\\\\\\\.\\\".concat(dfp, \\\"\\\\\\\\-\\\"), 'g');\\n var rPatt = new RegExp(\\\"\\\\\\\\.\\\".concat(drc), 'g');\\n s = s.replace(dPatt, \\\".\\\".concat(fp, \\\"-\\\")).replace(rPatt, \\\".\\\".concat(rc));\\n }\\n\\n return s;\\n}\\n\\nvar Library =\\n/*#__PURE__*/\\nfunction () {\\n function Library() {\\n _classCallCheck(this, Library);\\n\\n this.definitions = {};\\n }\\n\\n _createClass(Library, [{\\n key: \\\"add\\\",\\n value: function add() {\\n var _this = this;\\n\\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\\n definitions[_key] = arguments[_key];\\n }\\n\\n var additions = definitions.reduce(this._pullDefinitions, {});\\n Object.keys(additions).forEach(function (key) {\\n _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]);\\n defineIcons(key, additions[key]);\\n build();\\n });\\n }\\n }, {\\n key: \\\"reset\\\",\\n value: function reset() {\\n this.definitions = {};\\n }\\n }, {\\n key: \\\"_pullDefinitions\\\",\\n value: function _pullDefinitions(additions, definition) {\\n var normalized = definition.prefix && definition.iconName && definition.icon ? {\\n 0: definition\\n } : definition;\\n Object.keys(normalized).map(function (key) {\\n var _normalized$key = normalized[key],\\n prefix = _normalized$key.prefix,\\n iconName = _normalized$key.iconName,\\n icon = _normalized$key.icon;\\n if (!additions[prefix]) additions[prefix] = {};\\n additions[prefix][iconName] = icon;\\n });\\n return additions;\\n }\\n }]);\\n\\n return Library;\\n}();\\n\\nfunction prepIcon(icon) {\\n var width = icon[0];\\n var height = icon[1];\\n var vectorData = icon.slice(4);\\n return {\\n found: true,\\n width: width,\\n height: height,\\n icon: {\\n tag: 'path',\\n attributes: {\\n fill: 'currentColor',\\n d: vectorData[0]\\n }\\n }\\n };\\n}\\n\\nfunction ensureCss() {\\n if (config.autoAddCss && !_cssInserted) {\\n insertCss(css());\\n\\n _cssInserted = true;\\n }\\n}\\n\\nfunction apiObject(val, abstractCreator) {\\n Object.defineProperty(val, 'abstract', {\\n get: abstractCreator\\n });\\n Object.defineProperty(val, 'html', {\\n get: function get() {\\n return val.abstract.map(function (a) {\\n return toHtml(a);\\n });\\n }\\n });\\n Object.defineProperty(val, 'node', {\\n get: function get() {\\n if (!IS_DOM) return;\\n var container = DOCUMENT.createElement('div');\\n container.innerHTML = val.html;\\n return container.children;\\n }\\n });\\n return val;\\n}\\n\\nfunction findIconDefinition(iconLookup) {\\n var _iconLookup$prefix = iconLookup.prefix,\\n prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,\\n iconName = iconLookup.iconName;\\n if (!iconName) return;\\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\\n}\\n\\nfunction resolveIcons(next) {\\n return function (maybeIconDefinition) {\\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\\n var mask = params.mask;\\n\\n if (mask) {\\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\\n }\\n\\n return next(iconDefinition, _objectSpread({}, params, {\\n mask: mask\\n }));\\n };\\n}\\n\\nvar library = new Library();\\nvar noAuto = function noAuto() {\\n config.autoReplaceSvg = false;\\n config.observeMutations = false;\\n disconnect();\\n};\\nvar _cssInserted = false;\\nvar dom = {\\n i2svg: function i2svg() {\\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\\n\\n if (IS_DOM) {\\n ensureCss();\\n var _params$node = params.node,\\n node = _params$node === void 0 ? DOCUMENT : _params$node,\\n _params$callback = params.callback,\\n callback = _params$callback === void 0 ? function () {} : _params$callback;\\n\\n if (config.searchPseudoElements) {\\n searchPseudoElements(node);\\n }\\n\\n return onTree(node, callback);\\n } else {\\n return picked.reject('Operation requires a DOM of some kind.');\\n }\\n },\\n css: css,\\n insertCss: function insertCss$$1() {\\n if (!_cssInserted) {\\n insertCss(css());\\n\\n _cssInserted = true;\\n }\\n },\\n watch: function watch() {\\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\\n var autoReplaceSvgRoot = params.autoReplaceSvgRoot,\\n observeMutationsRoot = params.observeMutationsRoot;\\n\\n if (config.autoReplaceSvg === false) {\\n config.autoReplaceSvg = true;\\n }\\n\\n config.observeMutations = true;\\n domready(function () {\\n autoReplace({\\n autoReplaceSvgRoot: autoReplaceSvgRoot\\n });\\n observe({\\n treeCallback: onTree,\\n nodeCallback: onNode,\\n pseudoElementsCallback: searchPseudoElements,\\n observeMutationsRoot: observeMutationsRoot\\n });\\n });\\n }\\n};\\nvar parse = {\\n transform: function transform(transformString) {\\n return parseTransformString(transformString);\\n }\\n};\\nvar icon = resolveIcons(function (iconDefinition) {\\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var _params$transform = params.transform,\\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\\n _params$symbol = params.symbol,\\n symbol = _params$symbol === void 0 ? false : _params$symbol,\\n _params$mask = params.mask,\\n mask = _params$mask === void 0 ? null : _params$mask,\\n _params$title = params.title,\\n title = _params$title === void 0 ? null : _params$title,\\n _params$classes = params.classes,\\n classes = _params$classes === void 0 ? [] : _params$classes,\\n _params$attributes = params.attributes,\\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\\n _params$styles = params.styles,\\n styles = _params$styles === void 0 ? {} : _params$styles;\\n if (!iconDefinition) return;\\n var prefix = iconDefinition.prefix,\\n iconName = iconDefinition.iconName,\\n icon = iconDefinition.icon;\\n return apiObject(_objectSpread({\\n type: 'icon'\\n }, iconDefinition), function () {\\n ensureCss();\\n\\n if (config.autoA11y) {\\n if (title) {\\n attributes['aria-labelledby'] = \\\"\\\".concat(config.replacementClass, \\\"-title-\\\").concat(nextUniqueId());\\n } else {\\n attributes['aria-hidden'] = 'true';\\n attributes['focusable'] = 'false';\\n }\\n }\\n\\n return makeInlineSvgAbstract({\\n icons: {\\n main: prepIcon(icon),\\n mask: mask ? prepIcon(mask.icon) : {\\n found: false,\\n width: null,\\n height: null,\\n icon: {}\\n }\\n },\\n prefix: prefix,\\n iconName: iconName,\\n transform: _objectSpread({}, meaninglessTransform, transform),\\n symbol: symbol,\\n title: title,\\n extra: {\\n attributes: attributes,\\n styles: styles,\\n classes: classes\\n }\\n });\\n });\\n});\\nvar text = function text(content) {\\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var _params$transform2 = params.transform,\\n transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2,\\n _params$title2 = params.title,\\n title = _params$title2 === void 0 ? null : _params$title2,\\n _params$classes2 = params.classes,\\n classes = _params$classes2 === void 0 ? [] : _params$classes2,\\n _params$attributes2 = params.attributes,\\n attributes = _params$attributes2 === void 0 ? {} : _params$attributes2,\\n _params$styles2 = params.styles,\\n styles = _params$styles2 === void 0 ? {} : _params$styles2;\\n return apiObject({\\n type: 'text',\\n content: content\\n }, function () {\\n ensureCss();\\n return makeLayersTextAbstract({\\n content: content,\\n transform: _objectSpread({}, meaninglessTransform, transform),\\n title: title,\\n extra: {\\n attributes: attributes,\\n styles: styles,\\n classes: [\\\"\\\".concat(config.familyPrefix, \\\"-layers-text\\\")].concat(_toConsumableArray(classes))\\n }\\n });\\n });\\n};\\nvar counter = function counter(content) {\\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var _params$title3 = params.title,\\n title = _params$title3 === void 0 ? null : _params$title3,\\n _params$classes3 = params.classes,\\n classes = _params$classes3 === void 0 ? [] : _params$classes3,\\n _params$attributes3 = params.attributes,\\n attributes = _params$attributes3 === void 0 ? {} : _params$attributes3,\\n _params$styles3 = params.styles,\\n styles = _params$styles3 === void 0 ? {} : _params$styles3;\\n return apiObject({\\n type: 'counter',\\n content: content\\n }, function () {\\n ensureCss();\\n return makeLayersCounterAbstract({\\n content: content.toString(),\\n title: title,\\n extra: {\\n attributes: attributes,\\n styles: styles,\\n classes: [\\\"\\\".concat(config.familyPrefix, \\\"-layers-counter\\\")].concat(_toConsumableArray(classes))\\n }\\n });\\n });\\n};\\nvar layer = function layer(assembler) {\\n return apiObject({\\n type: 'layer'\\n }, function () {\\n ensureCss();\\n var children = [];\\n assembler(function (args) {\\n Array.isArray(args) ? args.map(function (a) {\\n children = children.concat(a.abstract);\\n }) : children = children.concat(args.abstract);\\n });\\n return [{\\n tag: 'span',\\n attributes: {\\n class: \\\"\\\".concat(config.familyPrefix, \\\"-layers\\\")\\n },\\n children: children\\n }];\\n });\\n};\\nvar api = {\\n noAuto: noAuto,\\n config: config,\\n dom: dom,\\n library: library,\\n parse: parse,\\n findIconDefinition: findIconDefinition,\\n icon: icon,\\n text: text,\\n counter: counter,\\n layer: layer,\\n toHtml: toHtml\\n};\\n\\nvar autoReplace = function autoReplace() {\\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\\n var _params$autoReplaceSv = params.autoReplaceSvgRoot,\\n autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\\n node: autoReplaceSvgRoot\\n });\\n};\\n\\n\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\"), __webpack_require__(/*! ./../../timers-browserify/main.js */ \\\"./node_modules/timers-browserify/main.js\\\").setImmediate))\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/fontawesome-svg-core/index.es.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-brands-svg-icons/faGithub.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-brands-svg-icons/faGithub.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fab';\\nvar iconName = 'github';\\nvar width = 496;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f09b';\\nvar svgPathData = 'M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faGithub = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-brands-svg-icons/faGithub.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-brands-svg-icons/faTwitter.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-brands-svg-icons/faTwitter.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fab';\\nvar iconName = 'twitter';\\nvar width = 512;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f099';\\nvar svgPathData = 'M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faTwitter = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-brands-svg-icons/faTwitter.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-regular-svg-icons/faClone.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-regular-svg-icons/faClone.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'far';\\nvar iconName = 'clone';\\nvar width = 512;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f24d';\\nvar svgPathData = 'M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faClone = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-regular-svg-icons/faClone.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-solid-svg-icons/faArrowRight.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-solid-svg-icons/faArrowRight.js ***!\n \\************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fas';\\nvar iconName = 'arrow-right';\\nvar width = 448;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f061';\\nvar svgPathData = 'M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faArrowRight = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-solid-svg-icons/faArrowRight.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fas';\\nvar iconName = 'check';\\nvar width = 512;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f00c';\\nvar svgPathData = 'M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faCheck = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-solid-svg-icons/faGlobeAmericas.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-solid-svg-icons/faGlobeAmericas.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fas';\\nvar iconName = 'globe-americas';\\nvar width = 496;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f57d';\\nvar svgPathData = 'M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faGlobeAmericas = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-solid-svg-icons/faGlobeAmericas.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/react-fontawesome/index.es.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@fortawesome/react-fontawesome/index.es.js ***!\n \\*****************************************************************/\n/*! exports provided: FontAwesomeIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"FontAwesomeIcon\\\", function() { return FontAwesomeIcon; });\\n/* harmony import */ var _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @fortawesome/fontawesome-svg-core */ \\\"./node_modules/@fortawesome/fontawesome-svg-core/index.es.js\\\");\\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \\\"./node_modules/prop-types/index.js\\\");\\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \\\"./node_modules/react/index.js\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\\n\\n\\n\\n\\nfunction _typeof(obj) {\\n if (typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\") {\\n _typeof = function (obj) {\\n return typeof obj;\\n };\\n } else {\\n _typeof = function (obj) {\\n return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj;\\n };\\n }\\n\\n return _typeof(obj);\\n}\\n\\nfunction _defineProperty(obj, key, value) {\\n if (key in obj) {\\n Object.defineProperty(obj, key, {\\n value: value,\\n enumerable: true,\\n configurable: true,\\n writable: true\\n });\\n } else {\\n obj[key] = value;\\n }\\n\\n return obj;\\n}\\n\\nfunction _objectSpread(target) {\\n for (var i = 1; i < arguments.length; i++) {\\n var source = arguments[i] != null ? arguments[i] : {};\\n var ownKeys = Object.keys(source);\\n\\n if (typeof Object.getOwnPropertySymbols === 'function') {\\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\\n }));\\n }\\n\\n ownKeys.forEach(function (key) {\\n _defineProperty(target, key, source[key]);\\n });\\n }\\n\\n return target;\\n}\\n\\nfunction _objectWithoutPropertiesLoose(source, excluded) {\\n if (source == null) return {};\\n var target = {};\\n var sourceKeys = Object.keys(source);\\n var key, i;\\n\\n for (i = 0; i < sourceKeys.length; i++) {\\n key = sourceKeys[i];\\n if (excluded.indexOf(key) >= 0) continue;\\n target[key] = source[key];\\n }\\n\\n return target;\\n}\\n\\nfunction _objectWithoutProperties(source, excluded) {\\n if (source == null) return {};\\n\\n var target = _objectWithoutPropertiesLoose(source, excluded);\\n\\n var key, i;\\n\\n if (Object.getOwnPropertySymbols) {\\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\\n\\n for (i = 0; i < sourceSymbolKeys.length; i++) {\\n key = sourceSymbolKeys[i];\\n if (excluded.indexOf(key) >= 0) continue;\\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\\n target[key] = source[key];\\n }\\n }\\n\\n return target;\\n}\\n\\nfunction _toConsumableArray(arr) {\\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\\n}\\n\\nfunction _arrayWithoutHoles(arr) {\\n if (Array.isArray(arr)) {\\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\\n\\n return arr2;\\n }\\n}\\n\\nfunction _iterableToArray(iter) {\\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \\\"[object Arguments]\\\") return Array.from(iter);\\n}\\n\\nfunction _nonIterableSpread() {\\n throw new TypeError(\\\"Invalid attempt to spread non-iterable instance\\\");\\n}\\n\\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\\n\\nfunction createCommonjsModule(fn, module) {\\n\\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\\n}\\n\\nvar humps = createCommonjsModule(function (module) {\\n(function(global) {\\n\\n var _processKeys = function(convert, obj, options) {\\n if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) {\\n return obj;\\n }\\n\\n var output,\\n i = 0,\\n l = 0;\\n\\n if(_isArray(obj)) {\\n output = [];\\n for(l=obj.length; i<l; i++) {\\n output.push(_processKeys(convert, obj[i], options));\\n }\\n }\\n else {\\n output = {};\\n for(var key in obj) {\\n if(Object.prototype.hasOwnProperty.call(obj, key)) {\\n output[convert(key, options)] = _processKeys(convert, obj[key], options);\\n }\\n }\\n }\\n return output;\\n };\\n\\n // String conversion methods\\n\\n var separateWords = function(string, options) {\\n options = options || {};\\n var separator = options.separator || '_';\\n var split = options.split || /(?=[A-Z])/;\\n\\n return string.split(split).join(separator);\\n };\\n\\n var camelize = function(string) {\\n if (_isNumerical(string)) {\\n return string;\\n }\\n string = string.replace(/[\\\\-_\\\\s]+(.)?/g, function(match, chr) {\\n return chr ? chr.toUpperCase() : '';\\n });\\n // Ensure 1st char is always lowercase\\n return string.substr(0, 1).toLowerCase() + string.substr(1);\\n };\\n\\n var pascalize = function(string) {\\n var camelized = camelize(string);\\n // Ensure 1st char is always uppercase\\n return camelized.substr(0, 1).toUpperCase() + camelized.substr(1);\\n };\\n\\n var decamelize = function(string, options) {\\n return separateWords(string, options).toLowerCase();\\n };\\n\\n // Utilities\\n // Taken from Underscore.js\\n\\n var toString = Object.prototype.toString;\\n\\n var _isFunction = function(obj) {\\n return typeof(obj) === 'function';\\n };\\n var _isObject = function(obj) {\\n return obj === Object(obj);\\n };\\n var _isArray = function(obj) {\\n return toString.call(obj) == '[object Array]';\\n };\\n var _isDate = function(obj) {\\n return toString.call(obj) == '[object Date]';\\n };\\n var _isRegExp = function(obj) {\\n return toString.call(obj) == '[object RegExp]';\\n };\\n var _isBoolean = function(obj) {\\n return toString.call(obj) == '[object Boolean]';\\n };\\n\\n // Performant way to determine if obj coerces to a number\\n var _isNumerical = function(obj) {\\n obj = obj - 0;\\n return obj === obj;\\n };\\n\\n // Sets up function which handles processing keys\\n // allowing the convert function to be modified by a callback\\n var _processor = function(convert, options) {\\n var callback = options && 'process' in options ? options.process : options;\\n\\n if(typeof(callback) !== 'function') {\\n return convert;\\n }\\n\\n return function(string, options) {\\n return callback(string, convert, options);\\n }\\n };\\n\\n var humps = {\\n camelize: camelize,\\n decamelize: decamelize,\\n pascalize: pascalize,\\n depascalize: decamelize,\\n camelizeKeys: function(object, options) {\\n return _processKeys(_processor(camelize, options), object);\\n },\\n decamelizeKeys: function(object, options) {\\n return _processKeys(_processor(decamelize, options), object, options);\\n },\\n pascalizeKeys: function(object, options) {\\n return _processKeys(_processor(pascalize, options), object);\\n },\\n depascalizeKeys: function () {\\n return this.decamelizeKeys.apply(this, arguments);\\n }\\n };\\n\\n if (module.exports) {\\n module.exports = humps;\\n } else {\\n global.humps = humps;\\n }\\n\\n})(commonjsGlobal);\\n});\\n\\nfunction capitalize(val) {\\n return val.charAt(0).toUpperCase() + val.slice(1);\\n}\\n\\nfunction styleToObject(style) {\\n return style.split(';').map(function (s) {\\n return s.trim();\\n }).filter(function (s) {\\n return s;\\n }).reduce(function (acc, pair) {\\n var i = pair.indexOf(':');\\n var prop = humps.camelize(pair.slice(0, i));\\n var value = pair.slice(i + 1).trim();\\n prop.startsWith('webkit') ? acc[capitalize(prop)] = value : acc[prop] = value;\\n return acc;\\n }, {});\\n}\\n\\nfunction convert(createElement, element) {\\n var extraProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\\n\\n if (typeof element === 'string') {\\n return element;\\n }\\n\\n var children = (element.children || []).map(function (child) {\\n return convert(createElement, child);\\n });\\n var mixins = Object.keys(element.attributes || {}).reduce(function (acc, key) {\\n var val = element.attributes[key];\\n\\n switch (key) {\\n case 'class':\\n acc.attrs['className'] = val;\\n delete element.attributes['class'];\\n break;\\n\\n case 'style':\\n acc.attrs['style'] = styleToObject(val);\\n break;\\n\\n default:\\n if (key.indexOf('aria-') === 0 || key.indexOf('data-') === 0) {\\n acc.attrs[key.toLowerCase()] = val;\\n } else {\\n acc.attrs[humps.camelize(key)] = val;\\n }\\n\\n }\\n\\n return acc;\\n }, {\\n attrs: {}\\n });\\n\\n var _extraProps$style = extraProps.style,\\n existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style,\\n remaining = _objectWithoutProperties(extraProps, [\\\"style\\\"]);\\n\\n mixins.attrs['style'] = _objectSpread({}, mixins.attrs['style'], existingStyle);\\n return createElement.apply(void 0, [element.tag, _objectSpread({}, mixins.attrs, remaining)].concat(_toConsumableArray(children)));\\n}\\n\\nvar PRODUCTION = false;\\n\\ntry {\\n PRODUCTION = \\\"development\\\" === 'production';\\n} catch (e) {}\\n\\nfunction log () {\\n if (!PRODUCTION && console && typeof console.error === 'function') {\\n var _console;\\n\\n (_console = console).error.apply(_console, arguments);\\n }\\n}\\n\\nfunction objectWithKey(key, value) {\\n return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\\n}\\n\\nfunction classList(props) {\\n var _classes;\\n\\n var classes = (_classes = {\\n 'fa-spin': props.spin,\\n 'fa-pulse': props.pulse,\\n 'fa-fw': props.fixedWidth,\\n 'fa-inverse': props.inverse,\\n 'fa-border': props.border,\\n 'fa-li': props.listItem,\\n 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both',\\n 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both'\\n }, _defineProperty(_classes, \\\"fa-\\\".concat(props.size), props.size !== null), _defineProperty(_classes, \\\"fa-rotate-\\\".concat(props.rotation), props.rotation !== null), _defineProperty(_classes, \\\"fa-pull-\\\".concat(props.pull), props.pull !== null), _classes);\\n return Object.keys(classes).map(function (key) {\\n return classes[key] ? key : null;\\n }).filter(function (key) {\\n return key;\\n });\\n}\\n\\nfunction normalizeIconArgs(icon$$1) {\\n if (icon$$1 === null) {\\n return null;\\n }\\n\\n if (_typeof(icon$$1) === 'object' && icon$$1.prefix && icon$$1.iconName) {\\n return icon$$1;\\n }\\n\\n if (Array.isArray(icon$$1) && icon$$1.length === 2) {\\n return {\\n prefix: icon$$1[0],\\n iconName: icon$$1[1]\\n };\\n }\\n\\n if (typeof icon$$1 === 'string') {\\n return {\\n prefix: 'fas',\\n iconName: icon$$1\\n };\\n }\\n}\\n\\nfunction FontAwesomeIcon(props) {\\n var iconArgs = props.icon,\\n maskArgs = props.mask,\\n symbol = props.symbol,\\n className = props.className,\\n title = props.title;\\n var iconLookup = normalizeIconArgs(iconArgs);\\n var classes = objectWithKey('classes', [].concat(_toConsumableArray(classList(props)), _toConsumableArray(className.split(' '))));\\n var transform = objectWithKey('transform', typeof props.transform === 'string' ? _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__[\\\"parse\\\"].transform(props.transform) : props.transform);\\n var mask = objectWithKey('mask', normalizeIconArgs(maskArgs));\\n var renderedIcon = Object(_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__[\\\"icon\\\"])(iconLookup, _objectSpread({}, classes, transform, mask, {\\n symbol: symbol,\\n title: title\\n }));\\n\\n if (!renderedIcon) {\\n log('Could not find icon', iconLookup);\\n return null;\\n }\\n\\n var abstract = renderedIcon.abstract;\\n var extraProps = {};\\n Object.keys(props).forEach(function (key) {\\n if (!FontAwesomeIcon.defaultProps.hasOwnProperty(key)) {\\n extraProps[key] = props[key];\\n }\\n });\\n return convertCurry(abstract[0], extraProps);\\n}\\nFontAwesomeIcon.displayName = 'FontAwesomeIcon';\\nFontAwesomeIcon.propTypes = {\\n border: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\\n mask: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]),\\n fixedWidth: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n inverse: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n flip: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['horizontal', 'vertical', 'both']),\\n icon: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]),\\n listItem: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n pull: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['right', 'left']),\\n pulse: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n rotation: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([90, 180, 270]),\\n size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['lg', 'xs', 'sm', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),\\n spin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n symbol: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]),\\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\\n transform: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object])\\n};\\nFontAwesomeIcon.defaultProps = {\\n border: false,\\n className: '',\\n mask: null,\\n fixedWidth: false,\\n inverse: false,\\n flip: null,\\n icon: null,\\n listItem: false,\\n pull: null,\\n pulse: false,\\n rotation: null,\\n size: null,\\n spin: false,\\n symbol: false,\\n title: '',\\n transform: null\\n};\\nvar convertCurry = convert.bind(null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement);\\n\\n\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/react-fontawesome/index.es.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@stablelib/utf8/lib/utf8.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/@stablelib/utf8/lib/utf8.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n// Copyright (C) 2016 Dmitry Chestnykh\\n// MIT License. See LICENSE file for details.\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar INVALID_UTF16 = \\\"utf8: invalid string\\\";\\nvar INVALID_UTF8 = \\\"utf8: invalid source encoding\\\";\\n/**\\n * Encodes the given string into UTF-8 byte array.\\n * Throws if the source string has invalid UTF-16 encoding.\\n */\\nfunction encode(s) {\\n // Calculate result length and allocate output array.\\n // encodedLength() also validates string and throws errors,\\n // so we don't need repeat validation here.\\n var arr = new Uint8Array(encodedLength(s));\\n var pos = 0;\\n for (var i = 0; i < s.length; i++) {\\n var c = s.charCodeAt(i);\\n if (c < 0x80) {\\n arr[pos++] = c;\\n }\\n else if (c < 0x800) {\\n arr[pos++] = 0xc0 | c >> 6;\\n arr[pos++] = 0x80 | c & 0x3f;\\n }\\n else if (c < 0xd800) {\\n arr[pos++] = 0xe0 | c >> 12;\\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\\n arr[pos++] = 0x80 | c & 0x3f;\\n }\\n else {\\n i++; // get one more character\\n c = (c & 0x3ff) << 10;\\n c |= s.charCodeAt(i) & 0x3ff;\\n c += 0x10000;\\n arr[pos++] = 0xf0 | c >> 18;\\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\\n arr[pos++] = 0x80 | c & 0x3f;\\n }\\n }\\n return arr;\\n}\\nexports.encode = encode;\\n/**\\n * Returns the number of bytes required to encode the given string into UTF-8.\\n * Throws if the source string has invalid UTF-16 encoding.\\n */\\nfunction encodedLength(s) {\\n var result = 0;\\n for (var i = 0; i < s.length; i++) {\\n var c = s.charCodeAt(i);\\n if (c < 0x80) {\\n result += 1;\\n }\\n else if (c < 0x800) {\\n result += 2;\\n }\\n else if (c < 0xd800) {\\n result += 3;\\n }\\n else if (c <= 0xdfff) {\\n if (i >= s.length - 1) {\\n throw new Error(INVALID_UTF16);\\n }\\n i++; // \\\"eat\\\" next character\\n result += 4;\\n }\\n else {\\n throw new Error(INVALID_UTF16);\\n }\\n }\\n return result;\\n}\\nexports.encodedLength = encodedLength;\\n/**\\n * Decodes the given byte array from UTF-8 into a string.\\n * Throws if encoding is invalid.\\n */\\nfunction decode(arr) {\\n var chars = [];\\n for (var i = 0; i < arr.length; i++) {\\n var b = arr[i];\\n if (b & 0x80) {\\n var min = void 0;\\n if (b < 0xe0) {\\n // Need 1 more byte.\\n if (i >= arr.length) {\\n throw new Error(INVALID_UTF8);\\n }\\n var n1 = arr[++i];\\n if ((n1 & 0xc0) !== 0x80) {\\n throw new Error(INVALID_UTF8);\\n }\\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\\n min = 0x80;\\n }\\n else if (b < 0xf0) {\\n // Need 2 more bytes.\\n if (i >= arr.length - 1) {\\n throw new Error(INVALID_UTF8);\\n }\\n var n1 = arr[++i];\\n var n2 = arr[++i];\\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\\n throw new Error(INVALID_UTF8);\\n }\\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\\n min = 0x800;\\n }\\n else if (b < 0xf8) {\\n // Need 3 more bytes.\\n if (i >= arr.length - 2) {\\n throw new Error(INVALID_UTF8);\\n }\\n var n1 = arr[++i];\\n var n2 = arr[++i];\\n var n3 = arr[++i];\\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\\n throw new Error(INVALID_UTF8);\\n }\\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\\n min = 0x10000;\\n }\\n else {\\n throw new Error(INVALID_UTF8);\\n }\\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\\n throw new Error(INVALID_UTF8);\\n }\\n if (b >= 0x10000) {\\n // Surrogate pair.\\n if (b > 0x10ffff) {\\n throw new Error(INVALID_UTF8);\\n }\\n b -= 0x10000;\\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\\n b = 0xdc00 | (b & 0x3ff);\\n }\\n }\\n chars.push(String.fromCharCode(b));\\n }\\n return chars.join(\\\"\\\");\\n}\\nexports.decode = decode;\\n//# sourceMappingURL=utf8.js.map\\n\\n//# sourceURL=webpack:///./node_modules/@stablelib/utf8/lib/utf8.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/aes-js/index.js\":\n/*!**************************************!*\\\n !*** ./node_modules/aes-js/index.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\n(function(root) {\\n\\n function checkInt(value) {\\n return (parseInt(value) === value);\\n }\\n\\n function checkInts(arrayish) {\\n if (!checkInt(arrayish.length)) { return false; }\\n\\n for (var i = 0; i < arrayish.length; i++) {\\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\\n return false;\\n }\\n }\\n\\n return true;\\n }\\n\\n function coerceArray(arg, copy) {\\n\\n // ArrayBuffer view\\n if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {\\n\\n if (copy) {\\n if (arg.slice) {\\n arg = arg.slice();\\n } else {\\n arg = Array.prototype.slice.call(arg);\\n }\\n }\\n\\n return arg;\\n }\\n\\n // It's an array; check it is a valid representation of a byte\\n if (Array.isArray(arg)) {\\n if (!checkInts(arg)) {\\n throw new Error('Array contains invalid value: ' + arg);\\n }\\n\\n return new Uint8Array(arg);\\n }\\n\\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\\n if (checkInt(arg.length) && checkInts(arg)) {\\n return new Uint8Array(arg);\\n }\\n\\n throw new Error('unsupported array-like object');\\n }\\n\\n function createArray(length) {\\n return new Uint8Array(length);\\n }\\n\\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\\n if (sourceStart != null || sourceEnd != null) {\\n if (sourceArray.slice) {\\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\\n } else {\\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\\n }\\n }\\n targetArray.set(sourceArray, targetStart);\\n }\\n\\n\\n\\n var convertUtf8 = (function() {\\n function toBytes(text) {\\n var result = [], i = 0;\\n text = encodeURI(text);\\n while (i < text.length) {\\n var c = text.charCodeAt(i++);\\n\\n // if it is a % sign, encode the following 2 bytes as a hex value\\n if (c === 37) {\\n result.push(parseInt(text.substr(i, 2), 16))\\n i += 2;\\n\\n // otherwise, just the actual byte\\n } else {\\n result.push(c)\\n }\\n }\\n\\n return coerceArray(result);\\n }\\n\\n function fromBytes(bytes) {\\n var result = [], i = 0;\\n\\n while (i < bytes.length) {\\n var c = bytes[i];\\n\\n if (c < 128) {\\n result.push(String.fromCharCode(c));\\n i++;\\n } else if (c > 191 && c < 224) {\\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\\n i += 2;\\n } else {\\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\\n i += 3;\\n }\\n }\\n\\n return result.join('');\\n }\\n\\n return {\\n toBytes: toBytes,\\n fromBytes: fromBytes,\\n }\\n })();\\n\\n var convertHex = (function() {\\n function toBytes(text) {\\n var result = [];\\n for (var i = 0; i < text.length; i += 2) {\\n result.push(parseInt(text.substr(i, 2), 16));\\n }\\n\\n return result;\\n }\\n\\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\\n var Hex = '0123456789abcdef';\\n\\n function fromBytes(bytes) {\\n var result = [];\\n for (var i = 0; i < bytes.length; i++) {\\n var v = bytes[i];\\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\\n }\\n return result.join('');\\n }\\n\\n return {\\n toBytes: toBytes,\\n fromBytes: fromBytes,\\n }\\n })();\\n\\n\\n // Number of rounds by keysize\\n var numberOfRounds = {16: 10, 24: 12, 32: 14}\\n\\n // Round constant words\\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\\n\\n // S-box and Inverse S-box (S is for Substitution)\\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\\n var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\\n\\n // Transformations for encryption\\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\\n\\n // Transformations for decryption\\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\\n\\n // Transformations for decryption key expansion\\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\\n\\n function convertToInt32(bytes) {\\n var result = [];\\n for (var i = 0; i < bytes.length; i += 4) {\\n result.push(\\n (bytes[i ] << 24) |\\n (bytes[i + 1] << 16) |\\n (bytes[i + 2] << 8) |\\n bytes[i + 3]\\n );\\n }\\n return result;\\n }\\n\\n var AES = function(key) {\\n if (!(this instanceof AES)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n Object.defineProperty(this, 'key', {\\n value: coerceArray(key, true)\\n });\\n\\n this._prepare();\\n }\\n\\n\\n AES.prototype._prepare = function() {\\n\\n var rounds = numberOfRounds[this.key.length];\\n if (rounds == null) {\\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\\n }\\n\\n // encryption round keys\\n this._Ke = [];\\n\\n // decryption round keys\\n this._Kd = [];\\n\\n for (var i = 0; i <= rounds; i++) {\\n this._Ke.push([0, 0, 0, 0]);\\n this._Kd.push([0, 0, 0, 0]);\\n }\\n\\n var roundKeyCount = (rounds + 1) * 4;\\n var KC = this.key.length / 4;\\n\\n // convert the key into ints\\n var tk = convertToInt32(this.key);\\n\\n // copy values into round key arrays\\n var index;\\n for (var i = 0; i < KC; i++) {\\n index = i >> 2;\\n this._Ke[index][i % 4] = tk[i];\\n this._Kd[rounds - index][i % 4] = tk[i];\\n }\\n\\n // key expansion (fips-197 section 5.2)\\n var rconpointer = 0;\\n var t = KC, tt;\\n while (t < roundKeyCount) {\\n tt = tk[KC - 1];\\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\\n (S[(tt >> 8) & 0xFF] << 16) ^\\n (S[ tt & 0xFF] << 8) ^\\n S[(tt >> 24) & 0xFF] ^\\n (rcon[rconpointer] << 24));\\n rconpointer += 1;\\n\\n // key expansion (for non-256 bit)\\n if (KC != 8) {\\n for (var i = 1; i < KC; i++) {\\n tk[i] ^= tk[i - 1];\\n }\\n\\n // key expansion for 256-bit keys is \\\"slightly different\\\" (fips-197)\\n } else {\\n for (var i = 1; i < (KC / 2); i++) {\\n tk[i] ^= tk[i - 1];\\n }\\n tt = tk[(KC / 2) - 1];\\n\\n tk[KC / 2] ^= (S[ tt & 0xFF] ^\\n (S[(tt >> 8) & 0xFF] << 8) ^\\n (S[(tt >> 16) & 0xFF] << 16) ^\\n (S[(tt >> 24) & 0xFF] << 24));\\n\\n for (var i = (KC / 2) + 1; i < KC; i++) {\\n tk[i] ^= tk[i - 1];\\n }\\n }\\n\\n // copy values into round key arrays\\n var i = 0, r, c;\\n while (i < KC && t < roundKeyCount) {\\n r = t >> 2;\\n c = t % 4;\\n this._Ke[r][c] = tk[i];\\n this._Kd[rounds - r][c] = tk[i++];\\n t++;\\n }\\n }\\n\\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\\n for (var r = 1; r < rounds; r++) {\\n for (var c = 0; c < 4; c++) {\\n tt = this._Kd[r][c];\\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\\n U2[(tt >> 16) & 0xFF] ^\\n U3[(tt >> 8) & 0xFF] ^\\n U4[ tt & 0xFF]);\\n }\\n }\\n }\\n\\n AES.prototype.encrypt = function(plaintext) {\\n if (plaintext.length != 16) {\\n throw new Error('invalid plaintext size (must be 16 bytes)');\\n }\\n\\n var rounds = this._Ke.length - 1;\\n var a = [0, 0, 0, 0];\\n\\n // convert plaintext to (ints ^ key)\\n var t = convertToInt32(plaintext);\\n for (var i = 0; i < 4; i++) {\\n t[i] ^= this._Ke[0][i];\\n }\\n\\n // apply round transforms\\n for (var r = 1; r < rounds; r++) {\\n for (var i = 0; i < 4; i++) {\\n a[i] = (T1[(t[ i ] >> 24) & 0xff] ^\\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\\n T4[ t[(i + 3) % 4] & 0xff] ^\\n this._Ke[r][i]);\\n }\\n t = a.slice();\\n }\\n\\n // the last round is special\\n var result = createArray(16), tt;\\n for (var i = 0; i < 4; i++) {\\n tt = this._Ke[rounds][i];\\n result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\\n result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff;\\n }\\n\\n return result;\\n }\\n\\n AES.prototype.decrypt = function(ciphertext) {\\n if (ciphertext.length != 16) {\\n throw new Error('invalid ciphertext size (must be 16 bytes)');\\n }\\n\\n var rounds = this._Kd.length - 1;\\n var a = [0, 0, 0, 0];\\n\\n // convert plaintext to (ints ^ key)\\n var t = convertToInt32(ciphertext);\\n for (var i = 0; i < 4; i++) {\\n t[i] ^= this._Kd[0][i];\\n }\\n\\n // apply round transforms\\n for (var r = 1; r < rounds; r++) {\\n for (var i = 0; i < 4; i++) {\\n a[i] = (T5[(t[ i ] >> 24) & 0xff] ^\\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\\n T8[ t[(i + 1) % 4] & 0xff] ^\\n this._Kd[r][i]);\\n }\\n t = a.slice();\\n }\\n\\n // the last round is special\\n var result = createArray(16), tt;\\n for (var i = 0; i < 4; i++) {\\n tt = this._Kd[rounds][i];\\n result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\\n result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff;\\n }\\n\\n return result;\\n }\\n\\n\\n /**\\n * Mode Of Operation - Electonic Codebook (ECB)\\n */\\n var ModeOfOperationECB = function(key) {\\n if (!(this instanceof ModeOfOperationECB)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Electronic Code Block\\\";\\n this.name = \\\"ecb\\\";\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationECB.prototype.encrypt = function(plaintext) {\\n plaintext = coerceArray(plaintext);\\n\\n if ((plaintext.length % 16) !== 0) {\\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\\n }\\n\\n var ciphertext = createArray(plaintext.length);\\n var block = createArray(16);\\n\\n for (var i = 0; i < plaintext.length; i += 16) {\\n copyArray(plaintext, block, 0, i, i + 16);\\n block = this._aes.encrypt(block);\\n copyArray(block, ciphertext, i);\\n }\\n\\n return ciphertext;\\n }\\n\\n ModeOfOperationECB.prototype.decrypt = function(ciphertext) {\\n ciphertext = coerceArray(ciphertext);\\n\\n if ((ciphertext.length % 16) !== 0) {\\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\\n }\\n\\n var plaintext = createArray(ciphertext.length);\\n var block = createArray(16);\\n\\n for (var i = 0; i < ciphertext.length; i += 16) {\\n copyArray(ciphertext, block, 0, i, i + 16);\\n block = this._aes.decrypt(block);\\n copyArray(block, plaintext, i);\\n }\\n\\n return plaintext;\\n }\\n\\n\\n /**\\n * Mode Of Operation - Cipher Block Chaining (CBC)\\n */\\n var ModeOfOperationCBC = function(key, iv) {\\n if (!(this instanceof ModeOfOperationCBC)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Cipher Block Chaining\\\";\\n this.name = \\\"cbc\\\";\\n\\n if (!iv) {\\n iv = createArray(16);\\n\\n } else if (iv.length != 16) {\\n throw new Error('invalid initialation vector size (must be 16 bytes)');\\n }\\n\\n this._lastCipherblock = coerceArray(iv, true);\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationCBC.prototype.encrypt = function(plaintext) {\\n plaintext = coerceArray(plaintext);\\n\\n if ((plaintext.length % 16) !== 0) {\\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\\n }\\n\\n var ciphertext = createArray(plaintext.length);\\n var block = createArray(16);\\n\\n for (var i = 0; i < plaintext.length; i += 16) {\\n copyArray(plaintext, block, 0, i, i + 16);\\n\\n for (var j = 0; j < 16; j++) {\\n block[j] ^= this._lastCipherblock[j];\\n }\\n\\n this._lastCipherblock = this._aes.encrypt(block);\\n copyArray(this._lastCipherblock, ciphertext, i);\\n }\\n\\n return ciphertext;\\n }\\n\\n ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {\\n ciphertext = coerceArray(ciphertext);\\n\\n if ((ciphertext.length % 16) !== 0) {\\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\\n }\\n\\n var plaintext = createArray(ciphertext.length);\\n var block = createArray(16);\\n\\n for (var i = 0; i < ciphertext.length; i += 16) {\\n copyArray(ciphertext, block, 0, i, i + 16);\\n block = this._aes.decrypt(block);\\n\\n for (var j = 0; j < 16; j++) {\\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\\n }\\n\\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\\n }\\n\\n return plaintext;\\n }\\n\\n\\n /**\\n * Mode Of Operation - Cipher Feedback (CFB)\\n */\\n var ModeOfOperationCFB = function(key, iv, segmentSize) {\\n if (!(this instanceof ModeOfOperationCFB)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Cipher Feedback\\\";\\n this.name = \\\"cfb\\\";\\n\\n if (!iv) {\\n iv = createArray(16);\\n\\n } else if (iv.length != 16) {\\n throw new Error('invalid initialation vector size (must be 16 size)');\\n }\\n\\n if (!segmentSize) { segmentSize = 1; }\\n\\n this.segmentSize = segmentSize;\\n\\n this._shiftRegister = coerceArray(iv, true);\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationCFB.prototype.encrypt = function(plaintext) {\\n if ((plaintext.length % this.segmentSize) != 0) {\\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\\n }\\n\\n var encrypted = coerceArray(plaintext, true);\\n\\n var xorSegment;\\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\\n xorSegment = this._aes.encrypt(this._shiftRegister);\\n for (var j = 0; j < this.segmentSize; j++) {\\n encrypted[i + j] ^= xorSegment[j];\\n }\\n\\n // Shift the register\\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\\n }\\n\\n return encrypted;\\n }\\n\\n ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {\\n if ((ciphertext.length % this.segmentSize) != 0) {\\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\\n }\\n\\n var plaintext = coerceArray(ciphertext, true);\\n\\n var xorSegment;\\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\\n xorSegment = this._aes.encrypt(this._shiftRegister);\\n\\n for (var j = 0; j < this.segmentSize; j++) {\\n plaintext[i + j] ^= xorSegment[j];\\n }\\n\\n // Shift the register\\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\\n }\\n\\n return plaintext;\\n }\\n\\n /**\\n * Mode Of Operation - Output Feedback (OFB)\\n */\\n var ModeOfOperationOFB = function(key, iv) {\\n if (!(this instanceof ModeOfOperationOFB)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Output Feedback\\\";\\n this.name = \\\"ofb\\\";\\n\\n if (!iv) {\\n iv = createArray(16);\\n\\n } else if (iv.length != 16) {\\n throw new Error('invalid initialation vector size (must be 16 bytes)');\\n }\\n\\n this._lastPrecipher = coerceArray(iv, true);\\n this._lastPrecipherIndex = 16;\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationOFB.prototype.encrypt = function(plaintext) {\\n var encrypted = coerceArray(plaintext, true);\\n\\n for (var i = 0; i < encrypted.length; i++) {\\n if (this._lastPrecipherIndex === 16) {\\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\\n this._lastPrecipherIndex = 0;\\n }\\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\\n }\\n\\n return encrypted;\\n }\\n\\n // Decryption is symetric\\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\\n\\n\\n /**\\n * Counter object for CTR common mode of operation\\n */\\n var Counter = function(initialValue) {\\n if (!(this instanceof Counter)) {\\n throw Error('Counter must be instanitated with `new`');\\n }\\n\\n // We allow 0, but anything false-ish uses the default 1\\n if (initialValue !== 0 && !initialValue) { initialValue = 1; }\\n\\n if (typeof(initialValue) === 'number') {\\n this._counter = createArray(16);\\n this.setValue(initialValue);\\n\\n } else {\\n this.setBytes(initialValue);\\n }\\n }\\n\\n Counter.prototype.setValue = function(value) {\\n if (typeof(value) !== 'number' || parseInt(value) != value) {\\n throw new Error('invalid counter value (must be an integer)');\\n }\\n\\n for (var index = 15; index >= 0; --index) {\\n this._counter[index] = value % 256;\\n value = value >> 8;\\n }\\n }\\n\\n Counter.prototype.setBytes = function(bytes) {\\n bytes = coerceArray(bytes, true);\\n\\n if (bytes.length != 16) {\\n throw new Error('invalid counter bytes size (must be 16 bytes)');\\n }\\n\\n this._counter = bytes;\\n };\\n\\n Counter.prototype.increment = function() {\\n for (var i = 15; i >= 0; i--) {\\n if (this._counter[i] === 255) {\\n this._counter[i] = 0;\\n } else {\\n this._counter[i]++;\\n break;\\n }\\n }\\n }\\n\\n\\n /**\\n * Mode Of Operation - Counter (CTR)\\n */\\n var ModeOfOperationCTR = function(key, counter) {\\n if (!(this instanceof ModeOfOperationCTR)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Counter\\\";\\n this.name = \\\"ctr\\\";\\n\\n if (!(counter instanceof Counter)) {\\n counter = new Counter(counter)\\n }\\n\\n this._counter = counter;\\n\\n this._remainingCounter = null;\\n this._remainingCounterIndex = 16;\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationCTR.prototype.encrypt = function(plaintext) {\\n var encrypted = coerceArray(plaintext, true);\\n\\n for (var i = 0; i < encrypted.length; i++) {\\n if (this._remainingCounterIndex === 16) {\\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\\n this._remainingCounterIndex = 0;\\n this._counter.increment();\\n }\\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\\n }\\n\\n return encrypted;\\n }\\n\\n // Decryption is symetric\\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\\n\\n\\n ///////////////////////\\n // Padding\\n\\n // See:https://tools.ietf.org/html/rfc2315\\n function pkcs7pad(data) {\\n data = coerceArray(data, true);\\n var padder = 16 - (data.length % 16);\\n var result = createArray(data.length + padder);\\n copyArray(data, result);\\n for (var i = data.length; i < result.length; i++) {\\n result[i] = padder;\\n }\\n return result;\\n }\\n\\n function pkcs7strip(data) {\\n data = coerceArray(data, true);\\n if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }\\n\\n var padder = data[data.length - 1];\\n if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }\\n\\n var length = data.length - padder;\\n for (var i = 0; i < padder; i++) {\\n if (data[length + i] !== padder) {\\n throw new Error('PKCS#7 invalid padding byte');\\n }\\n }\\n\\n var result = createArray(length);\\n copyArray(data, result, 0, 0, length);\\n return result;\\n }\\n\\n ///////////////////////\\n // Exporting\\n\\n\\n // The block cipher\\n var aesjs = {\\n AES: AES,\\n Counter: Counter,\\n\\n ModeOfOperation: {\\n ecb: ModeOfOperationECB,\\n cbc: ModeOfOperationCBC,\\n cfb: ModeOfOperationCFB,\\n ofb: ModeOfOperationOFB,\\n ctr: ModeOfOperationCTR\\n },\\n\\n utils: {\\n hex: convertHex,\\n utf8: convertUtf8\\n },\\n\\n padding: {\\n pkcs7: {\\n pad: pkcs7pad,\\n strip: pkcs7strip\\n }\\n },\\n\\n _arrayTest: {\\n coerceArray: coerceArray,\\n createArray: createArray,\\n copyArray: copyArray,\\n }\\n };\\n\\n\\n // node.js\\n if (true) {\\n module.exports = aesjs\\n\\n // RequireJS/AMD\\n // http://www.requirejs.org/docs/api.html\\n // https://github.com/amdjs/amdjs-api/wiki/AMD\\n } else {}\\n\\n\\n})(this);\\n\\n\\n//# sourceURL=webpack:///./node_modules/aes-js/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/assert/assert.js\":\n/*!***************************************!*\\\n !*** ./node_modules/assert/assert.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(global) {\\n\\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\\n// original notice:\\n\\n/*!\\n * The buffer module from node.js, for the browser.\\n *\\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\\n * @license MIT\\n */\\nfunction compare(a, b) {\\n if (a === b) {\\n return 0;\\n }\\n\\n var x = a.length;\\n var y = b.length;\\n\\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\\n if (a[i] !== b[i]) {\\n x = a[i];\\n y = b[i];\\n break;\\n }\\n }\\n\\n if (x < y) {\\n return -1;\\n }\\n if (y < x) {\\n return 1;\\n }\\n return 0;\\n}\\nfunction isBuffer(b) {\\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\\n return global.Buffer.isBuffer(b);\\n }\\n return !!(b != null && b._isBuffer);\\n}\\n\\n// based on node assert, original notice:\\n\\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\\n//\\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\\n//\\n// Originally from narwhal.js (http://narwhaljs.org)\\n// Copyright (c) 2009 Thomas Robinson <280north.com>\\n//\\n// Permission is hereby granted, free of charge, to any person obtaining a copy\\n// of this software and associated documentation files (the 'Software'), to\\n// deal in the Software without restriction, including without limitation the\\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\\n// sell copies of the Software, and to permit persons to whom the Software is\\n// furnished to do so, subject to the following conditions:\\n//\\n// The above copyright notice and this permission notice shall be included in\\n// all copies or substantial portions of the Software.\\n//\\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\\nvar util = __webpack_require__(/*! util/ */ \\\"./node_modules/util/util.js\\\");\\nvar hasOwn = Object.prototype.hasOwnProperty;\\nvar pSlice = Array.prototype.slice;\\nvar functionsHaveNames = (function () {\\n return function foo() {}.name === 'foo';\\n}());\\nfunction pToString (obj) {\\n return Object.prototype.toString.call(obj);\\n}\\nfunction isView(arrbuf) {\\n if (isBuffer(arrbuf)) {\\n return false;\\n }\\n if (typeof global.ArrayBuffer !== 'function') {\\n return false;\\n }\\n if (typeof ArrayBuffer.isView === 'function') {\\n return ArrayBuffer.isView(arrbuf);\\n }\\n if (!arrbuf) {\\n return false;\\n }\\n if (arrbuf instanceof DataView) {\\n return true;\\n }\\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\\n return true;\\n }\\n return false;\\n}\\n// 1. The assert module provides functions that throw\\n// AssertionError's when particular conditions are not met. The\\n// assert module must conform to the following interface.\\n\\nvar assert = module.exports = ok;\\n\\n// 2. The AssertionError is defined in assert.\\n// new assert.AssertionError({ message: message,\\n// actual: actual,\\n// expected: expected })\\n\\nvar regex = /\\\\s*function\\\\s+([^\\\\(\\\\s]*)\\\\s*/;\\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\\nfunction getName(func) {\\n if (!util.isFunction(func)) {\\n return;\\n }\\n if (functionsHaveNames) {\\n return func.name;\\n }\\n var str = func.toString();\\n var match = str.match(regex);\\n return match && match[1];\\n}\\nassert.AssertionError = function AssertionError(options) {\\n this.name = 'AssertionError';\\n this.actual = options.actual;\\n this.expected = options.expected;\\n this.operator = options.operator;\\n if (options.message) {\\n this.message = options.message;\\n this.generatedMessage = false;\\n } else {\\n this.message = getMessage(this);\\n this.generatedMessage = true;\\n }\\n var stackStartFunction = options.stackStartFunction || fail;\\n if (Error.captureStackTrace) {\\n Error.captureStackTrace(this, stackStartFunction);\\n } else {\\n // non v8 browsers so we can have a stacktrace\\n var err = new Error();\\n if (err.stack) {\\n var out = err.stack;\\n\\n // try to strip useless frames\\n var fn_name = getName(stackStartFunction);\\n var idx = out.indexOf('\\\\n' + fn_name);\\n if (idx >= 0) {\\n // once we have located the function frame\\n // we need to strip out everything before it (and its line)\\n var next_line = out.indexOf('\\\\n', idx + 1);\\n out = out.substring(next_line + 1);\\n }\\n\\n this.stack = out;\\n }\\n }\\n};\\n\\n// assert.AssertionError instanceof Error\\nutil.inherits(assert.AssertionError, Error);\\n\\nfunction truncate(s, n) {\\n if (typeof s === 'string') {\\n return s.length < n ? s : s.slice(0, n);\\n } else {\\n return s;\\n }\\n}\\nfunction inspect(something) {\\n if (functionsHaveNames || !util.isFunction(something)) {\\n return util.inspect(something);\\n }\\n var rawname = getName(something);\\n var name = rawname ? ': ' + rawname : '';\\n return '[Function' + name + ']';\\n}\\nfunction getMessage(self) {\\n return truncate(inspect(self.actual), 128) + ' ' +\\n self.operator + ' ' +\\n truncate(inspect(self.expected), 128);\\n}\\n\\n// At present only the three keys mentioned above are used and\\n// understood by the spec. Implementations or sub modules can pass\\n// other keys to the AssertionError's constructor - they will be\\n// ignored.\\n\\n// 3. All of the following functions must throw an AssertionError\\n// when a corresponding condition is not met, with a message that\\n// may be undefined if not provided. All assertion methods provide\\n// both the actual and expected values to the assertion error for\\n// display purposes.\\n\\nfunction fail(actual, expected, message, operator, stackStartFunction) {\\n throw new assert.AssertionError({\\n message: message,\\n actual: actual,\\n expected: expected,\\n operator: operator,\\n stackStartFunction: stackStartFunction\\n });\\n}\\n\\n// EXTENSION! allows for well behaved errors defined elsewhere.\\nassert.fail = fail;\\n\\n// 4. Pure assertion tests whether a value is truthy, as determined\\n// by !!guard.\\n// assert.ok(guard, message_opt);\\n// This statement is equivalent to assert.equal(true, !!guard,\\n// message_opt);. To test strictly for the value true, use\\n// assert.strictEqual(true, guard, message_opt);.\\n\\nfunction ok(value, message) {\\n if (!value) fail(value, true, message, '==', assert.ok);\\n}\\nassert.ok = ok;\\n\\n// 5. The equality assertion tests shallow, coercive equality with\\n// ==.\\n// assert.equal(actual, expected, message_opt);\\n\\nassert.equal = function equal(actual, expected, message) {\\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\\n};\\n\\n// 6. The non-equality assertion tests for whether two objects are not equal\\n// with != assert.notEqual(actual, expected, message_opt);\\n\\nassert.notEqual = function notEqual(actual, expected, message) {\\n if (actual == expected) {\\n fail(actual, expected, message, '!=', assert.notEqual);\\n }\\n};\\n\\n// 7. The equivalence assertion tests a deep equality relation.\\n// assert.deepEqual(actual, expected, message_opt);\\n\\nassert.deepEqual = function deepEqual(actual, expected, message) {\\n if (!_deepEqual(actual, expected, false)) {\\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\\n }\\n};\\n\\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\\n if (!_deepEqual(actual, expected, true)) {\\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\\n }\\n};\\n\\nfunction _deepEqual(actual, expected, strict, memos) {\\n // 7.1. All identical values are equivalent, as determined by ===.\\n if (actual === expected) {\\n return true;\\n } else if (isBuffer(actual) && isBuffer(expected)) {\\n return compare(actual, expected) === 0;\\n\\n // 7.2. If the expected value is a Date object, the actual value is\\n // equivalent if it is also a Date object that refers to the same time.\\n } else if (util.isDate(actual) && util.isDate(expected)) {\\n return actual.getTime() === expected.getTime();\\n\\n // 7.3 If the expected value is a RegExp object, the actual value is\\n // equivalent if it is also a RegExp object with the same source and\\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\\n return actual.source === expected.source &&\\n actual.global === expected.global &&\\n actual.multiline === expected.multiline &&\\n actual.lastIndex === expected.lastIndex &&\\n actual.ignoreCase === expected.ignoreCase;\\n\\n // 7.4. Other pairs that do not both pass typeof value == 'object',\\n // equivalence is determined by ==.\\n } else if ((actual === null || typeof actual !== 'object') &&\\n (expected === null || typeof expected !== 'object')) {\\n return strict ? actual === expected : actual == expected;\\n\\n // If both values are instances of typed arrays, wrap their underlying\\n // ArrayBuffers in a Buffer each to increase performance\\n // This optimization requires the arrays to have the same type as checked by\\n // Object.prototype.toString (aka pToString). Never perform binary\\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\\n // bit patterns are not identical.\\n } else if (isView(actual) && isView(expected) &&\\n pToString(actual) === pToString(expected) &&\\n !(actual instanceof Float32Array ||\\n actual instanceof Float64Array)) {\\n return compare(new Uint8Array(actual.buffer),\\n new Uint8Array(expected.buffer)) === 0;\\n\\n // 7.5 For all other Object pairs, including Array objects, equivalence is\\n // determined by having the same number of owned properties (as verified\\n // with Object.prototype.hasOwnProperty.call), the same set of keys\\n // (although not necessarily the same order), equivalent values for every\\n // corresponding key, and an identical 'prototype' property. Note: this\\n // accounts for both named and indexed properties on Arrays.\\n } else if (isBuffer(actual) !== isBuffer(expected)) {\\n return false;\\n } else {\\n memos = memos || {actual: [], expected: []};\\n\\n var actualIndex = memos.actual.indexOf(actual);\\n if (actualIndex !== -1) {\\n if (actualIndex === memos.expected.indexOf(expected)) {\\n return true;\\n }\\n }\\n\\n memos.actual.push(actual);\\n memos.expected.push(expected);\\n\\n return objEquiv(actual, expected, strict, memos);\\n }\\n}\\n\\nfunction isArguments(object) {\\n return Object.prototype.toString.call(object) == '[object Arguments]';\\n}\\n\\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\\n if (a === null || a === undefined || b === null || b === undefined)\\n return false;\\n // if one is a primitive, the other must be same\\n if (util.isPrimitive(a) || util.isPrimitive(b))\\n return a === b;\\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\\n return false;\\n var aIsArgs = isArguments(a);\\n var bIsArgs = isArguments(b);\\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\\n return false;\\n if (aIsArgs) {\\n a = pSlice.call(a);\\n b = pSlice.call(b);\\n return _deepEqual(a, b, strict);\\n }\\n var ka = objectKeys(a);\\n var kb = objectKeys(b);\\n var key, i;\\n // having the same number of owned properties (keys incorporates\\n // hasOwnProperty)\\n if (ka.length !== kb.length)\\n return false;\\n //the same set of keys (although not necessarily the same order),\\n ka.sort();\\n kb.sort();\\n //~~~cheap key test\\n for (i = ka.length - 1; i >= 0; i--) {\\n if (ka[i] !== kb[i])\\n return false;\\n }\\n //equivalent values for every corresponding key, and\\n //~~~possibly expensive deep test\\n for (i = ka.length - 1; i >= 0; i--) {\\n key = ka[i];\\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\\n return false;\\n }\\n return true;\\n}\\n\\n// 8. The non-equivalence assertion tests for any deep inequality.\\n// assert.notDeepEqual(actual, expected, message_opt);\\n\\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\\n if (_deepEqual(actual, expected, false)) {\\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\\n }\\n};\\n\\nassert.notDeepStrictEqual = notDeepStrictEqual;\\nfunction notDeepStrictEqual(actual, expected, message) {\\n if (_deepEqual(actual, expected, true)) {\\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\\n }\\n}\\n\\n\\n// 9. The strict equality assertion tests strict equality, as determined by ===.\\n// assert.strictEqual(actual, expected, message_opt);\\n\\nassert.strictEqual = function strictEqual(actual, expected, message) {\\n if (actual !== expected) {\\n fail(actual, expected, message, '===', assert.strictEqual);\\n }\\n};\\n\\n// 10. The strict non-equality assertion tests for strict inequality, as\\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\\n\\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\\n if (actual === expected) {\\n fail(actual, expected, message, '!==', assert.notStrictEqual);\\n }\\n};\\n\\nfunction expectedException(actual, expected) {\\n if (!actual || !expected) {\\n return false;\\n }\\n\\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\\n return expected.test(actual);\\n }\\n\\n try {\\n if (actual instanceof expected) {\\n return true;\\n }\\n } catch (e) {\\n // Ignore. The instanceof check doesn't work for arrow functions.\\n }\\n\\n if (Error.isPrototypeOf(expected)) {\\n return false;\\n }\\n\\n return expected.call({}, actual) === true;\\n}\\n\\nfunction _tryBlock(block) {\\n var error;\\n try {\\n block();\\n } catch (e) {\\n error = e;\\n }\\n return error;\\n}\\n\\nfunction _throws(shouldThrow, block, expected, message) {\\n var actual;\\n\\n if (typeof block !== 'function') {\\n throw new TypeError('\\\"block\\\" argument must be a function');\\n }\\n\\n if (typeof expected === 'string') {\\n message = expected;\\n expected = null;\\n }\\n\\n actual = _tryBlock(block);\\n\\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\\n (message ? ' ' + message : '.');\\n\\n if (shouldThrow && !actual) {\\n fail(actual, expected, 'Missing expected exception' + message);\\n }\\n\\n var userProvidedMessage = typeof message === 'string';\\n var isUnwantedException = !shouldThrow && util.isError(actual);\\n var isUnexpectedException = !shouldThrow && actual && !expected;\\n\\n if ((isUnwantedException &&\\n userProvidedMessage &&\\n expectedException(actual, expected)) ||\\n isUnexpectedException) {\\n fail(actual, expected, 'Got unwanted exception' + message);\\n }\\n\\n if ((shouldThrow && actual && expected &&\\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\\n throw actual;\\n }\\n}\\n\\n// 11. Expected to throw an error:\\n// assert.throws(block, Error_opt, message_opt);\\n\\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\\n _throws(true, block, error, message);\\n};\\n\\n// EXTENSION! This is annoying to write outside this module.\\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\\n _throws(false, block, error, message);\\n};\\n\\nassert.ifError = function(err) { if (err) throw err; };\\n\\nvar objectKeys = Object.keys || function (obj) {\\n var keys = [];\\n for (var key in obj) {\\n if (hasOwn.call(obj, key)) keys.push(key);\\n }\\n return keys;\\n};\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/assert/assert.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base-x/index.js\":\n/*!**************************************!*\\\n !*** ./node_modules/base-x/index.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"// base-x encoding\\n// Forked from https://github.com/cryptocoinjs/bs58\\n// Originally written by Mike Hearn for BitcoinJ\\n// Copyright (c) 2011 Google Inc\\n// Ported to JavaScript by Stefan Thomas\\n// Merged Buffer refactorings from base58-native by Stephen Pair\\n// Copyright (c) 2013 BitPay Inc\\n\\nvar Buffer = __webpack_require__(/*! safe-buffer */ \\\"./node_modules/safe-buffer/index.js\\\").Buffer\\n\\nmodule.exports = function base (ALPHABET) {\\n var ALPHABET_MAP = {}\\n var BASE = ALPHABET.length\\n var LEADER = ALPHABET.charAt(0)\\n\\n // pre-compute lookup table\\n for (var z = 0; z < ALPHABET.length; z++) {\\n var x = ALPHABET.charAt(z)\\n\\n if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')\\n ALPHABET_MAP[x] = z\\n }\\n\\n function encode (source) {\\n if (source.length === 0) return ''\\n\\n var digits = [0]\\n for (var i = 0; i < source.length; ++i) {\\n for (var j = 0, carry = source[i]; j < digits.length; ++j) {\\n carry += digits[j] << 8\\n digits[j] = carry % BASE\\n carry = (carry / BASE) | 0\\n }\\n\\n while (carry > 0) {\\n digits.push(carry % BASE)\\n carry = (carry / BASE) | 0\\n }\\n }\\n\\n var string = ''\\n\\n // deal with leading zeros\\n for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER\\n // convert digits to a string\\n for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]\\n\\n return string\\n }\\n\\n function decodeUnsafe (string) {\\n if (typeof string !== 'string') throw new TypeError('Expected String')\\n if (string.length === 0) return Buffer.allocUnsafe(0)\\n\\n var bytes = [0]\\n for (var i = 0; i < string.length; i++) {\\n var value = ALPHABET_MAP[string[i]]\\n if (value === undefined) return\\n\\n for (var j = 0, carry = value; j < bytes.length; ++j) {\\n carry += bytes[j] * BASE\\n bytes[j] = carry & 0xff\\n carry >>= 8\\n }\\n\\n while (carry > 0) {\\n bytes.push(carry & 0xff)\\n carry >>= 8\\n }\\n }\\n\\n // deal with leading zeros\\n for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {\\n bytes.push(0)\\n }\\n\\n return Buffer.from(bytes.reverse())\\n }\\n\\n function decode (string) {\\n var buffer = decodeUnsafe(string)\\n if (buffer) return buffer\\n\\n throw new Error('Non-base' + BASE + ' character')\\n }\\n\\n return {\\n encode: encode,\\n decodeUnsafe: decodeUnsafe,\\n decode: decode\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/base-x/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base64-js/index.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/base64-js/index.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.byteLength = byteLength\\nexports.toByteArray = toByteArray\\nexports.fromByteArray = fromByteArray\\n\\nvar lookup = []\\nvar revLookup = []\\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\\n\\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\\nfor (var i = 0, len = code.length; i < len; ++i) {\\n lookup[i] = code[i]\\n revLookup[code.charCodeAt(i)] = i\\n}\\n\\n// Support decoding URL-safe base64 strings, as Node.js does.\\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\\nrevLookup['-'.charCodeAt(0)] = 62\\nrevLookup['_'.charCodeAt(0)] = 63\\n\\nfunction getLens (b64) {\\n var len = b64.length\\n\\n if (len % 4 > 0) {\\n throw new Error('Invalid string. Length must be a multiple of 4')\\n }\\n\\n // Trim off extra bytes after placeholder bytes are found\\n // See: https://github.com/beatgammit/base64-js/issues/42\\n var validLen = b64.indexOf('=')\\n if (validLen === -1) validLen = len\\n\\n var placeHoldersLen = validLen === len\\n ? 0\\n : 4 - (validLen % 4)\\n\\n return [validLen, placeHoldersLen]\\n}\\n\\n// base64 is 4/3 + up to two characters of the original data\\nfunction byteLength (b64) {\\n var lens = getLens(b64)\\n var validLen = lens[0]\\n var placeHoldersLen = lens[1]\\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\\n}\\n\\nfunction _byteLength (b64, validLen, placeHoldersLen) {\\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\\n}\\n\\nfunction toByteArray (b64) {\\n var tmp\\n var lens = getLens(b64)\\n var validLen = lens[0]\\n var placeHoldersLen = lens[1]\\n\\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\\n\\n var curByte = 0\\n\\n // if there are placeholders, only get up to the last complete 4 chars\\n var len = placeHoldersLen > 0\\n ? validLen - 4\\n : validLen\\n\\n for (var i = 0; i < len; i += 4) {\\n tmp =\\n (revLookup[b64.charCodeAt(i)] << 18) |\\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\\n revLookup[b64.charCodeAt(i + 3)]\\n arr[curByte++] = (tmp >> 16) & 0xFF\\n arr[curByte++] = (tmp >> 8) & 0xFF\\n arr[curByte++] = tmp & 0xFF\\n }\\n\\n if (placeHoldersLen === 2) {\\n tmp =\\n (revLookup[b64.charCodeAt(i)] << 2) |\\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\\n arr[curByte++] = tmp & 0xFF\\n }\\n\\n if (placeHoldersLen === 1) {\\n tmp =\\n (revLookup[b64.charCodeAt(i)] << 10) |\\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\\n arr[curByte++] = (tmp >> 8) & 0xFF\\n arr[curByte++] = tmp & 0xFF\\n }\\n\\n return arr\\n}\\n\\nfunction tripletToBase64 (num) {\\n return lookup[num >> 18 & 0x3F] +\\n lookup[num >> 12 & 0x3F] +\\n lookup[num >> 6 & 0x3F] +\\n lookup[num & 0x3F]\\n}\\n\\nfunction encodeChunk (uint8, start, end) {\\n var tmp\\n var output = []\\n for (var i = start; i < end; i += 3) {\\n tmp =\\n ((uint8[i] << 16) & 0xFF0000) +\\n ((uint8[i + 1] << 8) & 0xFF00) +\\n (uint8[i + 2] & 0xFF)\\n output.push(tripletToBase64(tmp))\\n }\\n return output.join('')\\n}\\n\\nfunction fromByteArray (uint8) {\\n var tmp\\n var len = uint8.length\\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\\n var parts = []\\n var maxChunkLength = 16383 // must be multiple of 3\\n\\n // go through the array every three bytes, we'll deal with trailing stuff later\\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\\n parts.push(encodeChunk(\\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\\n ))\\n }\\n\\n // pad the end with zeros, but make sure to not forget the extra bytes\\n if (extraBytes === 1) {\\n tmp = uint8[len - 1]\\n parts.push(\\n lookup[tmp >> 2] +\\n lookup[(tmp << 4) & 0x3F] +\\n '=='\\n )\\n } else if (extraBytes === 2) {\\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\\n parts.push(\\n lookup[tmp >> 10] +\\n lookup[(tmp >> 4) & 0x3F] +\\n lookup[(tmp << 2) & 0x3F] +\\n '='\\n )\\n }\\n\\n return parts.join('')\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/base64-js/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base64url/dist/base64url.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/base64url/dist/base64url.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar pad_string_1 = __webpack_require__(/*! ./pad-string */ \\\"./node_modules/base64url/dist/pad-string.js\\\");\\nfunction encode(input, encoding) {\\n if (encoding === void 0) { encoding = \\\"utf8\\\"; }\\n if (Buffer.isBuffer(input)) {\\n return fromBase64(input.toString(\\\"base64\\\"));\\n }\\n return fromBase64(Buffer.from(input, encoding).toString(\\\"base64\\\"));\\n}\\n;\\nfunction decode(base64url, encoding) {\\n if (encoding === void 0) { encoding = \\\"utf8\\\"; }\\n return Buffer.from(toBase64(base64url), \\\"base64\\\").toString(encoding);\\n}\\nfunction toBase64(base64url) {\\n base64url = base64url.toString();\\n return pad_string_1.default(base64url)\\n .replace(/\\\\-/g, \\\"+\\\")\\n .replace(/_/g, \\\"/\\\");\\n}\\nfunction fromBase64(base64) {\\n return base64\\n .replace(/=/g, \\\"\\\")\\n .replace(/\\\\+/g, \\\"-\\\")\\n .replace(/\\\\//g, \\\"_\\\");\\n}\\nfunction toBuffer(base64url) {\\n return Buffer.from(toBase64(base64url), \\\"base64\\\");\\n}\\nvar base64url = encode;\\nbase64url.encode = encode;\\nbase64url.decode = decode;\\nbase64url.toBase64 = toBase64;\\nbase64url.fromBase64 = fromBase64;\\nbase64url.toBuffer = toBuffer;\\nexports.default = base64url;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/base64url/dist/base64url.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base64url/dist/pad-string.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/base64url/dist/pad-string.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nfunction padString(input) {\\n var segmentLength = 4;\\n var stringLength = input.length;\\n var diff = stringLength % segmentLength;\\n if (!diff) {\\n return input;\\n }\\n var position = stringLength;\\n var padLength = segmentLength - diff;\\n var paddedStringLength = stringLength + padLength;\\n var buffer = Buffer.alloc(paddedStringLength);\\n buffer.write(input);\\n while (padLength--) {\\n buffer.write(\\\"=\\\", position++);\\n }\\n return buffer.toString();\\n}\\nexports.default = padString;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/base64url/dist/pad-string.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base64url/index.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/base64url/index.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = __webpack_require__(/*! ./dist/base64url */ \\\"./node_modules/base64url/dist/base64url.js\\\").default;\\nmodule.exports.default = module.exports;\\n\\n\\n//# sourceURL=webpack:///./node_modules/base64url/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/blakejs/blake2b.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/blakejs/blake2b.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"// Blake2B in pure Javascript\\n// Adapted from the reference implementation in RFC7693\\n// Ported to Javascript by DC - https://github.com/dcposch\\n\\nvar util = __webpack_require__(/*! ./util */ \\\"./node_modules/blakejs/util.js\\\")\\n\\n// 64-bit unsigned addition\\n// Sets v[a,a+1] += v[b,b+1]\\n// v should be a Uint32Array\\nfunction ADD64AA (v, a, b) {\\n var o0 = v[a] + v[b]\\n var o1 = v[a + 1] + v[b + 1]\\n if (o0 >= 0x100000000) {\\n o1++\\n }\\n v[a] = o0\\n v[a + 1] = o1\\n}\\n\\n// 64-bit unsigned addition\\n// Sets v[a,a+1] += b\\n// b0 is the low 32 bits of b, b1 represents the high 32 bits\\nfunction ADD64AC (v, a, b0, b1) {\\n var o0 = v[a] + b0\\n if (b0 < 0) {\\n o0 += 0x100000000\\n }\\n var o1 = v[a + 1] + b1\\n if (o0 >= 0x100000000) {\\n o1++\\n }\\n v[a] = o0\\n v[a + 1] = o1\\n}\\n\\n// Little-endian byte access\\nfunction B2B_GET32 (arr, i) {\\n return (arr[i] ^\\n (arr[i + 1] << 8) ^\\n (arr[i + 2] << 16) ^\\n (arr[i + 3] << 24))\\n}\\n\\n// G Mixing function\\n// The ROTRs are inlined for speed\\nfunction B2B_G (a, b, c, d, ix, iy) {\\n var x0 = m[ix]\\n var x1 = m[ix + 1]\\n var y0 = m[iy]\\n var y1 = m[iy + 1]\\n\\n ADD64AA(v, a, b) // v[a,a+1] += v[b,b+1] ... in JS we must store a uint64 as two uint32s\\n ADD64AC(v, a, x0, x1) // v[a, a+1] += x ... x0 is the low 32 bits of x, x1 is the high 32 bits\\n\\n // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated to the right by 32 bits\\n var xor0 = v[d] ^ v[a]\\n var xor1 = v[d + 1] ^ v[a + 1]\\n v[d] = xor1\\n v[d + 1] = xor0\\n\\n ADD64AA(v, c, d)\\n\\n // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 24 bits\\n xor0 = v[b] ^ v[c]\\n xor1 = v[b + 1] ^ v[c + 1]\\n v[b] = (xor0 >>> 24) ^ (xor1 << 8)\\n v[b + 1] = (xor1 >>> 24) ^ (xor0 << 8)\\n\\n ADD64AA(v, a, b)\\n ADD64AC(v, a, y0, y1)\\n\\n // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated right by 16 bits\\n xor0 = v[d] ^ v[a]\\n xor1 = v[d + 1] ^ v[a + 1]\\n v[d] = (xor0 >>> 16) ^ (xor1 << 16)\\n v[d + 1] = (xor1 >>> 16) ^ (xor0 << 16)\\n\\n ADD64AA(v, c, d)\\n\\n // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 63 bits\\n xor0 = v[b] ^ v[c]\\n xor1 = v[b + 1] ^ v[c + 1]\\n v[b] = (xor1 >>> 31) ^ (xor0 << 1)\\n v[b + 1] = (xor0 >>> 31) ^ (xor1 << 1)\\n}\\n\\n// Initialization Vector\\nvar BLAKE2B_IV32 = new Uint32Array([\\n 0xF3BCC908, 0x6A09E667, 0x84CAA73B, 0xBB67AE85,\\n 0xFE94F82B, 0x3C6EF372, 0x5F1D36F1, 0xA54FF53A,\\n 0xADE682D1, 0x510E527F, 0x2B3E6C1F, 0x9B05688C,\\n 0xFB41BD6B, 0x1F83D9AB, 0x137E2179, 0x5BE0CD19\\n])\\n\\nvar SIGMA8 = [\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3\\n]\\n\\n// These are offsets into a uint64 buffer.\\n// Multiply them all by 2 to make them offsets into a uint32 buffer,\\n// because this is Javascript and we don't have uint64s\\nvar SIGMA82 = new Uint8Array(SIGMA8.map(function (x) { return x * 2 }))\\n\\n// Compression function. 'last' flag indicates last block.\\n// Note we're representing 16 uint64s as 32 uint32s\\nvar v = new Uint32Array(32)\\nvar m = new Uint32Array(32)\\nfunction blake2bCompress (ctx, last) {\\n var i = 0\\n\\n // init work variables\\n for (i = 0; i < 16; i++) {\\n v[i] = ctx.h[i]\\n v[i + 16] = BLAKE2B_IV32[i]\\n }\\n\\n // low 64 bits of offset\\n v[24] = v[24] ^ ctx.t\\n v[25] = v[25] ^ (ctx.t / 0x100000000)\\n // high 64 bits not supported, offset may not be higher than 2**53-1\\n\\n // last block flag set ?\\n if (last) {\\n v[28] = ~v[28]\\n v[29] = ~v[29]\\n }\\n\\n // get little-endian words\\n for (i = 0; i < 32; i++) {\\n m[i] = B2B_GET32(ctx.b, 4 * i)\\n }\\n\\n // twelve rounds of mixing\\n // uncomment the DebugPrint calls to log the computation\\n // and match the RFC sample documentation\\n // util.debugPrint(' m[16]', m, 64)\\n for (i = 0; i < 12; i++) {\\n // util.debugPrint(' (i=' + (i < 10 ? ' ' : '') + i + ') v[16]', v, 64)\\n B2B_G(0, 8, 16, 24, SIGMA82[i * 16 + 0], SIGMA82[i * 16 + 1])\\n B2B_G(2, 10, 18, 26, SIGMA82[i * 16 + 2], SIGMA82[i * 16 + 3])\\n B2B_G(4, 12, 20, 28, SIGMA82[i * 16 + 4], SIGMA82[i * 16 + 5])\\n B2B_G(6, 14, 22, 30, SIGMA82[i * 16 + 6], SIGMA82[i * 16 + 7])\\n B2B_G(0, 10, 20, 30, SIGMA82[i * 16 + 8], SIGMA82[i * 16 + 9])\\n B2B_G(2, 12, 22, 24, SIGMA82[i * 16 + 10], SIGMA82[i * 16 + 11])\\n B2B_G(4, 14, 16, 26, SIGMA82[i * 16 + 12], SIGMA82[i * 16 + 13])\\n B2B_G(6, 8, 18, 28, SIGMA82[i * 16 + 14], SIGMA82[i * 16 + 15])\\n }\\n // util.debugPrint(' (i=12) v[16]', v, 64)\\n\\n for (i = 0; i < 16; i++) {\\n ctx.h[i] = ctx.h[i] ^ v[i] ^ v[i + 16]\\n }\\n // util.debugPrint('h[8]', ctx.h, 64)\\n}\\n\\n// Creates a BLAKE2b hashing context\\n// Requires an output length between 1 and 64 bytes\\n// Takes an optional Uint8Array key\\nfunction blake2bInit (outlen, key) {\\n if (outlen === 0 || outlen > 64) {\\n throw new Error('Illegal output length, expected 0 < length <= 64')\\n }\\n if (key && key.length > 64) {\\n throw new Error('Illegal key, expected Uint8Array with 0 < length <= 64')\\n }\\n\\n // state, 'param block'\\n var ctx = {\\n b: new Uint8Array(128),\\n h: new Uint32Array(16),\\n t: 0, // input count\\n c: 0, // pointer within buffer\\n outlen: outlen // output length in bytes\\n }\\n\\n // initialize hash state\\n for (var i = 0; i < 16; i++) {\\n ctx.h[i] = BLAKE2B_IV32[i]\\n }\\n var keylen = key ? key.length : 0\\n ctx.h[0] ^= 0x01010000 ^ (keylen << 8) ^ outlen\\n\\n // key the hash, if applicable\\n if (key) {\\n blake2bUpdate(ctx, key)\\n // at the end\\n ctx.c = 128\\n }\\n\\n return ctx\\n}\\n\\n// Updates a BLAKE2b streaming hash\\n// Requires hash context and Uint8Array (byte array)\\nfunction blake2bUpdate (ctx, input) {\\n for (var i = 0; i < input.length; i++) {\\n if (ctx.c === 128) { // buffer full ?\\n ctx.t += ctx.c // add counters\\n blake2bCompress(ctx, false) // compress (not last)\\n ctx.c = 0 // counter to zero\\n }\\n ctx.b[ctx.c++] = input[i]\\n }\\n}\\n\\n// Completes a BLAKE2b streaming hash\\n// Returns a Uint8Array containing the message digest\\nfunction blake2bFinal (ctx) {\\n ctx.t += ctx.c // mark last block offset\\n\\n while (ctx.c < 128) { // fill up with zeros\\n ctx.b[ctx.c++] = 0\\n }\\n blake2bCompress(ctx, true) // final block flag = 1\\n\\n // little endian convert and store\\n var out = new Uint8Array(ctx.outlen)\\n for (var i = 0; i < ctx.outlen; i++) {\\n out[i] = ctx.h[i >> 2] >> (8 * (i & 3))\\n }\\n return out\\n}\\n\\n// Computes the BLAKE2B hash of a string or byte array, and returns a Uint8Array\\n//\\n// Returns a n-byte Uint8Array\\n//\\n// Parameters:\\n// - input - the input bytes, as a string, Buffer or Uint8Array\\n// - key - optional key Uint8Array, up to 64 bytes\\n// - outlen - optional output length in bytes, default 64\\nfunction blake2b (input, key, outlen) {\\n // preprocess inputs\\n outlen = outlen || 64\\n input = util.normalizeInput(input)\\n\\n // do the math\\n var ctx = blake2bInit(outlen, key)\\n blake2bUpdate(ctx, input)\\n return blake2bFinal(ctx)\\n}\\n\\n// Computes the BLAKE2B hash of a string or byte array\\n//\\n// Returns an n-byte hash in hex, all lowercase\\n//\\n// Parameters:\\n// - input - the input bytes, as a string, Buffer, or Uint8Array\\n// - key - optional key Uint8Array, up to 64 bytes\\n// - outlen - optional output length in bytes, default 64\\nfunction blake2bHex (input, key, outlen) {\\n var output = blake2b(input, key, outlen)\\n return util.toHex(output)\\n}\\n\\nmodule.exports = {\\n blake2b: blake2b,\\n blake2bHex: blake2bHex,\\n blake2bInit: blake2bInit,\\n blake2bUpdate: blake2bUpdate,\\n blake2bFinal: blake2bFinal\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/blakejs/blake2b.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/blakejs/blake2s.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/blakejs/blake2s.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"// BLAKE2s hash function in pure Javascript\\n// Adapted from the reference implementation in RFC7693\\n// Ported to Javascript by DC - https://github.com/dcposch\\n\\nvar util = __webpack_require__(/*! ./util */ \\\"./node_modules/blakejs/util.js\\\")\\n\\n// Little-endian byte access.\\n// Expects a Uint8Array and an index\\n// Returns the little-endian uint32 at v[i..i+3]\\nfunction B2S_GET32 (v, i) {\\n return v[i] ^ (v[i + 1] << 8) ^ (v[i + 2] << 16) ^ (v[i + 3] << 24)\\n}\\n\\n// Mixing function G.\\nfunction B2S_G (a, b, c, d, x, y) {\\n v[a] = v[a] + v[b] + x\\n v[d] = ROTR32(v[d] ^ v[a], 16)\\n v[c] = v[c] + v[d]\\n v[b] = ROTR32(v[b] ^ v[c], 12)\\n v[a] = v[a] + v[b] + y\\n v[d] = ROTR32(v[d] ^ v[a], 8)\\n v[c] = v[c] + v[d]\\n v[b] = ROTR32(v[b] ^ v[c], 7)\\n}\\n\\n// 32-bit right rotation\\n// x should be a uint32\\n// y must be between 1 and 31, inclusive\\nfunction ROTR32 (x, y) {\\n return (x >>> y) ^ (x << (32 - y))\\n}\\n\\n// Initialization Vector.\\nvar BLAKE2S_IV = new Uint32Array([\\n 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A,\\n 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19])\\n\\nvar SIGMA = new Uint8Array([\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0])\\n\\n// Compression function. \\\"last\\\" flag indicates last block\\nvar v = new Uint32Array(16)\\nvar m = new Uint32Array(16)\\nfunction blake2sCompress (ctx, last) {\\n var i = 0\\n for (i = 0; i < 8; i++) { // init work variables\\n v[i] = ctx.h[i]\\n v[i + 8] = BLAKE2S_IV[i]\\n }\\n\\n v[12] ^= ctx.t // low 32 bits of offset\\n v[13] ^= (ctx.t / 0x100000000) // high 32 bits\\n if (last) { // last block flag set ?\\n v[14] = ~v[14]\\n }\\n\\n for (i = 0; i < 16; i++) { // get little-endian words\\n m[i] = B2S_GET32(ctx.b, 4 * i)\\n }\\n\\n // ten rounds of mixing\\n // uncomment the DebugPrint calls to log the computation\\n // and match the RFC sample documentation\\n // util.debugPrint(' m[16]', m, 32)\\n for (i = 0; i < 10; i++) {\\n // util.debugPrint(' (i=' + i + ') v[16]', v, 32)\\n B2S_G(0, 4, 8, 12, m[SIGMA[i * 16 + 0]], m[SIGMA[i * 16 + 1]])\\n B2S_G(1, 5, 9, 13, m[SIGMA[i * 16 + 2]], m[SIGMA[i * 16 + 3]])\\n B2S_G(2, 6, 10, 14, m[SIGMA[i * 16 + 4]], m[SIGMA[i * 16 + 5]])\\n B2S_G(3, 7, 11, 15, m[SIGMA[i * 16 + 6]], m[SIGMA[i * 16 + 7]])\\n B2S_G(0, 5, 10, 15, m[SIGMA[i * 16 + 8]], m[SIGMA[i * 16 + 9]])\\n B2S_G(1, 6, 11, 12, m[SIGMA[i * 16 + 10]], m[SIGMA[i * 16 + 11]])\\n B2S_G(2, 7, 8, 13, m[SIGMA[i * 16 + 12]], m[SIGMA[i * 16 + 13]])\\n B2S_G(3, 4, 9, 14, m[SIGMA[i * 16 + 14]], m[SIGMA[i * 16 + 15]])\\n }\\n // util.debugPrint(' (i=10) v[16]', v, 32)\\n\\n for (i = 0; i < 8; i++) {\\n ctx.h[i] ^= v[i] ^ v[i + 8]\\n }\\n // util.debugPrint('h[8]', ctx.h, 32)\\n}\\n\\n// Creates a BLAKE2s hashing context\\n// Requires an output length between 1 and 32 bytes\\n// Takes an optional Uint8Array key\\nfunction blake2sInit (outlen, key) {\\n if (!(outlen > 0 && outlen <= 32)) {\\n throw new Error('Incorrect output length, should be in [1, 32]')\\n }\\n var keylen = key ? key.length : 0\\n if (key && !(keylen > 0 && keylen <= 32)) {\\n throw new Error('Incorrect key length, should be in [1, 32]')\\n }\\n\\n var ctx = {\\n h: new Uint32Array(BLAKE2S_IV), // hash state\\n b: new Uint32Array(64), // input block\\n c: 0, // pointer within block\\n t: 0, // input count\\n outlen: outlen // output length in bytes\\n }\\n ctx.h[0] ^= 0x01010000 ^ (keylen << 8) ^ outlen\\n\\n if (keylen > 0) {\\n blake2sUpdate(ctx, key)\\n ctx.c = 64 // at the end\\n }\\n\\n return ctx\\n}\\n\\n// Updates a BLAKE2s streaming hash\\n// Requires hash context and Uint8Array (byte array)\\nfunction blake2sUpdate (ctx, input) {\\n for (var i = 0; i < input.length; i++) {\\n if (ctx.c === 64) { // buffer full ?\\n ctx.t += ctx.c // add counters\\n blake2sCompress(ctx, false) // compress (not last)\\n ctx.c = 0 // counter to zero\\n }\\n ctx.b[ctx.c++] = input[i]\\n }\\n}\\n\\n// Completes a BLAKE2s streaming hash\\n// Returns a Uint8Array containing the message digest\\nfunction blake2sFinal (ctx) {\\n ctx.t += ctx.c // mark last block offset\\n while (ctx.c < 64) { // fill up with zeros\\n ctx.b[ctx.c++] = 0\\n }\\n blake2sCompress(ctx, true) // final block flag = 1\\n\\n // little endian convert and store\\n var out = new Uint8Array(ctx.outlen)\\n for (var i = 0; i < ctx.outlen; i++) {\\n out[i] = (ctx.h[i >> 2] >> (8 * (i & 3))) & 0xFF\\n }\\n return out\\n}\\n\\n// Computes the BLAKE2S hash of a string or byte array, and returns a Uint8Array\\n//\\n// Returns a n-byte Uint8Array\\n//\\n// Parameters:\\n// - input - the input bytes, as a string, Buffer, or Uint8Array\\n// - key - optional key Uint8Array, up to 32 bytes\\n// - outlen - optional output length in bytes, default 64\\nfunction blake2s (input, key, outlen) {\\n // preprocess inputs\\n outlen = outlen || 32\\n input = util.normalizeInput(input)\\n\\n // do the math\\n var ctx = blake2sInit(outlen, key)\\n blake2sUpdate(ctx, input)\\n return blake2sFinal(ctx)\\n}\\n\\n// Computes the BLAKE2S hash of a string or byte array\\n//\\n// Returns an n-byte hash in hex, all lowercase\\n//\\n// Parameters:\\n// - input - the input bytes, as a string, Buffer, or Uint8Array\\n// - key - optional key Uint8Array, up to 32 bytes\\n// - outlen - optional output length in bytes, default 64\\nfunction blake2sHex (input, key, outlen) {\\n var output = blake2s(input, key, outlen)\\n return util.toHex(output)\\n}\\n\\nmodule.exports = {\\n blake2s: blake2s,\\n blake2sHex: blake2sHex,\\n blake2sInit: blake2sInit,\\n blake2sUpdate: blake2sUpdate,\\n blake2sFinal: blake2sFinal\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/blakejs/blake2s.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/blakejs/index.js\":\n/*!***************************************!*\\\n !*** ./node_modules/blakejs/index.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var b2b = __webpack_require__(/*! ./blake2b */ \\\"./node_modules/blakejs/blake2b.js\\\")\\nvar b2s = __webpack_require__(/*! ./blake2s */ \\\"./node_modules/blakejs/blake2s.js\\\")\\n\\nmodule.exports = {\\n blake2b: b2b.blake2b,\\n blake2bHex: b2b.blake2bHex,\\n blake2bInit: b2b.blake2bInit,\\n blake2bUpdate: b2b.blake2bUpdate,\\n blake2bFinal: b2b.blake2bFinal,\\n blake2s: b2s.blake2s,\\n blake2sHex: b2s.blake2sHex,\\n blake2sInit: b2s.blake2sInit,\\n blake2sUpdate: b2s.blake2sUpdate,\\n blake2sFinal: b2s.blake2sFinal\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/blakejs/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/blakejs/util.js\":\n/*!**************************************!*\\\n !*** ./node_modules/blakejs/util.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {var ERROR_MSG_INPUT = 'Input must be an string, Buffer or Uint8Array'\\n\\n// For convenience, let people hash a string, not just a Uint8Array\\nfunction normalizeInput (input) {\\n var ret\\n if (input instanceof Uint8Array) {\\n ret = input\\n } else if (input instanceof Buffer) {\\n ret = new Uint8Array(input)\\n } else if (typeof (input) === 'string') {\\n ret = new Uint8Array(Buffer.from(input, 'utf8'))\\n } else {\\n throw new Error(ERROR_MSG_INPUT)\\n }\\n return ret\\n}\\n\\n// Converts a Uint8Array to a hexadecimal string\\n// For example, toHex([255, 0, 255]) returns \\\"ff00ff\\\"\\nfunction toHex (bytes) {\\n return Array.prototype.map.call(bytes, function (n) {\\n return (n < 16 ? '0' : '') + n.toString(16)\\n }).join('')\\n}\\n\\n// Converts any value in [0...2^32-1] to an 8-character hex string\\nfunction uint32ToHex (val) {\\n return (0x100000000 + val).toString(16).substring(1)\\n}\\n\\n// For debugging: prints out hash state in the same format as the RFC\\n// sample computation exactly, so that you can diff\\nfunction debugPrint (label, arr, size) {\\n var msg = '\\\\n' + label + ' = '\\n for (var i = 0; i < arr.length; i += 2) {\\n if (size === 32) {\\n msg += uint32ToHex(arr[i]).toUpperCase()\\n msg += ' '\\n msg += uint32ToHex(arr[i + 1]).toUpperCase()\\n } else if (size === 64) {\\n msg += uint32ToHex(arr[i + 1]).toUpperCase()\\n msg += uint32ToHex(arr[i]).toUpperCase()\\n } else throw new Error('Invalid size ' + size)\\n if (i % 6 === 4) {\\n msg += '\\\\n' + new Array(label.length + 4).join(' ')\\n } else if (i < arr.length - 2) {\\n msg += ' '\\n }\\n }\\n console.log(msg)\\n}\\n\\n// For performance testing: generates N bytes of input, hashes M times\\n// Measures and prints MB/second hash performance each time\\nfunction testSpeed (hashFn, N, M) {\\n var startMs = new Date().getTime()\\n\\n var input = new Uint8Array(N)\\n for (var i = 0; i < N; i++) {\\n input[i] = i % 256\\n }\\n var genMs = new Date().getTime()\\n console.log('Generated random input in ' + (genMs - startMs) + 'ms')\\n startMs = genMs\\n\\n for (i = 0; i < M; i++) {\\n var hashHex = hashFn(input)\\n var hashMs = new Date().getTime()\\n var ms = hashMs - startMs\\n startMs = hashMs\\n console.log('Hashed in ' + ms + 'ms: ' + hashHex.substring(0, 20) + '...')\\n console.log(Math.round(N / (1 << 20) / (ms / 1000) * 100) / 100 + ' MB PER SECOND')\\n }\\n}\\n\\nmodule.exports = {\\n normalizeInput: normalizeInput,\\n toHex: toHex,\\n debugPrint: debugPrint,\\n testSpeed: testSpeed\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/blakejs/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/bn.js/lib/bn.js\":\n/*!**************************************!*\\\n !*** ./node_modules/bn.js/lib/bn.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(module) {(function (module, exports) {\\n 'use strict';\\n\\n // Utils\\n function assert (val, msg) {\\n if (!val) throw new Error(msg || 'Assertion failed');\\n }\\n\\n // Could use `inherits` module, but don't want to move from single file\\n // architecture yet.\\n function inherits (ctor, superCtor) {\\n ctor.super_ = superCtor;\\n var TempCtor = function () {};\\n TempCtor.prototype = superCtor.prototype;\\n ctor.prototype = new TempCtor();\\n ctor.prototype.constructor = ctor;\\n }\\n\\n // BN\\n\\n function BN (number, base, endian) {\\n if (BN.isBN(number)) {\\n return number;\\n }\\n\\n this.negative = 0;\\n this.words = null;\\n this.length = 0;\\n\\n // Reduction context\\n this.red = null;\\n\\n if (number !== null) {\\n if (base === 'le' || base === 'be') {\\n endian = base;\\n base = 10;\\n }\\n\\n this._init(number || 0, base || 10, endian || 'be');\\n }\\n }\\n if (typeof module === 'object') {\\n module.exports = BN;\\n } else {\\n exports.BN = BN;\\n }\\n\\n BN.BN = BN;\\n BN.wordSize = 26;\\n\\n var Buffer;\\n try {\\n Buffer = __webpack_require__(/*! buffer */ 0).Buffer;\\n } catch (e) {\\n }\\n\\n BN.isBN = function isBN (num) {\\n if (num instanceof BN) {\\n return true;\\n }\\n\\n return num !== null && typeof num === 'object' &&\\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\\n };\\n\\n BN.max = function max (left, right) {\\n if (left.cmp(right) > 0) return left;\\n return right;\\n };\\n\\n BN.min = function min (left, right) {\\n if (left.cmp(right) < 0) return left;\\n return right;\\n };\\n\\n BN.prototype._init = function init (number, base, endian) {\\n if (typeof number === 'number') {\\n return this._initNumber(number, base, endian);\\n }\\n\\n if (typeof number === 'object') {\\n return this._initArray(number, base, endian);\\n }\\n\\n if (base === 'hex') {\\n base = 16;\\n }\\n assert(base === (base | 0) && base >= 2 && base <= 36);\\n\\n number = number.toString().replace(/\\\\s+/g, '');\\n var start = 0;\\n if (number[0] === '-') {\\n start++;\\n }\\n\\n if (base === 16) {\\n this._parseHex(number, start);\\n } else {\\n this._parseBase(number, base, start);\\n }\\n\\n if (number[0] === '-') {\\n this.negative = 1;\\n }\\n\\n this.strip();\\n\\n if (endian !== 'le') return;\\n\\n this._initArray(this.toArray(), base, endian);\\n };\\n\\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\\n if (number < 0) {\\n this.negative = 1;\\n number = -number;\\n }\\n if (number < 0x4000000) {\\n this.words = [ number & 0x3ffffff ];\\n this.length = 1;\\n } else if (number < 0x10000000000000) {\\n this.words = [\\n number & 0x3ffffff,\\n (number / 0x4000000) & 0x3ffffff\\n ];\\n this.length = 2;\\n } else {\\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\\n this.words = [\\n number & 0x3ffffff,\\n (number / 0x4000000) & 0x3ffffff,\\n 1\\n ];\\n this.length = 3;\\n }\\n\\n if (endian !== 'le') return;\\n\\n // Reverse the bytes\\n this._initArray(this.toArray(), base, endian);\\n };\\n\\n BN.prototype._initArray = function _initArray (number, base, endian) {\\n // Perhaps a Uint8Array\\n assert(typeof number.length === 'number');\\n if (number.length <= 0) {\\n this.words = [ 0 ];\\n this.length = 1;\\n return this;\\n }\\n\\n this.length = Math.ceil(number.length / 3);\\n this.words = new Array(this.length);\\n for (var i = 0; i < this.length; i++) {\\n this.words[i] = 0;\\n }\\n\\n var j, w;\\n var off = 0;\\n if (endian === 'be') {\\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\\n this.words[j] |= (w << off) & 0x3ffffff;\\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\\n off += 24;\\n if (off >= 26) {\\n off -= 26;\\n j++;\\n }\\n }\\n } else if (endian === 'le') {\\n for (i = 0, j = 0; i < number.length; i += 3) {\\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\\n this.words[j] |= (w << off) & 0x3ffffff;\\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\\n off += 24;\\n if (off >= 26) {\\n off -= 26;\\n j++;\\n }\\n }\\n }\\n return this.strip();\\n };\\n\\n function parseHex (str, start, end) {\\n var r = 0;\\n var len = Math.min(str.length, end);\\n for (var i = start; i < len; i++) {\\n var c = str.charCodeAt(i) - 48;\\n\\n r <<= 4;\\n\\n // 'a' - 'f'\\n if (c >= 49 && c <= 54) {\\n r |= c - 49 + 0xa;\\n\\n // 'A' - 'F'\\n } else if (c >= 17 && c <= 22) {\\n r |= c - 17 + 0xa;\\n\\n // '0' - '9'\\n } else {\\n r |= c & 0xf;\\n }\\n }\\n return r;\\n }\\n\\n BN.prototype._parseHex = function _parseHex (number, start) {\\n // Create possibly bigger array to ensure that it fits the number\\n this.length = Math.ceil((number.length - start) / 6);\\n this.words = new Array(this.length);\\n for (var i = 0; i < this.length; i++) {\\n this.words[i] = 0;\\n }\\n\\n var j, w;\\n // Scan 24-bit chunks and add them to the number\\n var off = 0;\\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\\n w = parseHex(number, i, i + 6);\\n this.words[j] |= (w << off) & 0x3ffffff;\\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\\n off += 24;\\n if (off >= 26) {\\n off -= 26;\\n j++;\\n }\\n }\\n if (i + 6 !== start) {\\n w = parseHex(number, start, i + 6);\\n this.words[j] |= (w << off) & 0x3ffffff;\\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\\n }\\n this.strip();\\n };\\n\\n function parseBase (str, start, end, mul) {\\n var r = 0;\\n var len = Math.min(str.length, end);\\n for (var i = start; i < len; i++) {\\n var c = str.charCodeAt(i) - 48;\\n\\n r *= mul;\\n\\n // 'a'\\n if (c >= 49) {\\n r += c - 49 + 0xa;\\n\\n // 'A'\\n } else if (c >= 17) {\\n r += c - 17 + 0xa;\\n\\n // '0' - '9'\\n } else {\\n r += c;\\n }\\n }\\n return r;\\n }\\n\\n BN.prototype._parseBase = function _parseBase (number, base, start) {\\n // Initialize as zero\\n this.words = [ 0 ];\\n this.length = 1;\\n\\n // Find length of limb in base\\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\\n limbLen++;\\n }\\n limbLen--;\\n limbPow = (limbPow / base) | 0;\\n\\n var total = number.length - start;\\n var mod = total % limbLen;\\n var end = Math.min(total, total - mod) + start;\\n\\n var word = 0;\\n for (var i = start; i < end; i += limbLen) {\\n word = parseBase(number, i, i + limbLen, base);\\n\\n this.imuln(limbPow);\\n if (this.words[0] + word < 0x4000000) {\\n this.words[0] += word;\\n } else {\\n this._iaddn(word);\\n }\\n }\\n\\n if (mod !== 0) {\\n var pow = 1;\\n word = parseBase(number, i, number.length, base);\\n\\n for (i = 0; i < mod; i++) {\\n pow *= base;\\n }\\n\\n this.imuln(pow);\\n if (this.words[0] + word < 0x4000000) {\\n this.words[0] += word;\\n } else {\\n this._iaddn(word);\\n }\\n }\\n };\\n\\n BN.prototype.copy = function copy (dest) {\\n dest.words = new Array(this.length);\\n for (var i = 0; i < this.length; i++) {\\n dest.words[i] = this.words[i];\\n }\\n dest.length = this.length;\\n dest.negative = this.negative;\\n dest.red = this.red;\\n };\\n\\n BN.prototype.clone = function clone () {\\n var r = new BN(null);\\n this.copy(r);\\n return r;\\n };\\n\\n BN.prototype._expand = function _expand (size) {\\n while (this.length < size) {\\n this.words[this.length++] = 0;\\n }\\n return this;\\n };\\n\\n // Remove leading `0` from `this`\\n BN.prototype.strip = function strip () {\\n while (this.length > 1 && this.words[this.length - 1] === 0) {\\n this.length--;\\n }\\n return this._normSign();\\n };\\n\\n BN.prototype._normSign = function _normSign () {\\n // -0 = 0\\n if (this.length === 1 && this.words[0] === 0) {\\n this.negative = 0;\\n }\\n return this;\\n };\\n\\n BN.prototype.inspect = function inspect () {\\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\\n };\\n\\n /*\\n\\n var zeros = [];\\n var groupSizes = [];\\n var groupBases = [];\\n\\n var s = '';\\n var i = -1;\\n while (++i < BN.wordSize) {\\n zeros[i] = s;\\n s += '0';\\n }\\n groupSizes[0] = 0;\\n groupSizes[1] = 0;\\n groupBases[0] = 0;\\n groupBases[1] = 0;\\n var base = 2 - 1;\\n while (++base < 36 + 1) {\\n var groupSize = 0;\\n var groupBase = 1;\\n while (groupBase < (1 << BN.wordSize) / base) {\\n groupBase *= base;\\n groupSize += 1;\\n }\\n groupSizes[base] = groupSize;\\n groupBases[base] = groupBase;\\n }\\n\\n */\\n\\n var zeros = [\\n '',\\n '0',\\n '00',\\n '000',\\n '0000',\\n '00000',\\n '000000',\\n '0000000',\\n '00000000',\\n '000000000',\\n '0000000000',\\n '00000000000',\\n '000000000000',\\n '0000000000000',\\n '00000000000000',\\n '000000000000000',\\n '0000000000000000',\\n '00000000000000000',\\n '000000000000000000',\\n '0000000000000000000',\\n '00000000000000000000',\\n '000000000000000000000',\\n '0000000000000000000000',\\n '00000000000000000000000',\\n '000000000000000000000000',\\n '0000000000000000000000000'\\n ];\\n\\n var groupSizes = [\\n 0, 0,\\n 25, 16, 12, 11, 10, 9, 8,\\n 8, 7, 7, 7, 7, 6, 6,\\n 6, 6, 6, 6, 6, 5, 5,\\n 5, 5, 5, 5, 5, 5, 5,\\n 5, 5, 5, 5, 5, 5, 5\\n ];\\n\\n var groupBases = [\\n 0, 0,\\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\\n ];\\n\\n BN.prototype.toString = function toString (base, padding) {\\n base = base || 10;\\n padding = padding | 0 || 1;\\n\\n var out;\\n if (base === 16 || base === 'hex') {\\n out = '';\\n var off = 0;\\n var carry = 0;\\n for (var i = 0; i < this.length; i++) {\\n var w = this.words[i];\\n var word = (((w << off) | carry) & 0xffffff).toString(16);\\n carry = (w >>> (24 - off)) & 0xffffff;\\n if (carry !== 0 || i !== this.length - 1) {\\n out = zeros[6 - word.length] + word + out;\\n } else {\\n out = word + out;\\n }\\n off += 2;\\n if (off >= 26) {\\n off -= 26;\\n i--;\\n }\\n }\\n if (carry !== 0) {\\n out = carry.toString(16) + out;\\n }\\n while (out.length % padding !== 0) {\\n out = '0' + out;\\n }\\n if (this.negative !== 0) {\\n out = '-' + out;\\n }\\n return out;\\n }\\n\\n if (base === (base | 0) && base >= 2 && base <= 36) {\\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\\n var groupSize = groupSizes[base];\\n // var groupBase = Math.pow(base, groupSize);\\n var groupBase = groupBases[base];\\n out = '';\\n var c = this.clone();\\n c.negative = 0;\\n while (!c.isZero()) {\\n var r = c.modn(groupBase).toString(base);\\n c = c.idivn(groupBase);\\n\\n if (!c.isZero()) {\\n out = zeros[groupSize - r.length] + r + out;\\n } else {\\n out = r + out;\\n }\\n }\\n if (this.isZero()) {\\n out = '0' + out;\\n }\\n while (out.length % padding !== 0) {\\n out = '0' + out;\\n }\\n if (this.negative !== 0) {\\n out = '-' + out;\\n }\\n return out;\\n }\\n\\n assert(false, 'Base should be between 2 and 36');\\n };\\n\\n BN.prototype.toNumber = function toNumber () {\\n var ret = this.words[0];\\n if (this.length === 2) {\\n ret += this.words[1] * 0x4000000;\\n } else if (this.length === 3 && this.words[2] === 0x01) {\\n // NOTE: at this stage it is known that the top bit is set\\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\\n } else if (this.length > 2) {\\n assert(false, 'Number can only safely store up to 53 bits');\\n }\\n return (this.negative !== 0) ? -ret : ret;\\n };\\n\\n BN.prototype.toJSON = function toJSON () {\\n return this.toString(16);\\n };\\n\\n BN.prototype.toBuffer = function toBuffer (endian, length) {\\n assert(typeof Buffer !== 'undefined');\\n return this.toArrayLike(Buffer, endian, length);\\n };\\n\\n BN.prototype.toArray = function toArray (endian, length) {\\n return this.toArrayLike(Array, endian, length);\\n };\\n\\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\\n var byteLength = this.byteLength();\\n var reqLength = length || Math.max(1, byteLength);\\n assert(byteLength <= reqLength, 'byte array longer than desired length');\\n assert(reqLength > 0, 'Requested array length <= 0');\\n\\n this.strip();\\n var littleEndian = endian === 'le';\\n var res = new ArrayType(reqLength);\\n\\n var b, i;\\n var q = this.clone();\\n if (!littleEndian) {\\n // Assume big-endian\\n for (i = 0; i < reqLength - byteLength; i++) {\\n res[i] = 0;\\n }\\n\\n for (i = 0; !q.isZero(); i++) {\\n b = q.andln(0xff);\\n q.iushrn(8);\\n\\n res[reqLength - i - 1] = b;\\n }\\n } else {\\n for (i = 0; !q.isZero(); i++) {\\n b = q.andln(0xff);\\n q.iushrn(8);\\n\\n res[i] = b;\\n }\\n\\n for (; i < reqLength; i++) {\\n res[i] = 0;\\n }\\n }\\n\\n return res;\\n };\\n\\n if (Math.clz32) {\\n BN.prototype._countBits = function _countBits (w) {\\n return 32 - Math.clz32(w);\\n };\\n } else {\\n BN.prototype._countBits = function _countBits (w) {\\n var t = w;\\n var r = 0;\\n if (t >= 0x1000) {\\n r += 13;\\n t >>>= 13;\\n }\\n if (t >= 0x40) {\\n r += 7;\\n t >>>= 7;\\n }\\n if (t >= 0x8) {\\n r += 4;\\n t >>>= 4;\\n }\\n if (t >= 0x02) {\\n r += 2;\\n t >>>= 2;\\n }\\n return r + t;\\n };\\n }\\n\\n BN.prototype._zeroBits = function _zeroBits (w) {\\n // Short-cut\\n if (w === 0) return 26;\\n\\n var t = w;\\n var r = 0;\\n if ((t & 0x1fff) === 0) {\\n r += 13;\\n t >>>= 13;\\n }\\n if ((t & 0x7f) === 0) {\\n r += 7;\\n t >>>= 7;\\n }\\n if ((t & 0xf) === 0) {\\n r += 4;\\n t >>>= 4;\\n }\\n if ((t & 0x3) === 0) {\\n r += 2;\\n t >>>= 2;\\n }\\n if ((t & 0x1) === 0) {\\n r++;\\n }\\n return r;\\n };\\n\\n // Return number of used bits in a BN\\n BN.prototype.bitLength = function bitLength () {\\n var w = this.words[this.length - 1];\\n var hi = this._countBits(w);\\n return (this.length - 1) * 26 + hi;\\n };\\n\\n function toBitArray (num) {\\n var w = new Array(num.bitLength());\\n\\n for (var bit = 0; bit < w.length; bit++) {\\n var off = (bit / 26) | 0;\\n var wbit = bit % 26;\\n\\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\\n }\\n\\n return w;\\n }\\n\\n // Number of trailing zero bits\\n BN.prototype.zeroBits = function zeroBits () {\\n if (this.isZero()) return 0;\\n\\n var r = 0;\\n for (var i = 0; i < this.length; i++) {\\n var b = this._zeroBits(this.words[i]);\\n r += b;\\n if (b !== 26) break;\\n }\\n return r;\\n };\\n\\n BN.prototype.byteLength = function byteLength () {\\n return Math.ceil(this.bitLength() / 8);\\n };\\n\\n BN.prototype.toTwos = function toTwos (width) {\\n if (this.negative !== 0) {\\n return this.abs().inotn(width).iaddn(1);\\n }\\n return this.clone();\\n };\\n\\n BN.prototype.fromTwos = function fromTwos (width) {\\n if (this.testn(width - 1)) {\\n return this.notn(width).iaddn(1).ineg();\\n }\\n return this.clone();\\n };\\n\\n BN.prototype.isNeg = function isNeg () {\\n return this.negative !== 0;\\n };\\n\\n // Return negative clone of `this`\\n BN.prototype.neg = function neg () {\\n return this.clone().ineg();\\n };\\n\\n BN.prototype.ineg = function ineg () {\\n if (!this.isZero()) {\\n this.negative ^= 1;\\n }\\n\\n return this;\\n };\\n\\n // Or `num` with `this` in-place\\n BN.prototype.iuor = function iuor (num) {\\n while (this.length < num.length) {\\n this.words[this.length++] = 0;\\n }\\n\\n for (var i = 0; i < num.length; i++) {\\n this.words[i] = this.words[i] | num.words[i];\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.ior = function ior (num) {\\n assert((this.negative | num.negative) === 0);\\n return this.iuor(num);\\n };\\n\\n // Or `num` with `this`\\n BN.prototype.or = function or (num) {\\n if (this.length > num.length) return this.clone().ior(num);\\n return num.clone().ior(this);\\n };\\n\\n BN.prototype.uor = function uor (num) {\\n if (this.length > num.length) return this.clone().iuor(num);\\n return num.clone().iuor(this);\\n };\\n\\n // And `num` with `this` in-place\\n BN.prototype.iuand = function iuand (num) {\\n // b = min-length(num, this)\\n var b;\\n if (this.length > num.length) {\\n b = num;\\n } else {\\n b = this;\\n }\\n\\n for (var i = 0; i < b.length; i++) {\\n this.words[i] = this.words[i] & num.words[i];\\n }\\n\\n this.length = b.length;\\n\\n return this.strip();\\n };\\n\\n BN.prototype.iand = function iand (num) {\\n assert((this.negative | num.negative) === 0);\\n return this.iuand(num);\\n };\\n\\n // And `num` with `this`\\n BN.prototype.and = function and (num) {\\n if (this.length > num.length) return this.clone().iand(num);\\n return num.clone().iand(this);\\n };\\n\\n BN.prototype.uand = function uand (num) {\\n if (this.length > num.length) return this.clone().iuand(num);\\n return num.clone().iuand(this);\\n };\\n\\n // Xor `num` with `this` in-place\\n BN.prototype.iuxor = function iuxor (num) {\\n // a.length > b.length\\n var a;\\n var b;\\n if (this.length > num.length) {\\n a = this;\\n b = num;\\n } else {\\n a = num;\\n b = this;\\n }\\n\\n for (var i = 0; i < b.length; i++) {\\n this.words[i] = a.words[i] ^ b.words[i];\\n }\\n\\n if (this !== a) {\\n for (; i < a.length; i++) {\\n this.words[i] = a.words[i];\\n }\\n }\\n\\n this.length = a.length;\\n\\n return this.strip();\\n };\\n\\n BN.prototype.ixor = function ixor (num) {\\n assert((this.negative | num.negative) === 0);\\n return this.iuxor(num);\\n };\\n\\n // Xor `num` with `this`\\n BN.prototype.xor = function xor (num) {\\n if (this.length > num.length) return this.clone().ixor(num);\\n return num.clone().ixor(this);\\n };\\n\\n BN.prototype.uxor = function uxor (num) {\\n if (this.length > num.length) return this.clone().iuxor(num);\\n return num.clone().iuxor(this);\\n };\\n\\n // Not ``this`` with ``width`` bitwidth\\n BN.prototype.inotn = function inotn (width) {\\n assert(typeof width === 'number' && width >= 0);\\n\\n var bytesNeeded = Math.ceil(width / 26) | 0;\\n var bitsLeft = width % 26;\\n\\n // Extend the buffer with leading zeroes\\n this._expand(bytesNeeded);\\n\\n if (bitsLeft > 0) {\\n bytesNeeded--;\\n }\\n\\n // Handle complete words\\n for (var i = 0; i < bytesNeeded; i++) {\\n this.words[i] = ~this.words[i] & 0x3ffffff;\\n }\\n\\n // Handle the residue\\n if (bitsLeft > 0) {\\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\\n }\\n\\n // And remove leading zeroes\\n return this.strip();\\n };\\n\\n BN.prototype.notn = function notn (width) {\\n return this.clone().inotn(width);\\n };\\n\\n // Set `bit` of `this`\\n BN.prototype.setn = function setn (bit, val) {\\n assert(typeof bit === 'number' && bit >= 0);\\n\\n var off = (bit / 26) | 0;\\n var wbit = bit % 26;\\n\\n this._expand(off + 1);\\n\\n if (val) {\\n this.words[off] = this.words[off] | (1 << wbit);\\n } else {\\n this.words[off] = this.words[off] & ~(1 << wbit);\\n }\\n\\n return this.strip();\\n };\\n\\n // Add `num` to `this` in-place\\n BN.prototype.iadd = function iadd (num) {\\n var r;\\n\\n // negative + positive\\n if (this.negative !== 0 && num.negative === 0) {\\n this.negative = 0;\\n r = this.isub(num);\\n this.negative ^= 1;\\n return this._normSign();\\n\\n // positive + negative\\n } else if (this.negative === 0 && num.negative !== 0) {\\n num.negative = 0;\\n r = this.isub(num);\\n num.negative = 1;\\n return r._normSign();\\n }\\n\\n // a.length > b.length\\n var a, b;\\n if (this.length > num.length) {\\n a = this;\\n b = num;\\n } else {\\n a = num;\\n b = this;\\n }\\n\\n var carry = 0;\\n for (var i = 0; i < b.length; i++) {\\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\\n this.words[i] = r & 0x3ffffff;\\n carry = r >>> 26;\\n }\\n for (; carry !== 0 && i < a.length; i++) {\\n r = (a.words[i] | 0) + carry;\\n this.words[i] = r & 0x3ffffff;\\n carry = r >>> 26;\\n }\\n\\n this.length = a.length;\\n if (carry !== 0) {\\n this.words[this.length] = carry;\\n this.length++;\\n // Copy the rest of the words\\n } else if (a !== this) {\\n for (; i < a.length; i++) {\\n this.words[i] = a.words[i];\\n }\\n }\\n\\n return this;\\n };\\n\\n // Add `num` to `this`\\n BN.prototype.add = function add (num) {\\n var res;\\n if (num.negative !== 0 && this.negative === 0) {\\n num.negative = 0;\\n res = this.sub(num);\\n num.negative ^= 1;\\n return res;\\n } else if (num.negative === 0 && this.negative !== 0) {\\n this.negative = 0;\\n res = num.sub(this);\\n this.negative = 1;\\n return res;\\n }\\n\\n if (this.length > num.length) return this.clone().iadd(num);\\n\\n return num.clone().iadd(this);\\n };\\n\\n // Subtract `num` from `this` in-place\\n BN.prototype.isub = function isub (num) {\\n // this - (-num) = this + num\\n if (num.negative !== 0) {\\n num.negative = 0;\\n var r = this.iadd(num);\\n num.negative = 1;\\n return r._normSign();\\n\\n // -this - num = -(this + num)\\n } else if (this.negative !== 0) {\\n this.negative = 0;\\n this.iadd(num);\\n this.negative = 1;\\n return this._normSign();\\n }\\n\\n // At this point both numbers are positive\\n var cmp = this.cmp(num);\\n\\n // Optimization - zeroify\\n if (cmp === 0) {\\n this.negative = 0;\\n this.length = 1;\\n this.words[0] = 0;\\n return this;\\n }\\n\\n // a > b\\n var a, b;\\n if (cmp > 0) {\\n a = this;\\n b = num;\\n } else {\\n a = num;\\n b = this;\\n }\\n\\n var carry = 0;\\n for (var i = 0; i < b.length; i++) {\\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\\n carry = r >> 26;\\n this.words[i] = r & 0x3ffffff;\\n }\\n for (; carry !== 0 && i < a.length; i++) {\\n r = (a.words[i] | 0) + carry;\\n carry = r >> 26;\\n this.words[i] = r & 0x3ffffff;\\n }\\n\\n // Copy rest of the words\\n if (carry === 0 && i < a.length && a !== this) {\\n for (; i < a.length; i++) {\\n this.words[i] = a.words[i];\\n }\\n }\\n\\n this.length = Math.max(this.length, i);\\n\\n if (a !== this) {\\n this.negative = 1;\\n }\\n\\n return this.strip();\\n };\\n\\n // Subtract `num` from `this`\\n BN.prototype.sub = function sub (num) {\\n return this.clone().isub(num);\\n };\\n\\n function smallMulTo (self, num, out) {\\n out.negative = num.negative ^ self.negative;\\n var len = (self.length + num.length) | 0;\\n out.length = len;\\n len = (len - 1) | 0;\\n\\n // Peel one iteration (compiler can't do it, because of code complexity)\\n var a = self.words[0] | 0;\\n var b = num.words[0] | 0;\\n var r = a * b;\\n\\n var lo = r & 0x3ffffff;\\n var carry = (r / 0x4000000) | 0;\\n out.words[0] = lo;\\n\\n for (var k = 1; k < len; k++) {\\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\\n // note that ncarry could be >= 0x3ffffff\\n var ncarry = carry >>> 26;\\n var rword = carry & 0x3ffffff;\\n var maxJ = Math.min(k, num.length - 1);\\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\\n var i = (k - j) | 0;\\n a = self.words[i] | 0;\\n b = num.words[j] | 0;\\n r = a * b + rword;\\n ncarry += (r / 0x4000000) | 0;\\n rword = r & 0x3ffffff;\\n }\\n out.words[k] = rword | 0;\\n carry = ncarry | 0;\\n }\\n if (carry !== 0) {\\n out.words[k] = carry | 0;\\n } else {\\n out.length--;\\n }\\n\\n return out.strip();\\n }\\n\\n // TODO(indutny): it may be reasonable to omit it for users who don't need\\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\\n // multiplication (like elliptic secp256k1).\\n var comb10MulTo = function comb10MulTo (self, num, out) {\\n var a = self.words;\\n var b = num.words;\\n var o = out.words;\\n var c = 0;\\n var lo;\\n var mid;\\n var hi;\\n var a0 = a[0] | 0;\\n var al0 = a0 & 0x1fff;\\n var ah0 = a0 >>> 13;\\n var a1 = a[1] | 0;\\n var al1 = a1 & 0x1fff;\\n var ah1 = a1 >>> 13;\\n var a2 = a[2] | 0;\\n var al2 = a2 & 0x1fff;\\n var ah2 = a2 >>> 13;\\n var a3 = a[3] | 0;\\n var al3 = a3 & 0x1fff;\\n var ah3 = a3 >>> 13;\\n var a4 = a[4] | 0;\\n var al4 = a4 & 0x1fff;\\n var ah4 = a4 >>> 13;\\n var a5 = a[5] | 0;\\n var al5 = a5 & 0x1fff;\\n var ah5 = a5 >>> 13;\\n var a6 = a[6] | 0;\\n var al6 = a6 & 0x1fff;\\n var ah6 = a6 >>> 13;\\n var a7 = a[7] | 0;\\n var al7 = a7 & 0x1fff;\\n var ah7 = a7 >>> 13;\\n var a8 = a[8] | 0;\\n var al8 = a8 & 0x1fff;\\n var ah8 = a8 >>> 13;\\n var a9 = a[9] | 0;\\n var al9 = a9 & 0x1fff;\\n var ah9 = a9 >>> 13;\\n var b0 = b[0] | 0;\\n var bl0 = b0 & 0x1fff;\\n var bh0 = b0 >>> 13;\\n var b1 = b[1] | 0;\\n var bl1 = b1 & 0x1fff;\\n var bh1 = b1 >>> 13;\\n var b2 = b[2] | 0;\\n var bl2 = b2 & 0x1fff;\\n var bh2 = b2 >>> 13;\\n var b3 = b[3] | 0;\\n var bl3 = b3 & 0x1fff;\\n var bh3 = b3 >>> 13;\\n var b4 = b[4] | 0;\\n var bl4 = b4 & 0x1fff;\\n var bh4 = b4 >>> 13;\\n var b5 = b[5] | 0;\\n var bl5 = b5 & 0x1fff;\\n var bh5 = b5 >>> 13;\\n var b6 = b[6] | 0;\\n var bl6 = b6 & 0x1fff;\\n var bh6 = b6 >>> 13;\\n var b7 = b[7] | 0;\\n var bl7 = b7 & 0x1fff;\\n var bh7 = b7 >>> 13;\\n var b8 = b[8] | 0;\\n var bl8 = b8 & 0x1fff;\\n var bh8 = b8 >>> 13;\\n var b9 = b[9] | 0;\\n var bl9 = b9 & 0x1fff;\\n var bh9 = b9 >>> 13;\\n\\n out.negative = self.negative ^ num.negative;\\n out.length = 19;\\n /* k = 0 */\\n lo = Math.imul(al0, bl0);\\n mid = Math.imul(al0, bh0);\\n mid = (mid + Math.imul(ah0, bl0)) | 0;\\n hi = Math.imul(ah0, bh0);\\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\\n w0 &= 0x3ffffff;\\n /* k = 1 */\\n lo = Math.imul(al1, bl0);\\n mid = Math.imul(al1, bh0);\\n mid = (mid + Math.imul(ah1, bl0)) | 0;\\n hi = Math.imul(ah1, bh0);\\n lo = (lo + Math.imul(al0, bl1)) | 0;\\n mid = (mid + Math.imul(al0, bh1)) | 0;\\n mid = (mid + Math.imul(ah0, bl1)) | 0;\\n hi = (hi + Math.imul(ah0, bh1)) | 0;\\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\\n w1 &= 0x3ffffff;\\n /* k = 2 */\\n lo = Math.imul(al2, bl0);\\n mid = Math.imul(al2, bh0);\\n mid = (mid + Math.imul(ah2, bl0)) | 0;\\n hi = Math.imul(ah2, bh0);\\n lo = (lo + Math.imul(al1, bl1)) | 0;\\n mid = (mid + Math.imul(al1, bh1)) | 0;\\n mid = (mid + Math.imul(ah1, bl1)) | 0;\\n hi = (hi + Math.imul(ah1, bh1)) | 0;\\n lo = (lo + Math.imul(al0, bl2)) | 0;\\n mid = (mid + Math.imul(al0, bh2)) | 0;\\n mid = (mid + Math.imul(ah0, bl2)) | 0;\\n hi = (hi + Math.imul(ah0, bh2)) | 0;\\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\\n w2 &= 0x3ffffff;\\n /* k = 3 */\\n lo = Math.imul(al3, bl0);\\n mid = Math.imul(al3, bh0);\\n mid = (mid + Math.imul(ah3, bl0)) | 0;\\n hi = Math.imul(ah3, bh0);\\n lo = (lo + Math.imul(al2, bl1)) | 0;\\n mid = (mid + Math.imul(al2, bh1)) | 0;\\n mid = (mid + Math.imul(ah2, bl1)) | 0;\\n hi = (hi + Math.imul(ah2, bh1)) | 0;\\n lo = (lo + Math.imul(al1, bl2)) | 0;\\n mid = (mid + Math.imul(al1, bh2)) | 0;\\n mid = (mid + Math.imul(ah1, bl2)) | 0;\\n hi = (hi + Math.imul(ah1, bh2)) | 0;\\n lo = (lo + Math.imul(al0, bl3)) | 0;\\n mid = (mid + Math.imul(al0, bh3)) | 0;\\n mid = (mid + Math.imul(ah0, bl3)) | 0;\\n hi = (hi + Math.imul(ah0, bh3)) | 0;\\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\\n w3 &= 0x3ffffff;\\n /* k = 4 */\\n lo = Math.imul(al4, bl0);\\n mid = Math.imul(al4, bh0);\\n mid = (mid + Math.imul(ah4, bl0)) | 0;\\n hi = Math.imul(ah4, bh0);\\n lo = (lo + Math.imul(al3, bl1)) | 0;\\n mid = (mid + Math.imul(al3, bh1)) | 0;\\n mid = (mid + Math.imul(ah3, bl1)) | 0;\\n hi = (hi + Math.imul(ah3, bh1)) | 0;\\n lo = (lo + Math.imul(al2, bl2)) | 0;\\n mid = (mid + Math.imul(al2, bh2)) | 0;\\n mid = (mid + Math.imul(ah2, bl2)) | 0;\\n hi = (hi + Math.imul(ah2, bh2)) | 0;\\n lo = (lo + Math.imul(al1, bl3)) | 0;\\n mid = (mid + Math.imul(al1, bh3)) | 0;\\n mid = (mid + Math.imul(ah1, bl3)) | 0;\\n hi = (hi + Math.imul(ah1, bh3)) | 0;\\n lo = (lo + Math.imul(al0, bl4)) | 0;\\n mid = (mid + Math.imul(al0, bh4)) | 0;\\n mid = (mid + Math.imul(ah0, bl4)) | 0;\\n hi = (hi + Math.imul(ah0, bh4)) | 0;\\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\\n w4 &= 0x3ffffff;\\n /* k = 5 */\\n lo = Math.imul(al5, bl0);\\n mid = Math.imul(al5, bh0);\\n mid = (mid + Math.imul(ah5, bl0)) | 0;\\n hi = Math.imul(ah5, bh0);\\n lo = (lo + Math.imul(al4, bl1)) | 0;\\n mid = (mid + Math.imul(al4, bh1)) | 0;\\n mid = (mid + Math.imul(ah4, bl1)) | 0;\\n hi = (hi + Math.imul(ah4, bh1)) | 0;\\n lo = (lo + Math.imul(al3, bl2)) | 0;\\n mid = (mid + Math.imul(al3, bh2)) | 0;\\n mid = (mid + Math.imul(ah3, bl2)) | 0;\\n hi = (hi + Math.imul(ah3, bh2)) | 0;\\n lo = (lo + Math.imul(al2, bl3)) | 0;\\n mid = (mid + Math.imul(al2, bh3)) | 0;\\n mid = (mid + Math.imul(ah2, bl3)) | 0;\\n hi = (hi + Math.imul(ah2, bh3)) | 0;\\n lo = (lo + Math.imul(al1, bl4)) | 0;\\n mid = (mid + Math.imul(al1, bh4)) | 0;\\n mid = (mid + Math.imul(ah1, bl4)) | 0;\\n hi = (hi + Math.imul(ah1, bh4)) | 0;\\n lo = (lo + Math.imul(al0, bl5)) | 0;\\n mid = (mid + Math.imul(al0, bh5)) | 0;\\n mid = (mid + Math.imul(ah0, bl5)) | 0;\\n hi = (hi + Math.imul(ah0, bh5)) | 0;\\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\\n w5 &= 0x3ffffff;\\n /* k = 6 */\\n lo = Math.imul(al6, bl0);\\n mid = Math.imul(al6, bh0);\\n mid = (mid + Math.imul(ah6, bl0)) | 0;\\n hi = Math.imul(ah6, bh0);\\n lo = (lo + Math.imul(al5, bl1)) | 0;\\n mid = (mid + Math.imul(al5, bh1)) | 0;\\n mid = (mid + Math.imul(ah5, bl1)) | 0;\\n hi = (hi + Math.imul(ah5, bh1)) | 0;\\n lo = (lo + Math.imul(al4, bl2)) | 0;\\n mid = (mid + Math.imul(al4, bh2)) | 0;\\n mid = (mid + Math.imul(ah4, bl2)) | 0;\\n hi = (hi + Math.imul(ah4, bh2)) | 0;\\n lo = (lo + Math.imul(al3, bl3)) | 0;\\n mid = (mid + Math.imul(al3, bh3)) | 0;\\n mid = (mid + Math.imul(ah3, bl3)) | 0;\\n hi = (hi + Math.imul(ah3, bh3)) | 0;\\n lo = (lo + Math.imul(al2, bl4)) | 0;\\n mid = (mid + Math.imul(al2, bh4)) | 0;\\n mid = (mid + Math.imul(ah2, bl4)) | 0;\\n hi = (hi + Math.imul(ah2, bh4)) | 0;\\n lo = (lo + Math.imul(al1, bl5)) | 0;\\n mid = (mid + Math.imul(al1, bh5)) | 0;\\n mid = (mid + Math.imul(ah1, bl5)) | 0;\\n hi = (hi + Math.imul(ah1, bh5)) | 0;\\n lo = (lo + Math.imul(al0, bl6)) | 0;\\n mid = (mid + Math.imul(al0, bh6)) | 0;\\n mid = (mid + Math.imul(ah0, bl6)) | 0;\\n hi = (hi + Math.imul(ah0, bh6)) | 0;\\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\\n w6 &= 0x3ffffff;\\n /* k = 7 */\\n lo = Math.imul(al7, bl0);\\n mid = Math.imul(al7, bh0);\\n mid = (mid + Math.imul(ah7, bl0)) | 0;\\n hi = Math.imul(ah7, bh0);\\n lo = (lo + Math.imul(al6, bl1)) | 0;\\n mid = (mid + Math.imul(al6, bh1)) | 0;\\n mid = (mid + Math.imul(ah6, bl1)) | 0;\\n hi = (hi + Math.imul(ah6, bh1)) | 0;\\n lo = (lo + Math.imul(al5, bl2)) | 0;\\n mid = (mid + Math.imul(al5, bh2)) | 0;\\n mid = (mid + Math.imul(ah5, bl2)) | 0;\\n hi = (hi + Math.imul(ah5, bh2)) | 0;\\n lo = (lo + Math.imul(al4, bl3)) | 0;\\n mid = (mid + Math.imul(al4, bh3)) | 0;\\n mid = (mid + Math.imul(ah4, bl3)) | 0;\\n hi = (hi + Math.imul(ah4, bh3)) | 0;\\n lo = (lo + Math.imul(al3, bl4)) | 0;\\n mid = (mid + Math.imul(al3, bh4)) | 0;\\n mid = (mid + Math.imul(ah3, bl4)) | 0;\\n hi = (hi + Math.imul(ah3, bh4)) | 0;\\n lo = (lo + Math.imul(al2, bl5)) | 0;\\n mid = (mid + Math.imul(al2, bh5)) | 0;\\n mid = (mid + Math.imul(ah2, bl5)) | 0;\\n hi = (hi + Math.imul(ah2, bh5)) | 0;\\n lo = (lo + Math.imul(al1, bl6)) | 0;\\n mid = (mid + Math.imul(al1, bh6)) | 0;\\n mid = (mid + Math.imul(ah1, bl6)) | 0;\\n hi = (hi + Math.imul(ah1, bh6)) | 0;\\n lo = (lo + Math.imul(al0, bl7)) | 0;\\n mid = (mid + Math.imul(al0, bh7)) | 0;\\n mid = (mid + Math.imul(ah0, bl7)) | 0;\\n hi = (hi + Math.imul(ah0, bh7)) | 0;\\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\\n w7 &= 0x3ffffff;\\n /* k = 8 */\\n lo = Math.imul(al8, bl0);\\n mid = Math.imul(al8, bh0);\\n mid = (mid + Math.imul(ah8, bl0)) | 0;\\n hi = Math.imul(ah8, bh0);\\n lo = (lo + Math.imul(al7, bl1)) | 0;\\n mid = (mid + Math.imul(al7, bh1)) | 0;\\n mid = (mid + Math.imul(ah7, bl1)) | 0;\\n hi = (hi + Math.imul(ah7, bh1)) | 0;\\n lo = (lo + Math.imul(al6, bl2)) | 0;\\n mid = (mid + Math.imul(al6, bh2)) | 0;\\n mid = (mid + Math.imul(ah6, bl2)) | 0;\\n hi = (hi + Math.imul(ah6, bh2)) | 0;\\n lo = (lo + Math.imul(al5, bl3)) | 0;\\n mid = (mid + Math.imul(al5, bh3)) | 0;\\n mid = (mid + Math.imul(ah5, bl3)) | 0;\\n hi = (hi + Math.imul(ah5, bh3)) | 0;\\n lo = (lo + Math.imul(al4, bl4)) | 0;\\n mid = (mid + Math.imul(al4, bh4)) | 0;\\n mid = (mid + Math.imul(ah4, bl4)) | 0;\\n hi = (hi + Math.imul(ah4, bh4)) | 0;\\n lo = (lo + Math.imul(al3, bl5)) | 0;\\n mid = (mid + Math.imul(al3, bh5)) | 0;\\n mid = (mid + Math.imul(ah3, bl5)) | 0;\\n hi = (hi + Math.imul(ah3, bh5)) | 0;\\n lo = (lo + Math.imul(al2, bl6)) | 0;\\n mid = (mid + Math.imul(al2, bh6)) | 0;\\n mid = (mid + Math.imul(ah2, bl6)) | 0;\\n hi = (hi + Math.imul(ah2, bh6)) | 0;\\n lo = (lo + Math.imul(al1, bl7)) | 0;\\n mid = (mid + Math.imul(al1, bh7)) | 0;\\n mid = (mid + Math.imul(ah1, bl7)) | 0;\\n hi = (hi + Math.imul(ah1, bh7)) | 0;\\n lo = (lo + Math.imul(al0, bl8)) | 0;\\n mid = (mid + Math.imul(al0, bh8)) | 0;\\n mid = (mid + Math.imul(ah0, bl8)) | 0;\\n hi = (hi + Math.imul(ah0, bh8)) | 0;\\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\\n w8 &= 0x3ffffff;\\n /* k = 9 */\\n lo = Math.imul(al9, bl0);\\n mid = Math.imul(al9, bh0);\\n mid = (mid + Math.imul(ah9, bl0)) | 0;\\n hi = Math.imul(ah9, bh0);\\n lo = (lo + Math.imul(al8, bl1)) | 0;\\n mid = (mid + Math.imul(al8, bh1)) | 0;\\n mid = (mid + Math.imul(ah8, bl1)) | 0;\\n hi = (hi + Math.imul(ah8, bh1)) | 0;\\n lo = (lo + Math.imul(al7, bl2)) | 0;\\n mid = (mid + Math.imul(al7, bh2)) | 0;\\n mid = (mid + Math.imul(ah7, bl2)) | 0;\\n hi = (hi + Math.imul(ah7, bh2)) | 0;\\n lo = (lo + Math.imul(al6, bl3)) | 0;\\n mid = (mid + Math.imul(al6, bh3)) | 0;\\n mid = (mid + Math.imul(ah6, bl3)) | 0;\\n hi = (hi + Math.imul(ah6, bh3)) | 0;\\n lo = (lo + Math.imul(al5, bl4)) | 0;\\n mid = (mid + Math.imul(al5, bh4)) | 0;\\n mid = (mid + Math.imul(ah5, bl4)) | 0;\\n hi = (hi + Math.imul(ah5, bh4)) | 0;\\n lo = (lo + Math.imul(al4, bl5)) | 0;\\n mid = (mid + Math.imul(al4, bh5)) | 0;\\n mid = (mid + Math.imul(ah4, bl5)) | 0;\\n hi = (hi + Math.imul(ah4, bh5)) | 0;\\n lo = (lo + Math.imul(al3, bl6)) | 0;\\n mid = (mid + Math.imul(al3, bh6)) | 0;\\n mid = (mid + Math.imul(ah3, bl6)) | 0;\\n hi = (hi + Math.imul(ah3, bh6)) | 0;\\n lo = (lo + Math.imul(al2, bl7)) | 0;\\n mid = (mid + Math.imul(al2, bh7)) | 0;\\n mid = (mid + Math.imul(ah2, bl7)) | 0;\\n hi = (hi + Math.imul(ah2, bh7)) | 0;\\n lo = (lo + Math.imul(al1, bl8)) | 0;\\n mid = (mid + Math.imul(al1, bh8)) | 0;\\n mid = (mid + Math.imul(ah1, bl8)) | 0;\\n hi = (hi + Math.imul(ah1, bh8)) | 0;\\n lo = (lo + Math.imul(al0, bl9)) | 0;\\n mid = (mid + Math.imul(al0, bh9)) | 0;\\n mid = (mid + Math.imul(ah0, bl9)) | 0;\\n hi = (hi + Math.imul(ah0, bh9)) | 0;\\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\\n w9 &= 0x3ffffff;\\n /* k = 10 */\\n lo = Math.imul(al9, bl1);\\n mid = Math.imul(al9, bh1);\\n mid = (mid + Math.imul(ah9, bl1)) | 0;\\n hi = Math.imul(ah9, bh1);\\n lo = (lo + Math.imul(al8, bl2)) | 0;\\n mid = (mid + Math.imul(al8, bh2)) | 0;\\n mid = (mid + Math.imul(ah8, bl2)) | 0;\\n hi = (hi + Math.imul(ah8, bh2)) | 0;\\n lo = (lo + Math.imul(al7, bl3)) | 0;\\n mid = (mid + Math.imul(al7, bh3)) | 0;\\n mid = (mid + Math.imul(ah7, bl3)) | 0;\\n hi = (hi + Math.imul(ah7, bh3)) | 0;\\n lo = (lo + Math.imul(al6, bl4)) | 0;\\n mid = (mid + Math.imul(al6, bh4)) | 0;\\n mid = (mid + Math.imul(ah6, bl4)) | 0;\\n hi = (hi + Math.imul(ah6, bh4)) | 0;\\n lo = (lo + Math.imul(al5, bl5)) | 0;\\n mid = (mid + Math.imul(al5, bh5)) | 0;\\n mid = (mid + Math.imul(ah5, bl5)) | 0;\\n hi = (hi + Math.imul(ah5, bh5)) | 0;\\n lo = (lo + Math.imul(al4, bl6)) | 0;\\n mid = (mid + Math.imul(al4, bh6)) | 0;\\n mid = (mid + Math.imul(ah4, bl6)) | 0;\\n hi = (hi + Math.imul(ah4, bh6)) | 0;\\n lo = (lo + Math.imul(al3, bl7)) | 0;\\n mid = (mid + Math.imul(al3, bh7)) | 0;\\n mid = (mid + Math.imul(ah3, bl7)) | 0;\\n hi = (hi + Math.imul(ah3, bh7)) | 0;\\n lo = (lo + Math.imul(al2, bl8)) | 0;\\n mid = (mid + Math.imul(al2, bh8)) | 0;\\n mid = (mid + Math.imul(ah2, bl8)) | 0;\\n hi = (hi + Math.imul(ah2, bh8)) | 0;\\n lo = (lo + Math.imul(al1, bl9)) | 0;\\n mid = (mid + Math.imul(al1, bh9)) | 0;\\n mid = (mid + Math.imul(ah1, bl9)) | 0;\\n hi = (hi + Math.imul(ah1, bh9)) | 0;\\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\\n w10 &= 0x3ffffff;\\n /* k = 11 */\\n lo = Math.imul(al9, bl2);\\n mid = Math.imul(al9, bh2);\\n mid = (mid + Math.imul(ah9, bl2)) | 0;\\n hi = Math.imul(ah9, bh2);\\n lo = (lo + Math.imul(al8, bl3)) | 0;\\n mid = (mid + Math.imul(al8, bh3)) | 0;\\n mid = (mid + Math.imul(ah8, bl3)) | 0;\\n hi = (hi + Math.imul(ah8, bh3)) | 0;\\n lo = (lo + Math.imul(al7, bl4)) | 0;\\n mid = (mid + Math.imul(al7, bh4)) | 0;\\n mid = (mid + Math.imul(ah7, bl4)) | 0;\\n hi = (hi + Math.imul(ah7, bh4)) | 0;\\n lo = (lo + Math.imul(al6, bl5)) | 0;\\n mid = (mid + Math.imul(al6, bh5)) | 0;\\n mid = (mid + Math.imul(ah6, bl5)) | 0;\\n hi = (hi + Math.imul(ah6, bh5)) | 0;\\n lo = (lo + Math.imul(al5, bl6)) | 0;\\n mid = (mid + Math.imul(al5, bh6)) | 0;\\n mid = (mid + Math.imul(ah5, bl6)) | 0;\\n hi = (hi + Math.imul(ah5, bh6)) | 0;\\n lo = (lo + Math.imul(al4, bl7)) | 0;\\n mid = (mid + Math.imul(al4, bh7)) | 0;\\n mid = (mid + Math.imul(ah4, bl7)) | 0;\\n hi = (hi + Math.imul(ah4, bh7)) | 0;\\n lo = (lo + Math.imul(al3, bl8)) | 0;\\n mid = (mid + Math.imul(al3, bh8)) | 0;\\n mid = (mid + Math.imul(ah3, bl8)) | 0;\\n hi = (hi + Math.imul(ah3, bh8)) | 0;\\n lo = (lo + Math.imul(al2, bl9)) | 0;\\n mid = (mid + Math.imul(al2, bh9)) | 0;\\n mid = (mid + Math.imul(ah2, bl9)) | 0;\\n hi = (hi + Math.imul(ah2, bh9)) | 0;\\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\\n w11 &= 0x3ffffff;\\n /* k = 12 */\\n lo = Math.imul(al9, bl3);\\n mid = Math.imul(al9, bh3);\\n mid = (mid + Math.imul(ah9, bl3)) | 0;\\n hi = Math.imul(ah9, bh3);\\n lo = (lo + Math.imul(al8, bl4)) | 0;\\n mid = (mid + Math.imul(al8, bh4)) | 0;\\n mid = (mid + Math.imul(ah8, bl4)) | 0;\\n hi = (hi + Math.imul(ah8, bh4)) | 0;\\n lo = (lo + Math.imul(al7, bl5)) | 0;\\n mid = (mid + Math.imul(al7, bh5)) | 0;\\n mid = (mid + Math.imul(ah7, bl5)) | 0;\\n hi = (hi + Math.imul(ah7, bh5)) | 0;\\n lo = (lo + Math.imul(al6, bl6)) | 0;\\n mid = (mid + Math.imul(al6, bh6)) | 0;\\n mid = (mid + Math.imul(ah6, bl6)) | 0;\\n hi = (hi + Math.imul(ah6, bh6)) | 0;\\n lo = (lo + Math.imul(al5, bl7)) | 0;\\n mid = (mid + Math.imul(al5, bh7)) | 0;\\n mid = (mid + Math.imul(ah5, bl7)) | 0;\\n hi = (hi + Math.imul(ah5, bh7)) | 0;\\n lo = (lo + Math.imul(al4, bl8)) | 0;\\n mid = (mid + Math.imul(al4, bh8)) | 0;\\n mid = (mid + Math.imul(ah4, bl8)) | 0;\\n hi = (hi + Math.imul(ah4, bh8)) | 0;\\n lo = (lo + Math.imul(al3, bl9)) | 0;\\n mid = (mid + Math.imul(al3, bh9)) | 0;\\n mid = (mid + Math.imul(ah3, bl9)) | 0;\\n hi = (hi + Math.imul(ah3, bh9)) | 0;\\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\\n w12 &= 0x3ffffff;\\n /* k = 13 */\\n lo = Math.imul(al9, bl4);\\n mid = Math.imul(al9, bh4);\\n mid = (mid + Math.imul(ah9, bl4)) | 0;\\n hi = Math.imul(ah9, bh4);\\n lo = (lo + Math.imul(al8, bl5)) | 0;\\n mid = (mid + Math.imul(al8, bh5)) | 0;\\n mid = (mid + Math.imul(ah8, bl5)) | 0;\\n hi = (hi + Math.imul(ah8, bh5)) | 0;\\n lo = (lo + Math.imul(al7, bl6)) | 0;\\n mid = (mid + Math.imul(al7, bh6)) | 0;\\n mid = (mid + Math.imul(ah7, bl6)) | 0;\\n hi = (hi + Math.imul(ah7, bh6)) | 0;\\n lo = (lo + Math.imul(al6, bl7)) | 0;\\n mid = (mid + Math.imul(al6, bh7)) | 0;\\n mid = (mid + Math.imul(ah6, bl7)) | 0;\\n hi = (hi + Math.imul(ah6, bh7)) | 0;\\n lo = (lo + Math.imul(al5, bl8)) | 0;\\n mid = (mid + Math.imul(al5, bh8)) | 0;\\n mid = (mid + Math.imul(ah5, bl8)) | 0;\\n hi = (hi + Math.imul(ah5, bh8)) | 0;\\n lo = (lo + Math.imul(al4, bl9)) | 0;\\n mid = (mid + Math.imul(al4, bh9)) | 0;\\n mid = (mid + Math.imul(ah4, bl9)) | 0;\\n hi = (hi + Math.imul(ah4, bh9)) | 0;\\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\\n w13 &= 0x3ffffff;\\n /* k = 14 */\\n lo = Math.imul(al9, bl5);\\n mid = Math.imul(al9, bh5);\\n mid = (mid + Math.imul(ah9, bl5)) | 0;\\n hi = Math.imul(ah9, bh5);\\n lo = (lo + Math.imul(al8, bl6)) | 0;\\n mid = (mid + Math.imul(al8, bh6)) | 0;\\n mid = (mid + Math.imul(ah8, bl6)) | 0;\\n hi = (hi + Math.imul(ah8, bh6)) | 0;\\n lo = (lo + Math.imul(al7, bl7)) | 0;\\n mid = (mid + Math.imul(al7, bh7)) | 0;\\n mid = (mid + Math.imul(ah7, bl7)) | 0;\\n hi = (hi + Math.imul(ah7, bh7)) | 0;\\n lo = (lo + Math.imul(al6, bl8)) | 0;\\n mid = (mid + Math.imul(al6, bh8)) | 0;\\n mid = (mid + Math.imul(ah6, bl8)) | 0;\\n hi = (hi + Math.imul(ah6, bh8)) | 0;\\n lo = (lo + Math.imul(al5, bl9)) | 0;\\n mid = (mid + Math.imul(al5, bh9)) | 0;\\n mid = (mid + Math.imul(ah5, bl9)) | 0;\\n hi = (hi + Math.imul(ah5, bh9)) | 0;\\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\\n w14 &= 0x3ffffff;\\n /* k = 15 */\\n lo = Math.imul(al9, bl6);\\n mid = Math.imul(al9, bh6);\\n mid = (mid + Math.imul(ah9, bl6)) | 0;\\n hi = Math.imul(ah9, bh6);\\n lo = (lo + Math.imul(al8, bl7)) | 0;\\n mid = (mid + Math.imul(al8, bh7)) | 0;\\n mid = (mid + Math.imul(ah8, bl7)) | 0;\\n hi = (hi + Math.imul(ah8, bh7)) | 0;\\n lo = (lo + Math.imul(al7, bl8)) | 0;\\n mid = (mid + Math.imul(al7, bh8)) | 0;\\n mid = (mid + Math.imul(ah7, bl8)) | 0;\\n hi = (hi + Math.imul(ah7, bh8)) | 0;\\n lo = (lo + Math.imul(al6, bl9)) | 0;\\n mid = (mid + Math.imul(al6, bh9)) | 0;\\n mid = (mid + Math.imul(ah6, bl9)) | 0;\\n hi = (hi + Math.imul(ah6, bh9)) | 0;\\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\\n w15 &= 0x3ffffff;\\n /* k = 16 */\\n lo = Math.imul(al9, bl7);\\n mid = Math.imul(al9, bh7);\\n mid = (mid + Math.imul(ah9, bl7)) | 0;\\n hi = Math.imul(ah9, bh7);\\n lo = (lo + Math.imul(al8, bl8)) | 0;\\n mid = (mid + Math.imul(al8, bh8)) | 0;\\n mid = (mid + Math.imul(ah8, bl8)) | 0;\\n hi = (hi + Math.imul(ah8, bh8)) | 0;\\n lo = (lo + Math.imul(al7, bl9)) | 0;\\n mid = (mid + Math.imul(al7, bh9)) | 0;\\n mid = (mid + Math.imul(ah7, bl9)) | 0;\\n hi = (hi + Math.imul(ah7, bh9)) | 0;\\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\\n w16 &= 0x3ffffff;\\n /* k = 17 */\\n lo = Math.imul(al9, bl8);\\n mid = Math.imul(al9, bh8);\\n mid = (mid + Math.imul(ah9, bl8)) | 0;\\n hi = Math.imul(ah9, bh8);\\n lo = (lo + Math.imul(al8, bl9)) | 0;\\n mid = (mid + Math.imul(al8, bh9)) | 0;\\n mid = (mid + Math.imul(ah8, bl9)) | 0;\\n hi = (hi + Math.imul(ah8, bh9)) | 0;\\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\\n w17 &= 0x3ffffff;\\n /* k = 18 */\\n lo = Math.imul(al9, bl9);\\n mid = Math.imul(al9, bh9);\\n mid = (mid + Math.imul(ah9, bl9)) | 0;\\n hi = Math.imul(ah9, bh9);\\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\\n w18 &= 0x3ffffff;\\n o[0] = w0;\\n o[1] = w1;\\n o[2] = w2;\\n o[3] = w3;\\n o[4] = w4;\\n o[5] = w5;\\n o[6] = w6;\\n o[7] = w7;\\n o[8] = w8;\\n o[9] = w9;\\n o[10] = w10;\\n o[11] = w11;\\n o[12] = w12;\\n o[13] = w13;\\n o[14] = w14;\\n o[15] = w15;\\n o[16] = w16;\\n o[17] = w17;\\n o[18] = w18;\\n if (c !== 0) {\\n o[19] = c;\\n out.length++;\\n }\\n return out;\\n };\\n\\n // Polyfill comb\\n if (!Math.imul) {\\n comb10MulTo = smallMulTo;\\n }\\n\\n function bigMulTo (self, num, out) {\\n out.negative = num.negative ^ self.negative;\\n out.length = self.length + num.length;\\n\\n var carry = 0;\\n var hncarry = 0;\\n for (var k = 0; k < out.length - 1; k++) {\\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\\n // note that ncarry could be >= 0x3ffffff\\n var ncarry = hncarry;\\n hncarry = 0;\\n var rword = carry & 0x3ffffff;\\n var maxJ = Math.min(k, num.length - 1);\\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\\n var i = k - j;\\n var a = self.words[i] | 0;\\n var b = num.words[j] | 0;\\n var r = a * b;\\n\\n var lo = r & 0x3ffffff;\\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\\n lo = (lo + rword) | 0;\\n rword = lo & 0x3ffffff;\\n ncarry = (ncarry + (lo >>> 26)) | 0;\\n\\n hncarry += ncarry >>> 26;\\n ncarry &= 0x3ffffff;\\n }\\n out.words[k] = rword;\\n carry = ncarry;\\n ncarry = hncarry;\\n }\\n if (carry !== 0) {\\n out.words[k] = carry;\\n } else {\\n out.length--;\\n }\\n\\n return out.strip();\\n }\\n\\n function jumboMulTo (self, num, out) {\\n var fftm = new FFTM();\\n return fftm.mulp(self, num, out);\\n }\\n\\n BN.prototype.mulTo = function mulTo (num, out) {\\n var res;\\n var len = this.length + num.length;\\n if (this.length === 10 && num.length === 10) {\\n res = comb10MulTo(this, num, out);\\n } else if (len < 63) {\\n res = smallMulTo(this, num, out);\\n } else if (len < 1024) {\\n res = bigMulTo(this, num, out);\\n } else {\\n res = jumboMulTo(this, num, out);\\n }\\n\\n return res;\\n };\\n\\n // Cooley-Tukey algorithm for FFT\\n // slightly revisited to rely on looping instead of recursion\\n\\n function FFTM (x, y) {\\n this.x = x;\\n this.y = y;\\n }\\n\\n FFTM.prototype.makeRBT = function makeRBT (N) {\\n var t = new Array(N);\\n var l = BN.prototype._countBits(N) - 1;\\n for (var i = 0; i < N; i++) {\\n t[i] = this.revBin(i, l, N);\\n }\\n\\n return t;\\n };\\n\\n // Returns binary-reversed representation of `x`\\n FFTM.prototype.revBin = function revBin (x, l, N) {\\n if (x === 0 || x === N - 1) return x;\\n\\n var rb = 0;\\n for (var i = 0; i < l; i++) {\\n rb |= (x & 1) << (l - i - 1);\\n x >>= 1;\\n }\\n\\n return rb;\\n };\\n\\n // Performs \\\"tweedling\\\" phase, therefore 'emulating'\\n // behaviour of the recursive algorithm\\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\\n for (var i = 0; i < N; i++) {\\n rtws[i] = rws[rbt[i]];\\n itws[i] = iws[rbt[i]];\\n }\\n };\\n\\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\\n this.permute(rbt, rws, iws, rtws, itws, N);\\n\\n for (var s = 1; s < N; s <<= 1) {\\n var l = s << 1;\\n\\n var rtwdf = Math.cos(2 * Math.PI / l);\\n var itwdf = Math.sin(2 * Math.PI / l);\\n\\n for (var p = 0; p < N; p += l) {\\n var rtwdf_ = rtwdf;\\n var itwdf_ = itwdf;\\n\\n for (var j = 0; j < s; j++) {\\n var re = rtws[p + j];\\n var ie = itws[p + j];\\n\\n var ro = rtws[p + j + s];\\n var io = itws[p + j + s];\\n\\n var rx = rtwdf_ * ro - itwdf_ * io;\\n\\n io = rtwdf_ * io + itwdf_ * ro;\\n ro = rx;\\n\\n rtws[p + j] = re + ro;\\n itws[p + j] = ie + io;\\n\\n rtws[p + j + s] = re - ro;\\n itws[p + j + s] = ie - io;\\n\\n /* jshint maxdepth : false */\\n if (j !== l) {\\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\\n\\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\\n rtwdf_ = rx;\\n }\\n }\\n }\\n }\\n };\\n\\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\\n var N = Math.max(m, n) | 1;\\n var odd = N & 1;\\n var i = 0;\\n for (N = N / 2 | 0; N; N = N >>> 1) {\\n i++;\\n }\\n\\n return 1 << i + 1 + odd;\\n };\\n\\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\\n if (N <= 1) return;\\n\\n for (var i = 0; i < N / 2; i++) {\\n var t = rws[i];\\n\\n rws[i] = rws[N - i - 1];\\n rws[N - i - 1] = t;\\n\\n t = iws[i];\\n\\n iws[i] = -iws[N - i - 1];\\n iws[N - i - 1] = -t;\\n }\\n };\\n\\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\\n var carry = 0;\\n for (var i = 0; i < N / 2; i++) {\\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\\n Math.round(ws[2 * i] / N) +\\n carry;\\n\\n ws[i] = w & 0x3ffffff;\\n\\n if (w < 0x4000000) {\\n carry = 0;\\n } else {\\n carry = w / 0x4000000 | 0;\\n }\\n }\\n\\n return ws;\\n };\\n\\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\\n var carry = 0;\\n for (var i = 0; i < len; i++) {\\n carry = carry + (ws[i] | 0);\\n\\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\\n }\\n\\n // Pad with zeroes\\n for (i = 2 * len; i < N; ++i) {\\n rws[i] = 0;\\n }\\n\\n assert(carry === 0);\\n assert((carry & ~0x1fff) === 0);\\n };\\n\\n FFTM.prototype.stub = function stub (N) {\\n var ph = new Array(N);\\n for (var i = 0; i < N; i++) {\\n ph[i] = 0;\\n }\\n\\n return ph;\\n };\\n\\n FFTM.prototype.mulp = function mulp (x, y, out) {\\n var N = 2 * this.guessLen13b(x.length, y.length);\\n\\n var rbt = this.makeRBT(N);\\n\\n var _ = this.stub(N);\\n\\n var rws = new Array(N);\\n var rwst = new Array(N);\\n var iwst = new Array(N);\\n\\n var nrws = new Array(N);\\n var nrwst = new Array(N);\\n var niwst = new Array(N);\\n\\n var rmws = out.words;\\n rmws.length = N;\\n\\n this.convert13b(x.words, x.length, rws, N);\\n this.convert13b(y.words, y.length, nrws, N);\\n\\n this.transform(rws, _, rwst, iwst, N, rbt);\\n this.transform(nrws, _, nrwst, niwst, N, rbt);\\n\\n for (var i = 0; i < N; i++) {\\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\\n rwst[i] = rx;\\n }\\n\\n this.conjugate(rwst, iwst, N);\\n this.transform(rwst, iwst, rmws, _, N, rbt);\\n this.conjugate(rmws, _, N);\\n this.normalize13b(rmws, N);\\n\\n out.negative = x.negative ^ y.negative;\\n out.length = x.length + y.length;\\n return out.strip();\\n };\\n\\n // Multiply `this` by `num`\\n BN.prototype.mul = function mul (num) {\\n var out = new BN(null);\\n out.words = new Array(this.length + num.length);\\n return this.mulTo(num, out);\\n };\\n\\n // Multiply employing FFT\\n BN.prototype.mulf = function mulf (num) {\\n var out = new BN(null);\\n out.words = new Array(this.length + num.length);\\n return jumboMulTo(this, num, out);\\n };\\n\\n // In-place Multiplication\\n BN.prototype.imul = function imul (num) {\\n return this.clone().mulTo(num, this);\\n };\\n\\n BN.prototype.imuln = function imuln (num) {\\n assert(typeof num === 'number');\\n assert(num < 0x4000000);\\n\\n // Carry\\n var carry = 0;\\n for (var i = 0; i < this.length; i++) {\\n var w = (this.words[i] | 0) * num;\\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\\n carry >>= 26;\\n carry += (w / 0x4000000) | 0;\\n // NOTE: lo is 27bit maximum\\n carry += lo >>> 26;\\n this.words[i] = lo & 0x3ffffff;\\n }\\n\\n if (carry !== 0) {\\n this.words[i] = carry;\\n this.length++;\\n }\\n\\n return this;\\n };\\n\\n BN.prototype.muln = function muln (num) {\\n return this.clone().imuln(num);\\n };\\n\\n // `this` * `this`\\n BN.prototype.sqr = function sqr () {\\n return this.mul(this);\\n };\\n\\n // `this` * `this` in-place\\n BN.prototype.isqr = function isqr () {\\n return this.imul(this.clone());\\n };\\n\\n // Math.pow(`this`, `num`)\\n BN.prototype.pow = function pow (num) {\\n var w = toBitArray(num);\\n if (w.length === 0) return new BN(1);\\n\\n // Skip leading zeroes\\n var res = this;\\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\\n if (w[i] !== 0) break;\\n }\\n\\n if (++i < w.length) {\\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\\n if (w[i] === 0) continue;\\n\\n res = res.mul(q);\\n }\\n }\\n\\n return res;\\n };\\n\\n // Shift-left in-place\\n BN.prototype.iushln = function iushln (bits) {\\n assert(typeof bits === 'number' && bits >= 0);\\n var r = bits % 26;\\n var s = (bits - r) / 26;\\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\\n var i;\\n\\n if (r !== 0) {\\n var carry = 0;\\n\\n for (i = 0; i < this.length; i++) {\\n var newCarry = this.words[i] & carryMask;\\n var c = ((this.words[i] | 0) - newCarry) << r;\\n this.words[i] = c | carry;\\n carry = newCarry >>> (26 - r);\\n }\\n\\n if (carry) {\\n this.words[i] = carry;\\n this.length++;\\n }\\n }\\n\\n if (s !== 0) {\\n for (i = this.length - 1; i >= 0; i--) {\\n this.words[i + s] = this.words[i];\\n }\\n\\n for (i = 0; i < s; i++) {\\n this.words[i] = 0;\\n }\\n\\n this.length += s;\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.ishln = function ishln (bits) {\\n // TODO(indutny): implement me\\n assert(this.negative === 0);\\n return this.iushln(bits);\\n };\\n\\n // Shift-right in-place\\n // NOTE: `hint` is a lowest bit before trailing zeroes\\n // NOTE: if `extended` is present - it will be filled with destroyed bits\\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\\n assert(typeof bits === 'number' && bits >= 0);\\n var h;\\n if (hint) {\\n h = (hint - (hint % 26)) / 26;\\n } else {\\n h = 0;\\n }\\n\\n var r = bits % 26;\\n var s = Math.min((bits - r) / 26, this.length);\\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\\n var maskedWords = extended;\\n\\n h -= s;\\n h = Math.max(0, h);\\n\\n // Extended mode, copy masked part\\n if (maskedWords) {\\n for (var i = 0; i < s; i++) {\\n maskedWords.words[i] = this.words[i];\\n }\\n maskedWords.length = s;\\n }\\n\\n if (s === 0) {\\n // No-op, we should not move anything at all\\n } else if (this.length > s) {\\n this.length -= s;\\n for (i = 0; i < this.length; i++) {\\n this.words[i] = this.words[i + s];\\n }\\n } else {\\n this.words[0] = 0;\\n this.length = 1;\\n }\\n\\n var carry = 0;\\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\\n var word = this.words[i] | 0;\\n this.words[i] = (carry << (26 - r)) | (word >>> r);\\n carry = word & mask;\\n }\\n\\n // Push carried bits as a mask\\n if (maskedWords && carry !== 0) {\\n maskedWords.words[maskedWords.length++] = carry;\\n }\\n\\n if (this.length === 0) {\\n this.words[0] = 0;\\n this.length = 1;\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\\n // TODO(indutny): implement me\\n assert(this.negative === 0);\\n return this.iushrn(bits, hint, extended);\\n };\\n\\n // Shift-left\\n BN.prototype.shln = function shln (bits) {\\n return this.clone().ishln(bits);\\n };\\n\\n BN.prototype.ushln = function ushln (bits) {\\n return this.clone().iushln(bits);\\n };\\n\\n // Shift-right\\n BN.prototype.shrn = function shrn (bits) {\\n return this.clone().ishrn(bits);\\n };\\n\\n BN.prototype.ushrn = function ushrn (bits) {\\n return this.clone().iushrn(bits);\\n };\\n\\n // Test if n bit is set\\n BN.prototype.testn = function testn (bit) {\\n assert(typeof bit === 'number' && bit >= 0);\\n var r = bit % 26;\\n var s = (bit - r) / 26;\\n var q = 1 << r;\\n\\n // Fast case: bit is much higher than all existing words\\n if (this.length <= s) return false;\\n\\n // Check bit and return\\n var w = this.words[s];\\n\\n return !!(w & q);\\n };\\n\\n // Return only lowers bits of number (in-place)\\n BN.prototype.imaskn = function imaskn (bits) {\\n assert(typeof bits === 'number' && bits >= 0);\\n var r = bits % 26;\\n var s = (bits - r) / 26;\\n\\n assert(this.negative === 0, 'imaskn works only with positive numbers');\\n\\n if (this.length <= s) {\\n return this;\\n }\\n\\n if (r !== 0) {\\n s++;\\n }\\n this.length = Math.min(s, this.length);\\n\\n if (r !== 0) {\\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\\n this.words[this.length - 1] &= mask;\\n }\\n\\n return this.strip();\\n };\\n\\n // Return only lowers bits of number\\n BN.prototype.maskn = function maskn (bits) {\\n return this.clone().imaskn(bits);\\n };\\n\\n // Add plain number `num` to `this`\\n BN.prototype.iaddn = function iaddn (num) {\\n assert(typeof num === 'number');\\n assert(num < 0x4000000);\\n if (num < 0) return this.isubn(-num);\\n\\n // Possible sign change\\n if (this.negative !== 0) {\\n if (this.length === 1 && (this.words[0] | 0) < num) {\\n this.words[0] = num - (this.words[0] | 0);\\n this.negative = 0;\\n return this;\\n }\\n\\n this.negative = 0;\\n this.isubn(num);\\n this.negative = 1;\\n return this;\\n }\\n\\n // Add without checks\\n return this._iaddn(num);\\n };\\n\\n BN.prototype._iaddn = function _iaddn (num) {\\n this.words[0] += num;\\n\\n // Carry\\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\\n this.words[i] -= 0x4000000;\\n if (i === this.length - 1) {\\n this.words[i + 1] = 1;\\n } else {\\n this.words[i + 1]++;\\n }\\n }\\n this.length = Math.max(this.length, i + 1);\\n\\n return this;\\n };\\n\\n // Subtract plain number `num` from `this`\\n BN.prototype.isubn = function isubn (num) {\\n assert(typeof num === 'number');\\n assert(num < 0x4000000);\\n if (num < 0) return this.iaddn(-num);\\n\\n if (this.negative !== 0) {\\n this.negative = 0;\\n this.iaddn(num);\\n this.negative = 1;\\n return this;\\n }\\n\\n this.words[0] -= num;\\n\\n if (this.length === 1 && this.words[0] < 0) {\\n this.words[0] = -this.words[0];\\n this.negative = 1;\\n } else {\\n // Carry\\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\\n this.words[i] += 0x4000000;\\n this.words[i + 1] -= 1;\\n }\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.addn = function addn (num) {\\n return this.clone().iaddn(num);\\n };\\n\\n BN.prototype.subn = function subn (num) {\\n return this.clone().isubn(num);\\n };\\n\\n BN.prototype.iabs = function iabs () {\\n this.negative = 0;\\n\\n return this;\\n };\\n\\n BN.prototype.abs = function abs () {\\n return this.clone().iabs();\\n };\\n\\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\\n var len = num.length + shift;\\n var i;\\n\\n this._expand(len);\\n\\n var w;\\n var carry = 0;\\n for (i = 0; i < num.length; i++) {\\n w = (this.words[i + shift] | 0) + carry;\\n var right = (num.words[i] | 0) * mul;\\n w -= right & 0x3ffffff;\\n carry = (w >> 26) - ((right / 0x4000000) | 0);\\n this.words[i + shift] = w & 0x3ffffff;\\n }\\n for (; i < this.length - shift; i++) {\\n w = (this.words[i + shift] | 0) + carry;\\n carry = w >> 26;\\n this.words[i + shift] = w & 0x3ffffff;\\n }\\n\\n if (carry === 0) return this.strip();\\n\\n // Subtraction overflow\\n assert(carry === -1);\\n carry = 0;\\n for (i = 0; i < this.length; i++) {\\n w = -(this.words[i] | 0) + carry;\\n carry = w >> 26;\\n this.words[i] = w & 0x3ffffff;\\n }\\n this.negative = 1;\\n\\n return this.strip();\\n };\\n\\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\\n var shift = this.length - num.length;\\n\\n var a = this.clone();\\n var b = num;\\n\\n // Normalize\\n var bhi = b.words[b.length - 1] | 0;\\n var bhiBits = this._countBits(bhi);\\n shift = 26 - bhiBits;\\n if (shift !== 0) {\\n b = b.ushln(shift);\\n a.iushln(shift);\\n bhi = b.words[b.length - 1] | 0;\\n }\\n\\n // Initialize quotient\\n var m = a.length - b.length;\\n var q;\\n\\n if (mode !== 'mod') {\\n q = new BN(null);\\n q.length = m + 1;\\n q.words = new Array(q.length);\\n for (var i = 0; i < q.length; i++) {\\n q.words[i] = 0;\\n }\\n }\\n\\n var diff = a.clone()._ishlnsubmul(b, 1, m);\\n if (diff.negative === 0) {\\n a = diff;\\n if (q) {\\n q.words[m] = 1;\\n }\\n }\\n\\n for (var j = m - 1; j >= 0; j--) {\\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\\n (a.words[b.length + j - 1] | 0);\\n\\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\\n // (0x7ffffff)\\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\\n\\n a._ishlnsubmul(b, qj, j);\\n while (a.negative !== 0) {\\n qj--;\\n a.negative = 0;\\n a._ishlnsubmul(b, 1, j);\\n if (!a.isZero()) {\\n a.negative ^= 1;\\n }\\n }\\n if (q) {\\n q.words[j] = qj;\\n }\\n }\\n if (q) {\\n q.strip();\\n }\\n a.strip();\\n\\n // Denormalize\\n if (mode !== 'div' && shift !== 0) {\\n a.iushrn(shift);\\n }\\n\\n return {\\n div: q || null,\\n mod: a\\n };\\n };\\n\\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\\n // to `div` to request div only, or be absent to\\n // request both div & mod\\n // 2) `positive` is true if unsigned mod is requested\\n BN.prototype.divmod = function divmod (num, mode, positive) {\\n assert(!num.isZero());\\n\\n if (this.isZero()) {\\n return {\\n div: new BN(0),\\n mod: new BN(0)\\n };\\n }\\n\\n var div, mod, res;\\n if (this.negative !== 0 && num.negative === 0) {\\n res = this.neg().divmod(num, mode);\\n\\n if (mode !== 'mod') {\\n div = res.div.neg();\\n }\\n\\n if (mode !== 'div') {\\n mod = res.mod.neg();\\n if (positive && mod.negative !== 0) {\\n mod.iadd(num);\\n }\\n }\\n\\n return {\\n div: div,\\n mod: mod\\n };\\n }\\n\\n if (this.negative === 0 && num.negative !== 0) {\\n res = this.divmod(num.neg(), mode);\\n\\n if (mode !== 'mod') {\\n div = res.div.neg();\\n }\\n\\n return {\\n div: div,\\n mod: res.mod\\n };\\n }\\n\\n if ((this.negative & num.negative) !== 0) {\\n res = this.neg().divmod(num.neg(), mode);\\n\\n if (mode !== 'div') {\\n mod = res.mod.neg();\\n if (positive && mod.negative !== 0) {\\n mod.isub(num);\\n }\\n }\\n\\n return {\\n div: res.div,\\n mod: mod\\n };\\n }\\n\\n // Both numbers are positive at this point\\n\\n // Strip both numbers to approximate shift value\\n if (num.length > this.length || this.cmp(num) < 0) {\\n return {\\n div: new BN(0),\\n mod: this\\n };\\n }\\n\\n // Very short reduction\\n if (num.length === 1) {\\n if (mode === 'div') {\\n return {\\n div: this.divn(num.words[0]),\\n mod: null\\n };\\n }\\n\\n if (mode === 'mod') {\\n return {\\n div: null,\\n mod: new BN(this.modn(num.words[0]))\\n };\\n }\\n\\n return {\\n div: this.divn(num.words[0]),\\n mod: new BN(this.modn(num.words[0]))\\n };\\n }\\n\\n return this._wordDiv(num, mode);\\n };\\n\\n // Find `this` / `num`\\n BN.prototype.div = function div (num) {\\n return this.divmod(num, 'div', false).div;\\n };\\n\\n // Find `this` % `num`\\n BN.prototype.mod = function mod (num) {\\n return this.divmod(num, 'mod', false).mod;\\n };\\n\\n BN.prototype.umod = function umod (num) {\\n return this.divmod(num, 'mod', true).mod;\\n };\\n\\n // Find Round(`this` / `num`)\\n BN.prototype.divRound = function divRound (num) {\\n var dm = this.divmod(num);\\n\\n // Fast case - exact division\\n if (dm.mod.isZero()) return dm.div;\\n\\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\\n\\n var half = num.ushrn(1);\\n var r2 = num.andln(1);\\n var cmp = mod.cmp(half);\\n\\n // Round down\\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\\n\\n // Round up\\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\\n };\\n\\n BN.prototype.modn = function modn (num) {\\n assert(num <= 0x3ffffff);\\n var p = (1 << 26) % num;\\n\\n var acc = 0;\\n for (var i = this.length - 1; i >= 0; i--) {\\n acc = (p * acc + (this.words[i] | 0)) % num;\\n }\\n\\n return acc;\\n };\\n\\n // In-place division by number\\n BN.prototype.idivn = function idivn (num) {\\n assert(num <= 0x3ffffff);\\n\\n var carry = 0;\\n for (var i = this.length - 1; i >= 0; i--) {\\n var w = (this.words[i] | 0) + carry * 0x4000000;\\n this.words[i] = (w / num) | 0;\\n carry = w % num;\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.divn = function divn (num) {\\n return this.clone().idivn(num);\\n };\\n\\n BN.prototype.egcd = function egcd (p) {\\n assert(p.negative === 0);\\n assert(!p.isZero());\\n\\n var x = this;\\n var y = p.clone();\\n\\n if (x.negative !== 0) {\\n x = x.umod(p);\\n } else {\\n x = x.clone();\\n }\\n\\n // A * x + B * y = x\\n var A = new BN(1);\\n var B = new BN(0);\\n\\n // C * x + D * y = y\\n var C = new BN(0);\\n var D = new BN(1);\\n\\n var g = 0;\\n\\n while (x.isEven() && y.isEven()) {\\n x.iushrn(1);\\n y.iushrn(1);\\n ++g;\\n }\\n\\n var yp = y.clone();\\n var xp = x.clone();\\n\\n while (!x.isZero()) {\\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\\n if (i > 0) {\\n x.iushrn(i);\\n while (i-- > 0) {\\n if (A.isOdd() || B.isOdd()) {\\n A.iadd(yp);\\n B.isub(xp);\\n }\\n\\n A.iushrn(1);\\n B.iushrn(1);\\n }\\n }\\n\\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\\n if (j > 0) {\\n y.iushrn(j);\\n while (j-- > 0) {\\n if (C.isOdd() || D.isOdd()) {\\n C.iadd(yp);\\n D.isub(xp);\\n }\\n\\n C.iushrn(1);\\n D.iushrn(1);\\n }\\n }\\n\\n if (x.cmp(y) >= 0) {\\n x.isub(y);\\n A.isub(C);\\n B.isub(D);\\n } else {\\n y.isub(x);\\n C.isub(A);\\n D.isub(B);\\n }\\n }\\n\\n return {\\n a: C,\\n b: D,\\n gcd: y.iushln(g)\\n };\\n };\\n\\n // This is reduced incarnation of the binary EEA\\n // above, designated to invert members of the\\n // _prime_ fields F(p) at a maximal speed\\n BN.prototype._invmp = function _invmp (p) {\\n assert(p.negative === 0);\\n assert(!p.isZero());\\n\\n var a = this;\\n var b = p.clone();\\n\\n if (a.negative !== 0) {\\n a = a.umod(p);\\n } else {\\n a = a.clone();\\n }\\n\\n var x1 = new BN(1);\\n var x2 = new BN(0);\\n\\n var delta = b.clone();\\n\\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\\n if (i > 0) {\\n a.iushrn(i);\\n while (i-- > 0) {\\n if (x1.isOdd()) {\\n x1.iadd(delta);\\n }\\n\\n x1.iushrn(1);\\n }\\n }\\n\\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\\n if (j > 0) {\\n b.iushrn(j);\\n while (j-- > 0) {\\n if (x2.isOdd()) {\\n x2.iadd(delta);\\n }\\n\\n x2.iushrn(1);\\n }\\n }\\n\\n if (a.cmp(b) >= 0) {\\n a.isub(b);\\n x1.isub(x2);\\n } else {\\n b.isub(a);\\n x2.isub(x1);\\n }\\n }\\n\\n var res;\\n if (a.cmpn(1) === 0) {\\n res = x1;\\n } else {\\n res = x2;\\n }\\n\\n if (res.cmpn(0) < 0) {\\n res.iadd(p);\\n }\\n\\n return res;\\n };\\n\\n BN.prototype.gcd = function gcd (num) {\\n if (this.isZero()) return num.abs();\\n if (num.isZero()) return this.abs();\\n\\n var a = this.clone();\\n var b = num.clone();\\n a.negative = 0;\\n b.negative = 0;\\n\\n // Remove common factor of two\\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\\n a.iushrn(1);\\n b.iushrn(1);\\n }\\n\\n do {\\n while (a.isEven()) {\\n a.iushrn(1);\\n }\\n while (b.isEven()) {\\n b.iushrn(1);\\n }\\n\\n var r = a.cmp(b);\\n if (r < 0) {\\n // Swap `a` and `b` to make `a` always bigger than `b`\\n var t = a;\\n a = b;\\n b = t;\\n } else if (r === 0 || b.cmpn(1) === 0) {\\n break;\\n }\\n\\n a.isub(b);\\n } while (true);\\n\\n return b.iushln(shift);\\n };\\n\\n // Invert number in the field F(num)\\n BN.prototype.invm = function invm (num) {\\n return this.egcd(num).a.umod(num);\\n };\\n\\n BN.prototype.isEven = function isEven () {\\n return (this.words[0] & 1) === 0;\\n };\\n\\n BN.prototype.isOdd = function isOdd () {\\n return (this.words[0] & 1) === 1;\\n };\\n\\n // And first word and num\\n BN.prototype.andln = function andln (num) {\\n return this.words[0] & num;\\n };\\n\\n // Increment at the bit position in-line\\n BN.prototype.bincn = function bincn (bit) {\\n assert(typeof bit === 'number');\\n var r = bit % 26;\\n var s = (bit - r) / 26;\\n var q = 1 << r;\\n\\n // Fast case: bit is much higher than all existing words\\n if (this.length <= s) {\\n this._expand(s + 1);\\n this.words[s] |= q;\\n return this;\\n }\\n\\n // Add bit and propagate, if needed\\n var carry = q;\\n for (var i = s; carry !== 0 && i < this.length; i++) {\\n var w = this.words[i] | 0;\\n w += carry;\\n carry = w >>> 26;\\n w &= 0x3ffffff;\\n this.words[i] = w;\\n }\\n if (carry !== 0) {\\n this.words[i] = carry;\\n this.length++;\\n }\\n return this;\\n };\\n\\n BN.prototype.isZero = function isZero () {\\n return this.length === 1 && this.words[0] === 0;\\n };\\n\\n BN.prototype.cmpn = function cmpn (num) {\\n var negative = num < 0;\\n\\n if (this.negative !== 0 && !negative) return -1;\\n if (this.negative === 0 && negative) return 1;\\n\\n this.strip();\\n\\n var res;\\n if (this.length > 1) {\\n res = 1;\\n } else {\\n if (negative) {\\n num = -num;\\n }\\n\\n assert(num <= 0x3ffffff, 'Number is too big');\\n\\n var w = this.words[0] | 0;\\n res = w === num ? 0 : w < num ? -1 : 1;\\n }\\n if (this.negative !== 0) return -res | 0;\\n return res;\\n };\\n\\n // Compare two numbers and return:\\n // 1 - if `this` > `num`\\n // 0 - if `this` == `num`\\n // -1 - if `this` < `num`\\n BN.prototype.cmp = function cmp (num) {\\n if (this.negative !== 0 && num.negative === 0) return -1;\\n if (this.negative === 0 && num.negative !== 0) return 1;\\n\\n var res = this.ucmp(num);\\n if (this.negative !== 0) return -res | 0;\\n return res;\\n };\\n\\n // Unsigned comparison\\n BN.prototype.ucmp = function ucmp (num) {\\n // At this point both numbers have the same sign\\n if (this.length > num.length) return 1;\\n if (this.length < num.length) return -1;\\n\\n var res = 0;\\n for (var i = this.length - 1; i >= 0; i--) {\\n var a = this.words[i] | 0;\\n var b = num.words[i] | 0;\\n\\n if (a === b) continue;\\n if (a < b) {\\n res = -1;\\n } else if (a > b) {\\n res = 1;\\n }\\n break;\\n }\\n return res;\\n };\\n\\n BN.prototype.gtn = function gtn (num) {\\n return this.cmpn(num) === 1;\\n };\\n\\n BN.prototype.gt = function gt (num) {\\n return this.cmp(num) === 1;\\n };\\n\\n BN.prototype.gten = function gten (num) {\\n return this.cmpn(num) >= 0;\\n };\\n\\n BN.prototype.gte = function gte (num) {\\n return this.cmp(num) >= 0;\\n };\\n\\n BN.prototype.ltn = function ltn (num) {\\n return this.cmpn(num) === -1;\\n };\\n\\n BN.prototype.lt = function lt (num) {\\n return this.cmp(num) === -1;\\n };\\n\\n BN.prototype.lten = function lten (num) {\\n return this.cmpn(num) <= 0;\\n };\\n\\n BN.prototype.lte = function lte (num) {\\n return this.cmp(num) <= 0;\\n };\\n\\n BN.prototype.eqn = function eqn (num) {\\n return this.cmpn(num) === 0;\\n };\\n\\n BN.prototype.eq = function eq (num) {\\n return this.cmp(num) === 0;\\n };\\n\\n //\\n // A reduce context, could be using montgomery or something better, depending\\n // on the `m` itself.\\n //\\n BN.red = function red (num) {\\n return new Red(num);\\n };\\n\\n BN.prototype.toRed = function toRed (ctx) {\\n assert(!this.red, 'Already a number in reduction context');\\n assert(this.negative === 0, 'red works only with positives');\\n return ctx.convertTo(this)._forceRed(ctx);\\n };\\n\\n BN.prototype.fromRed = function fromRed () {\\n assert(this.red, 'fromRed works only with numbers in reduction context');\\n return this.red.convertFrom(this);\\n };\\n\\n BN.prototype._forceRed = function _forceRed (ctx) {\\n this.red = ctx;\\n return this;\\n };\\n\\n BN.prototype.forceRed = function forceRed (ctx) {\\n assert(!this.red, 'Already a number in reduction context');\\n return this._forceRed(ctx);\\n };\\n\\n BN.prototype.redAdd = function redAdd (num) {\\n assert(this.red, 'redAdd works only with red numbers');\\n return this.red.add(this, num);\\n };\\n\\n BN.prototype.redIAdd = function redIAdd (num) {\\n assert(this.red, 'redIAdd works only with red numbers');\\n return this.red.iadd(this, num);\\n };\\n\\n BN.prototype.redSub = function redSub (num) {\\n assert(this.red, 'redSub works only with red numbers');\\n return this.red.sub(this, num);\\n };\\n\\n BN.prototype.redISub = function redISub (num) {\\n assert(this.red, 'redISub works only with red numbers');\\n return this.red.isub(this, num);\\n };\\n\\n BN.prototype.redShl = function redShl (num) {\\n assert(this.red, 'redShl works only with red numbers');\\n return this.red.shl(this, num);\\n };\\n\\n BN.prototype.redMul = function redMul (num) {\\n assert(this.red, 'redMul works only with red numbers');\\n this.red._verify2(this, num);\\n return this.red.mul(this, num);\\n };\\n\\n BN.prototype.redIMul = function redIMul (num) {\\n assert(this.red, 'redMul works only with red numbers');\\n this.red._verify2(this, num);\\n return this.red.imul(this, num);\\n };\\n\\n BN.prototype.redSqr = function redSqr () {\\n assert(this.red, 'redSqr works only with red numbers');\\n this.red._verify1(this);\\n return this.red.sqr(this);\\n };\\n\\n BN.prototype.redISqr = function redISqr () {\\n assert(this.red, 'redISqr works only with red numbers');\\n this.red._verify1(this);\\n return this.red.isqr(this);\\n };\\n\\n // Square root over p\\n BN.prototype.redSqrt = function redSqrt () {\\n assert(this.red, 'redSqrt works only with red numbers');\\n this.red._verify1(this);\\n return this.red.sqrt(this);\\n };\\n\\n BN.prototype.redInvm = function redInvm () {\\n assert(this.red, 'redInvm works only with red numbers');\\n this.red._verify1(this);\\n return this.red.invm(this);\\n };\\n\\n // Return negative clone of `this` % `red modulo`\\n BN.prototype.redNeg = function redNeg () {\\n assert(this.red, 'redNeg works only with red numbers');\\n this.red._verify1(this);\\n return this.red.neg(this);\\n };\\n\\n BN.prototype.redPow = function redPow (num) {\\n assert(this.red && !num.red, 'redPow(normalNum)');\\n this.red._verify1(this);\\n return this.red.pow(this, num);\\n };\\n\\n // Prime numbers with efficient reduction\\n var primes = {\\n k256: null,\\n p224: null,\\n p192: null,\\n p25519: null\\n };\\n\\n // Pseudo-Mersenne prime\\n function MPrime (name, p) {\\n // P = 2 ^ N - K\\n this.name = name;\\n this.p = new BN(p, 16);\\n this.n = this.p.bitLength();\\n this.k = new BN(1).iushln(this.n).isub(this.p);\\n\\n this.tmp = this._tmp();\\n }\\n\\n MPrime.prototype._tmp = function _tmp () {\\n var tmp = new BN(null);\\n tmp.words = new Array(Math.ceil(this.n / 13));\\n return tmp;\\n };\\n\\n MPrime.prototype.ireduce = function ireduce (num) {\\n // Assumes that `num` is less than `P^2`\\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\\n var r = num;\\n var rlen;\\n\\n do {\\n this.split(r, this.tmp);\\n r = this.imulK(r);\\n r = r.iadd(this.tmp);\\n rlen = r.bitLength();\\n } while (rlen > this.n);\\n\\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\\n if (cmp === 0) {\\n r.words[0] = 0;\\n r.length = 1;\\n } else if (cmp > 0) {\\n r.isub(this.p);\\n } else {\\n r.strip();\\n }\\n\\n return r;\\n };\\n\\n MPrime.prototype.split = function split (input, out) {\\n input.iushrn(this.n, 0, out);\\n };\\n\\n MPrime.prototype.imulK = function imulK (num) {\\n return num.imul(this.k);\\n };\\n\\n function K256 () {\\n MPrime.call(\\n this,\\n 'k256',\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\\n }\\n inherits(K256, MPrime);\\n\\n K256.prototype.split = function split (input, output) {\\n // 256 = 9 * 26 + 22\\n var mask = 0x3fffff;\\n\\n var outLen = Math.min(input.length, 9);\\n for (var i = 0; i < outLen; i++) {\\n output.words[i] = input.words[i];\\n }\\n output.length = outLen;\\n\\n if (input.length <= 9) {\\n input.words[0] = 0;\\n input.length = 1;\\n return;\\n }\\n\\n // Shift by 9 limbs\\n var prev = input.words[9];\\n output.words[output.length++] = prev & mask;\\n\\n for (i = 10; i < input.length; i++) {\\n var next = input.words[i] | 0;\\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\\n prev = next;\\n }\\n prev >>>= 22;\\n input.words[i - 10] = prev;\\n if (prev === 0 && input.length > 10) {\\n input.length -= 10;\\n } else {\\n input.length -= 9;\\n }\\n };\\n\\n K256.prototype.imulK = function imulK (num) {\\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\\n num.words[num.length] = 0;\\n num.words[num.length + 1] = 0;\\n num.length += 2;\\n\\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\\n var lo = 0;\\n for (var i = 0; i < num.length; i++) {\\n var w = num.words[i] | 0;\\n lo += w * 0x3d1;\\n num.words[i] = lo & 0x3ffffff;\\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\\n }\\n\\n // Fast length reduction\\n if (num.words[num.length - 1] === 0) {\\n num.length--;\\n if (num.words[num.length - 1] === 0) {\\n num.length--;\\n }\\n }\\n return num;\\n };\\n\\n function P224 () {\\n MPrime.call(\\n this,\\n 'p224',\\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\\n }\\n inherits(P224, MPrime);\\n\\n function P192 () {\\n MPrime.call(\\n this,\\n 'p192',\\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\\n }\\n inherits(P192, MPrime);\\n\\n function P25519 () {\\n // 2 ^ 255 - 19\\n MPrime.call(\\n this,\\n '25519',\\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\\n }\\n inherits(P25519, MPrime);\\n\\n P25519.prototype.imulK = function imulK (num) {\\n // K = 0x13\\n var carry = 0;\\n for (var i = 0; i < num.length; i++) {\\n var hi = (num.words[i] | 0) * 0x13 + carry;\\n var lo = hi & 0x3ffffff;\\n hi >>>= 26;\\n\\n num.words[i] = lo;\\n carry = hi;\\n }\\n if (carry !== 0) {\\n num.words[num.length++] = carry;\\n }\\n return num;\\n };\\n\\n // Exported mostly for testing purposes, use plain name instead\\n BN._prime = function prime (name) {\\n // Cached version of prime\\n if (primes[name]) return primes[name];\\n\\n var prime;\\n if (name === 'k256') {\\n prime = new K256();\\n } else if (name === 'p224') {\\n prime = new P224();\\n } else if (name === 'p192') {\\n prime = new P192();\\n } else if (name === 'p25519') {\\n prime = new P25519();\\n } else {\\n throw new Error('Unknown prime ' + name);\\n }\\n primes[name] = prime;\\n\\n return prime;\\n };\\n\\n //\\n // Base reduction engine\\n //\\n function Red (m) {\\n if (typeof m === 'string') {\\n var prime = BN._prime(m);\\n this.m = prime.p;\\n this.prime = prime;\\n } else {\\n assert(m.gtn(1), 'modulus must be greater than 1');\\n this.m = m;\\n this.prime = null;\\n }\\n }\\n\\n Red.prototype._verify1 = function _verify1 (a) {\\n assert(a.negative === 0, 'red works only with positives');\\n assert(a.red, 'red works only with red numbers');\\n };\\n\\n Red.prototype._verify2 = function _verify2 (a, b) {\\n assert((a.negative | b.negative) === 0, 'red works only with positives');\\n assert(a.red && a.red === b.red,\\n 'red works only with red numbers');\\n };\\n\\n Red.prototype.imod = function imod (a) {\\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\\n return a.umod(this.m)._forceRed(this);\\n };\\n\\n Red.prototype.neg = function neg (a) {\\n if (a.isZero()) {\\n return a.clone();\\n }\\n\\n return this.m.sub(a)._forceRed(this);\\n };\\n\\n Red.prototype.add = function add (a, b) {\\n this._verify2(a, b);\\n\\n var res = a.add(b);\\n if (res.cmp(this.m) >= 0) {\\n res.isub(this.m);\\n }\\n return res._forceRed(this);\\n };\\n\\n Red.prototype.iadd = function iadd (a, b) {\\n this._verify2(a, b);\\n\\n var res = a.iadd(b);\\n if (res.cmp(this.m) >= 0) {\\n res.isub(this.m);\\n }\\n return res;\\n };\\n\\n Red.prototype.sub = function sub (a, b) {\\n this._verify2(a, b);\\n\\n var res = a.sub(b);\\n if (res.cmpn(0) < 0) {\\n res.iadd(this.m);\\n }\\n return res._forceRed(this);\\n };\\n\\n Red.prototype.isub = function isub (a, b) {\\n this._verify2(a, b);\\n\\n var res = a.isub(b);\\n if (res.cmpn(0) < 0) {\\n res.iadd(this.m);\\n }\\n return res;\\n };\\n\\n Red.prototype.shl = function shl (a, num) {\\n this._verify1(a);\\n return this.imod(a.ushln(num));\\n };\\n\\n Red.prototype.imul = function imul (a, b) {\\n this._verify2(a, b);\\n return this.imod(a.imul(b));\\n };\\n\\n Red.prototype.mul = function mul (a, b) {\\n this._verify2(a, b);\\n return this.imod(a.mul(b));\\n };\\n\\n Red.prototype.isqr = function isqr (a) {\\n return this.imul(a, a.clone());\\n };\\n\\n Red.prototype.sqr = function sqr (a) {\\n return this.mul(a, a);\\n };\\n\\n Red.prototype.sqrt = function sqrt (a) {\\n if (a.isZero()) return a.clone();\\n\\n var mod3 = this.m.andln(3);\\n assert(mod3 % 2 === 1);\\n\\n // Fast case\\n if (mod3 === 3) {\\n var pow = this.m.add(new BN(1)).iushrn(2);\\n return this.pow(a, pow);\\n }\\n\\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\\n //\\n // Find Q and S, that Q * 2 ^ S = (P - 1)\\n var q = this.m.subn(1);\\n var s = 0;\\n while (!q.isZero() && q.andln(1) === 0) {\\n s++;\\n q.iushrn(1);\\n }\\n assert(!q.isZero());\\n\\n var one = new BN(1).toRed(this);\\n var nOne = one.redNeg();\\n\\n // Find quadratic non-residue\\n // NOTE: Max is such because of generalized Riemann hypothesis.\\n var lpow = this.m.subn(1).iushrn(1);\\n var z = this.m.bitLength();\\n z = new BN(2 * z * z).toRed(this);\\n\\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\\n z.redIAdd(nOne);\\n }\\n\\n var c = this.pow(z, q);\\n var r = this.pow(a, q.addn(1).iushrn(1));\\n var t = this.pow(a, q);\\n var m = s;\\n while (t.cmp(one) !== 0) {\\n var tmp = t;\\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\\n tmp = tmp.redSqr();\\n }\\n assert(i < m);\\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\\n\\n r = r.redMul(b);\\n c = b.redSqr();\\n t = t.redMul(c);\\n m = i;\\n }\\n\\n return r;\\n };\\n\\n Red.prototype.invm = function invm (a) {\\n var inv = a._invmp(this.m);\\n if (inv.negative !== 0) {\\n inv.negative = 0;\\n return this.imod(inv).redNeg();\\n } else {\\n return this.imod(inv);\\n }\\n };\\n\\n Red.prototype.pow = function pow (a, num) {\\n if (num.isZero()) return new BN(1).toRed(this);\\n if (num.cmpn(1) === 0) return a.clone();\\n\\n var windowSize = 4;\\n var wnd = new Array(1 << windowSize);\\n wnd[0] = new BN(1).toRed(this);\\n wnd[1] = a;\\n for (var i = 2; i < wnd.length; i++) {\\n wnd[i] = this.mul(wnd[i - 1], a);\\n }\\n\\n var res = wnd[0];\\n var current = 0;\\n var currentLen = 0;\\n var start = num.bitLength() % 26;\\n if (start === 0) {\\n start = 26;\\n }\\n\\n for (i = num.length - 1; i >= 0; i--) {\\n var word = num.words[i];\\n for (var j = start - 1; j >= 0; j--) {\\n var bit = (word >> j) & 1;\\n if (res !== wnd[0]) {\\n res = this.sqr(res);\\n }\\n\\n if (bit === 0 && current === 0) {\\n currentLen = 0;\\n continue;\\n }\\n\\n current <<= 1;\\n current |= bit;\\n currentLen++;\\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\\n\\n res = this.mul(res, wnd[current]);\\n currentLen = 0;\\n current = 0;\\n }\\n start = 26;\\n }\\n\\n return res;\\n };\\n\\n Red.prototype.convertTo = function convertTo (num) {\\n var r = num.umod(this.m);\\n\\n return r === num ? r.clone() : r;\\n };\\n\\n Red.prototype.convertFrom = function convertFrom (num) {\\n var res = num.clone();\\n res.red = null;\\n return res;\\n };\\n\\n //\\n // Montgomery method engine\\n //\\n\\n BN.mont = function mont (num) {\\n return new Mont(num);\\n };\\n\\n function Mont (m) {\\n Red.call(this, m);\\n\\n this.shift = this.m.bitLength();\\n if (this.shift % 26 !== 0) {\\n this.shift += 26 - (this.shift % 26);\\n }\\n\\n this.r = new BN(1).iushln(this.shift);\\n this.r2 = this.imod(this.r.sqr());\\n this.rinv = this.r._invmp(this.m);\\n\\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\\n this.minv = this.minv.umod(this.r);\\n this.minv = this.r.sub(this.minv);\\n }\\n inherits(Mont, Red);\\n\\n Mont.prototype.convertTo = function convertTo (num) {\\n return this.imod(num.ushln(this.shift));\\n };\\n\\n Mont.prototype.convertFrom = function convertFrom (num) {\\n var r = this.imod(num.mul(this.rinv));\\n r.red = null;\\n return r;\\n };\\n\\n Mont.prototype.imul = function imul (a, b) {\\n if (a.isZero() || b.isZero()) {\\n a.words[0] = 0;\\n a.length = 1;\\n return a;\\n }\\n\\n var t = a.imul(b);\\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\\n var u = t.isub(c).iushrn(this.shift);\\n var res = u;\\n\\n if (u.cmp(this.m) >= 0) {\\n res = u.isub(this.m);\\n } else if (u.cmpn(0) < 0) {\\n res = u.iadd(this.m);\\n }\\n\\n return res._forceRed(this);\\n };\\n\\n Mont.prototype.mul = function mul (a, b) {\\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\\n\\n var t = a.mul(b);\\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\\n var u = t.isub(c).iushrn(this.shift);\\n var res = u;\\n if (u.cmp(this.m) >= 0) {\\n res = u.isub(this.m);\\n } else if (u.cmpn(0) < 0) {\\n res = u.iadd(this.m);\\n }\\n\\n return res._forceRed(this);\\n };\\n\\n Mont.prototype.invm = function invm (a) {\\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\\n var res = this.imod(a._invmp(this.m).mul(this.r2));\\n return res._forceRed(this);\\n };\\n})( false || module, this);\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ \\\"./node_modules/webpack/buildin/module.js\\\")(module)))\\n\\n//# sourceURL=webpack:///./node_modules/bn.js/lib/bn.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/brorand/index.js\":\n/*!***************************************!*\\\n !*** ./node_modules/brorand/index.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var r;\\n\\nmodule.exports = function rand(len) {\\n if (!r)\\n r = new Rand(null);\\n\\n return r.generate(len);\\n};\\n\\nfunction Rand(rand) {\\n this.rand = rand;\\n}\\nmodule.exports.Rand = Rand;\\n\\nRand.prototype.generate = function generate(len) {\\n return this._rand(len);\\n};\\n\\n// Emulate crypto API using randy\\nRand.prototype._rand = function _rand(n) {\\n if (this.rand.getBytes)\\n return this.rand.getBytes(n);\\n\\n var res = new Uint8Array(n);\\n for (var i = 0; i < res.length; i++)\\n res[i] = this.rand.getByte();\\n return res;\\n};\\n\\nif (typeof self === 'object') {\\n if (self.crypto && self.crypto.getRandomValues) {\\n // Modern browsers\\n Rand.prototype._rand = function _rand(n) {\\n var arr = new Uint8Array(n);\\n self.crypto.getRandomValues(arr);\\n return arr;\\n };\\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\\n // IE\\n Rand.prototype._rand = function _rand(n) {\\n var arr = new Uint8Array(n);\\n self.msCrypto.getRandomValues(arr);\\n return arr;\\n };\\n\\n // Safari's WebWorkers do not have `crypto`\\n } else if (typeof window === 'object') {\\n // Old junk\\n Rand.prototype._rand = function() {\\n throw new Error('Not implemented yet');\\n };\\n }\\n} else {\\n // Node.js or Web worker with no crypto support\\n try {\\n var crypto = __webpack_require__(/*! crypto */ 1);\\n if (typeof crypto.randomBytes !== 'function')\\n throw new Error('Not supported');\\n\\n Rand.prototype._rand = function _rand(n) {\\n return crypto.randomBytes(n);\\n };\\n } catch (e) {\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/brorand/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/bs58/index.js\":\n/*!************************************!*\\\n !*** ./node_modules/bs58/index.js ***!\n \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var basex = __webpack_require__(/*! base-x */ \\\"./node_modules/base-x/index.js\\\")\\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\\n\\nmodule.exports = basex(ALPHABET)\\n\\n\\n//# sourceURL=webpack:///./node_modules/bs58/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/class-is/index.js\":\n/*!****************************************!*\\\n !*** ./node_modules/class-is/index.js ***!\n \\****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nfunction withIs(Class, { className, symbolName }) {\\n const symbol = Symbol.for(symbolName);\\n\\n const ClassIsWrapper = {\\n // The code below assigns the class wrapper to an object to trick\\n // JavaScript engines to show the name of the extended class when\\n // logging an instances.\\n // We are assigning an anonymous class (class wrapper) to the object\\n // with key `className` to keep the correct name.\\n // If this is not supported it falls back to logging `ClassIsWrapper`.\\n [className]: class extends Class {\\n constructor(...args) {\\n super(...args);\\n Object.defineProperty(this, symbol, { value: true });\\n }\\n\\n get [Symbol.toStringTag]() {\\n return className;\\n }\\n },\\n }[className];\\n\\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\\n\\n return ClassIsWrapper;\\n}\\n\\nfunction withIsProto(Class, { className, symbolName, withoutNew }) {\\n const symbol = Symbol.for(symbolName);\\n\\n /* eslint-disable object-shorthand */\\n const ClassIsWrapper = {\\n [className]: function (...args) {\\n if (withoutNew && !(this instanceof ClassIsWrapper)) {\\n return new ClassIsWrapper(...args);\\n }\\n\\n const _this = Class.call(this, ...args) || this;\\n\\n if (_this && !_this[symbol]) {\\n Object.defineProperty(_this, symbol, { value: true });\\n }\\n\\n return _this;\\n },\\n }[className];\\n /* eslint-enable object-shorthand */\\n\\n ClassIsWrapper.prototype = Object.create(Class.prototype);\\n ClassIsWrapper.prototype.constructor = ClassIsWrapper;\\n\\n Object.defineProperty(ClassIsWrapper.prototype, Symbol.toStringTag, {\\n get() {\\n return className;\\n },\\n });\\n\\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\\n\\n return ClassIsWrapper;\\n}\\n\\nmodule.exports = withIs;\\nmodule.exports.proto = withIsProto;\\n\\n\\n//# sourceURL=webpack:///./node_modules/class-is/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/css-loader/dist/cjs.js?!./node_modules/less-loader/dist/cjs.js!./src/style.less\":\n/*!***************************************************************************************************************!*\\\n !*** ./node_modules/css-loader/dist/cjs.js??ref--5-0!./node_modules/less-loader/dist/cjs.js!./src/style.less ***!\n \\***************************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"exports = module.exports = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \\\"./node_modules/css-loader/dist/runtime/api.js\\\")(true);\\n// Module\\nexports.push([module.i, \\\".threeboxProfileHover__style_boxAddress {\\\\n background: transparent;\\\\n height: fit-content;\\\\n padding: 0px;\\\\n font-family: Arial, sans-serif;\\\\n position: relative;\\\\n display: block;\\\\n width: fit-content;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_boxAddress.threeboxProfileHover__style_tileStyle {\\\\n border: 1px solid #edf2fb;\\\\n background: white;\\\\n border-radius: 5px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressContentWrapper {\\\\n display: flex;\\\\n justify-content: flex-end;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressContentWrapper.threeboxProfileHover__style_boxAddressLink {\\\\n cursor: pointer;\\\\n}\\\\n.threeboxProfileHover__style_tileStyle .threeboxProfileHover__style_boxAddressContentWrapper {\\\\n max-width: calc(200px + 50px + 40px);\\\\n min-width: calc(92px + 50px + 40px);\\\\n}\\\\n.threeboxProfileHover__style_boxAddressContentWrapper {\\\\n max-width: calc(200px + 50px + 40px);\\\\n}\\\\n.threeboxProfileHover__style_boxAddressFull {\\\\n width: fit-content;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap {\\\\n display: block;\\\\n float: left;\\\\n position: relative;\\\\n font-family: Arial, sans-serif;\\\\n -webkit-font-smoothing: antialiased;\\\\n background-clip: padding-box;\\\\n}\\\\n.threeboxProfileHover__style_boxAddress .threeboxProfileHover__style_boxImg {\\\\n background: #074988;\\\\n height: 50px;\\\\n width: 50px;\\\\n border-radius: 50%;\\\\n overflow: hidden;\\\\n}\\\\n.threeboxProfileHover__style_boxAddress.threeboxProfileHover__style_tileStyle .threeboxProfileHover__style_boxImg {\\\\n border-radius: 5px 0px 0px 5px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddress .threeboxProfileHover__style_boxImg img {\\\\n height: 100%;\\\\n width: 100%;\\\\n object-fit: cover;\\\\n background-color: white;\\\\n}\\\\n.threeboxProfileHover__style_boxShortAddress {\\\\n color: #636668;\\\\n font-size: 15px;\\\\n font-weight: 600;\\\\n letter-spacing: 0.015em;\\\\n display: block;\\\\n padding: 0 16px;\\\\n max-width: 200px;\\\\n text-overflow: ellipsis;\\\\n overflow: hidden;\\\\n white-space: nowrap;\\\\n}\\\\n.threeboxProfileHover__style_tileStyle .threeboxProfileHover__style_boxShortAddress {\\\\n min-width: 100px;\\\\n}\\\\n.threeboxProfileHover__style_openHover_mobile {\\\\n width: fit-content;\\\\n height: fit-content;\\\\n color: #b7bece;\\\\n padding: 0;\\\\n border: none;\\\\n background-color: transparent;\\\\n}\\\\n.threeboxProfileHover__style_tileStyle .threeboxProfileHover__style_openHover_mobile {\\\\n background-color: #f9f9f9;\\\\n border-left: 1px solid #edf2fb;\\\\n border-radius: 0 5px 5px 0;\\\\n width: 50px;\\\\n height: 50px;\\\\n}\\\\n.threeboxProfileHover__style_openHover_mobile svg {\\\\n height: 14px !important;\\\\n width: 14px !important;\\\\n}\\\\n.threeboxProfileHover__style_addressCopy {\\\\n position: relative;\\\\n color: #b7bece;\\\\n border-left: 1px solid #edf2fb;\\\\n padding: 9px 4px 4px 9px;\\\\n width: 16px;\\\\n font-size: 12px;\\\\n height: 20px;\\\\n display: inline-block;\\\\n}\\\\n.threeboxProfileHover__style_addressCopy:hover {\\\\n cursor: pointer;\\\\n color: #7c8aa7;\\\\n}\\\\n.threeboxProfileHover__style_addressCopy:active {\\\\n background-color: #f7f7fb;\\\\n}\\\\n.threeboxProfileHover__style_addressAndCheck svg {\\\\n margin-left: 6px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap {\\\\n height: fit-content;\\\\n width: fit-content;\\\\n position: absolute;\\\\n z-index: 2;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_top {\\\\n padding-bottom: 20px;\\\\n bottom: 90%;\\\\n left: -10px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_bottom {\\\\n padding-top: 20px;\\\\n top: 90%;\\\\n left: -10px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_right {\\\\n padding-left: 20px;\\\\n top: calc(50% - 33px);\\\\n left: calc(100% + -5px);\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_left {\\\\n padding-right: 20px;\\\\n top: calc(50% - 33px);\\\\n right: calc(100% + -5px);\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverProfile {\\\\n border-radius: 10px;\\\\n border: 1px solid #edf2fb;\\\\n box-shadow: 0 3px 8px 0 rgba(87, 87, 87, 0.15);\\\\n background: white;\\\\n color: #181F21;\\\\n width: 230px;\\\\n z-index: 1111;\\\\n display: none;\\\\n flex-direction: column;\\\\n justify-content: flex-start;\\\\n align-items: flex-start;\\\\n padding: 20px 20px 20px 20px;\\\\n position: relative;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap.threeboxProfileHover__style_isDesktop:hover .threeboxProfileHover__style_hoverWrap .threeboxProfileHover__style_hoverProfile {\\\\n display: flex;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_showHoverMobile .threeboxProfileHover__style_hoverProfile {\\\\n display: flex;\\\\n box-sizing: border-box;\\\\n min-width: 270px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfileEmpty {\\\\n padding: 20px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile p {\\\\n letter-spacing: 0.4px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile textarea {\\\\n font-size: 18px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_coverPicture {\\\\n position: absolute;\\\\n top: 0;\\\\n width: 100%;\\\\n height: 70px;\\\\n z-index: 1;\\\\n margin-left: -20px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_coverPicture_image {\\\\n min-width: 100%;\\\\n min-height: 70px;\\\\n max-width: 100%;\\\\n max-height: 70px;\\\\n object-fit: cover;\\\\n border-top-left-radius: 10px;\\\\n border-top-right-radius: 10px;\\\\n background-color: #f5f5f5;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValue {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n width: 100%;\\\\n height: 18px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValue a {\\\\n text-decoration: none;\\\\n color: #487dec;\\\\n font-size: 14px;\\\\n width: 80%;\\\\n white-space: nowrap;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile p {\\\\n margin: 0;\\\\n color: #ababab;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValuePicture {\\\\n z-index: 2;\\\\n margin-top: 10px;\\\\n display: flex;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValuePicture .threeboxProfileHover__style_profileValuePicture_image {\\\\n background: white;\\\\n height: 60px;\\\\n width: 60px;\\\\n border-radius: 50%;\\\\n object-fit: cover;\\\\n margin-bottom: 14px;\\\\n border: 3px solid white;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_noProfileImgSpacer {\\\\n margin-top: 65px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileDescription .threeboxProfileHover__style_profileDescription_text {\\\\n font-size: 14px;\\\\n margin-top: 4px;\\\\n color: #949494;\\\\n line-height: 18px;\\\\n text-align: left;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValue .threeboxProfileHover__style_profileText {\\\\n padding-left: 6px;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n color: #487dec;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValue svg {\\\\n margin-left: 8px;\\\\n color: #487dec;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName {\\\\n letter-spacing: 1px;\\\\n width: 100%;\\\\n overflow: hidden;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName.threeboxProfileHover__style_noContent {\\\\n margin-bottom: 20px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName span {\\\\n margin-left: 5px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName svg {\\\\n margin-left: 8px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName .threeboxProfileHover__style_profileText {\\\\n text-decoration: none;\\\\n color: #181F21;\\\\n font-weight: 600;\\\\n font-size: 20px;\\\\n text-align: left;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileText p {\\\\n color: #487dec !important;\\\\n font-size: 14px !important;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName .threeboxProfileHover__style_profileText:hover {\\\\n text-decoration: underline;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName .threeboxProfileHover__style_profileText:visited {\\\\n color: #181F21;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink {\\\\n font-size: 12px;\\\\n border-radius: 0px 0px 3px 3px;\\\\n color: #ababab;\\\\n display: flex;\\\\n justify-content: space-between;\\\\n align-items: center;\\\\n width: 100%;\\\\n position: relative;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_boxLinkText {\\\\n display: flex;\\\\n justify-content: flex-end;\\\\n align-items: center;\\\\n transition: 0.3s all ease-in-out;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_boxLinkText:hover {\\\\n color: #1168df !important;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_boxLinkText:hover .threeboxProfileHover__style_logo {\\\\n opacity: 1 !important;\\\\n filter: saturate(100%);\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_boxLinkText img {\\\\n margin-left: 12px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_profileCheck {\\\\n position: absolute;\\\\n right: -16px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_logo {\\\\n opacity: 0.1 !important;\\\\n height: 18px;\\\\n width: 18px;\\\\n filter: saturate(0%);\\\\n transition: 0.3s all ease-in-out;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink a {\\\\n color: #ababab !important;\\\\n font-weight: 300 !important;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_BoxLinkText {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty {\\\\n font-size: 12px;\\\\n text-align: center;\\\\n border-radius: 0px 0px 3px 3px;\\\\n display: flex;\\\\n justify-content: space-between;\\\\n align-items: center;\\\\n width: 100%;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink a {\\\\n text-decoration: none;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink svg {\\\\n color: #487dec;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty_text {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty a {\\\\n text-decoration: none;\\\\n color: #487dec;\\\\n font-weight: 600;\\\\n margin-right: 5px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty span {\\\\n color: #ababab;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty svg {\\\\n color: #487dec;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileDetails {\\\\n margin: 24px 0;\\\\n width: 100%;\\\\n overflow: hidden;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueKey {\\\\n font-size: 12px;\\\\n width: 20%;\\\\n text-align: left;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile:after {\\\\n content: '';\\\\n position: absolute;\\\\n width: 10px;\\\\n height: 10px;\\\\n border-bottom: 1px solid #edf2fb;\\\\n border-right: 1px solid #edf2fb;\\\\n background: white;\\\\n z-index: 0;\\\\n}\\\\n.threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_bottom .threeboxProfileHover__style_hoverProfile:after {\\\\n top: -6px;\\\\n left: 14%;\\\\n margin-left: -10px;\\\\n -moz-transform: rotate(225deg);\\\\n -webkit-transform: rotate(225deg);\\\\n transform: rotate(225deg);\\\\n}\\\\n.threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_top .threeboxProfileHover__style_hoverProfile:after {\\\\n bottom: -6px;\\\\n left: 14%;\\\\n margin-left: -10px;\\\\n -moz-transform: rotate(45deg);\\\\n -webkit-transform: rotate(45deg);\\\\n transform: rotate(45deg);\\\\n}\\\\n.threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_right .threeboxProfileHover__style_hoverProfile:after {\\\\n top: 37px;\\\\n left: -6px;\\\\n margin-top: -10px;\\\\n -moz-transform: rotate(135deg);\\\\n -webkit-transform: rotate(135deg);\\\\n transform: rotate(135deg);\\\\n}\\\\n.threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_left .threeboxProfileHover__style_hoverProfile:after {\\\\n top: 37px;\\\\n right: -6px;\\\\n margin-top: -10px;\\\\n -moz-transform: rotate(315deg);\\\\n -webkit-transform: rotate(315deg);\\\\n transform: rotate(315deg);\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_addressAndCheck {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n width: fit-content;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_addressWrapper {\\\\n background-color: #f9f9f9;\\\\n padding: 4px 6px;\\\\n border-radius: 3px;\\\\n cursor: pointer;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_addressWrapper img {\\\\n width: 13px;\\\\n height: 13px;\\\\n opacity: 0.3;\\\\n margin-right: 6px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_address {\\\\n font-size: 12px;\\\\n color: #ababab;\\\\n}\\\\n.threeboxProfileHover__style_loadingText {\\\\n text-align: center;\\\\n padding: 2px;\\\\n font-size: 13px;\\\\n}\\\\n.threeboxProfileHover__style_noMargin {\\\\n margin: 0 !important;\\\\n}\\\\n.threeboxProfileHover__style_onClickOutsideMobile {\\\\n display: flex;\\\\n position: fixed;\\\\n top: 0;\\\\n left: 0;\\\\n width: 100%;\\\\n height: 100%;\\\\n z-index: 1;\\\\n}\\\\n\\\", \\\"\\\",{\\\"version\\\":3,\\\"sources\\\":[\\\"/Users/kenzo/profile-hover/src/style.less\\\"],\\\"names\\\":[],\\\"mappings\\\":\\\"AAAA;EACE,uBAAuB;EACvB,mBAAmB;EACnB,YAAY;EACZ,8BAA8B;EAC9B,kBAAkB;EAClB,cAAc;EACd,kBAAkB;EAClB,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,yBAAyB;EACzB,iBAAiB;EACjB,kBAAkB;AACpB;AACA;EACE,aAAa;EACb,yBAAyB;EACzB,mBAAmB;AACrB;AACA;EACE,eAAe;AACjB;AACA;EACE,oCAAoC;EACpC,mCAAmC;AACrC;AACA;EACE,oCAAoC;AACtC;AACA;EACE,kBAAkB;AACpB;AACA;EACE,cAAc;EACd,WAAW;EACX,kBAAkB;EAClB,8BAA8B;EAC9B,mCAAmC;EACnC,4BAA4B;AAC9B;AACA;EACE,mBAAmB;EACnB,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,gBAAgB;AAClB;AACA;EACE,8BAA8B;AAChC;AACA;EACE,YAAY;EACZ,WAAW;EACX,iBAAiB;EACjB,uBAAuB;AACzB;AACA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,uBAAuB;EACvB,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,uBAAuB;EACvB,gBAAgB;EAChB,mBAAmB;AACrB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,kBAAkB;EAClB,mBAAmB;EACnB,cAAc;EACd,UAAU;EACV,YAAY;EACZ,6BAA6B;AAC/B;AACA;EACE,yBAAyB;EACzB,8BAA8B;EAC9B,0BAA0B;EAC1B,WAAW;EACX,YAAY;AACd;AACA;EACE,uBAAuB;EACvB,sBAAsB;AACxB;AACA;EACE,kBAAkB;EAClB,cAAc;EACd,8BAA8B;EAC9B,wBAAwB;EACxB,WAAW;EACX,eAAe;EACf,YAAY;EACZ,qBAAqB;AACvB;AACA;EACE,eAAe;EACf,cAAc;AAChB;AACA;EACE,yBAAyB;AAC3B;AACA;EACE,gBAAgB;AAClB;AACA;EACE,mBAAmB;EACnB,kBAAkB;EAClB,kBAAkB;EAClB,UAAU;AACZ;AACA;EACE,oBAAoB;EACpB,WAAW;EACX,WAAW;AACb;AACA;EACE,iBAAiB;EACjB,QAAQ;EACR,WAAW;AACb;AACA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,uBAAuB;AACzB;AACA;EACE,mBAAmB;EACnB,qBAAqB;EACrB,wBAAwB;AAC1B;AACA;EACE,mBAAmB;EACnB,yBAAyB;EACzB,8CAA8C;EAC9C,iBAAiB;EACjB,cAAc;EACd,YAAY;EACZ,aAAa;EACb,aAAa;EACb,sBAAsB;EACtB,2BAA2B;EAC3B,uBAAuB;EACvB,4BAA4B;EAC5B,kBAAkB;AACpB;AACA;EACE,aAAa;AACf;AACA;EACE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;AAClB;AACA;EACE,aAAa;AACf;AACA;EACE,qBAAqB;AACvB;AACA;EACE,eAAe;AACjB;AACA;EACE,kBAAkB;EAClB,MAAM;EACN,WAAW;EACX,YAAY;EACZ,UAAU;EACV,kBAAkB;AACpB;AACA;EACE,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,iBAAiB;EACjB,4BAA4B;EAC5B,6BAA6B;EAC7B,yBAAyB;AAC3B;AACA;EACE,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;EACnB,WAAW;EACX,YAAY;AACd;AACA;EACE,qBAAqB;EACrB,cAAc;EACd,eAAe;EACf,UAAU;EACV,mBAAmB;AACrB;AACA;EACE,SAAS;EACT,cAAc;AAChB;AACA;EACE,UAAU;EACV,gBAAgB;EAChB,aAAa;AACf;AACA;EACE,iBAAiB;EACjB,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,iBAAiB;EACjB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,eAAe;EACf,eAAe;EACf,cAAc;EACd,iBAAiB;EACjB,gBAAgB;AAClB;AACA;EACE,iBAAiB;EACjB,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;EACnB,cAAc;AAChB;AACA;EACE,gBAAgB;EAChB,cAAc;AAChB;AACA;EACE,mBAAmB;EACnB,WAAW;EACX,gBAAgB;EAChB,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,qBAAqB;EACrB,cAAc;EACd,gBAAgB;EAChB,eAAe;EACf,gBAAgB;AAClB;AACA;EACE,yBAAyB;EACzB,0BAA0B;AAC5B;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,cAAc;AAChB;AACA;EACE,eAAe;EACf,8BAA8B;EAC9B,cAAc;EACd,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,WAAW;EACX,kBAAkB;AACpB;AACA;EACE,aAAa;EACb,yBAAyB;EACzB,mBAAmB;EACnB,gCAAgC;AAClC;AACA;EACE,yBAAyB;AAC3B;AACA;EACE,qBAAqB;EACrB,sBAAsB;AACxB;AACA;EACE,iBAAiB;AACnB;AACA;EACE,kBAAkB;EAClB,YAAY;AACd;AACA;EACE,uBAAuB;EACvB,YAAY;EACZ,WAAW;EACX,oBAAoB;EACpB,gCAAgC;AAClC;AACA;EACE,yBAAyB;EACzB,2BAA2B;AAC7B;AACA;EACE,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,eAAe;EACf,kBAAkB;EAClB,8BAA8B;EAC9B,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,WAAW;AACb;AACA;EACE,qBAAqB;AACvB;AACA;EACE,cAAc;AAChB;AACA;EACE,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,qBAAqB;EACrB,cAAc;EACd,gBAAgB;EAChB,iBAAiB;AACnB;AACA;EACE,cAAc;AAChB;AACA;EACE,cAAc;AAChB;AACA;EACE,cAAc;EACd,WAAW;EACX,gBAAgB;AAClB;AACA;EACE,eAAe;EACf,UAAU;EACV,gBAAgB;AAClB;AACA;EACE,WAAW;EACX,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,gCAAgC;EAChC,+BAA+B;EAC/B,iBAAiB;EACjB,UAAU;AACZ;AACA;EACE,SAAS;EACT,SAAS;EACT,kBAAkB;EAClB,8BAA8B;EAC9B,iCAAiC;EACjC,yBAAyB;AAC3B;AACA;EACE,YAAY;EACZ,SAAS;EACT,kBAAkB;EAClB,6BAA6B;EAC7B,gCAAgC;EAChC,wBAAwB;AAC1B;AACA;EACE,SAAS;EACT,UAAU;EACV,iBAAiB;EACjB,8BAA8B;EAC9B,iCAAiC;EACjC,yBAAyB;AAC3B;AACA;EACE,SAAS;EACT,WAAW;EACX,iBAAiB;EACjB,8BAA8B;EAC9B,iCAAiC;EACjC,yBAAyB;AAC3B;AACA;EACE,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;EACnB,kBAAkB;AACpB;AACA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,iBAAiB;AACnB;AACA;EACE,eAAe;EACf,cAAc;AAChB;AACA;EACE,kBAAkB;EAClB,YAAY;EACZ,eAAe;AACjB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,aAAa;EACb,eAAe;EACf,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,UAAU;AACZ\\\",\\\"file\\\":\\\"style.less\\\",\\\"sourcesContent\\\":[\\\".boxAddress {\\\\n background: transparent;\\\\n height: fit-content;\\\\n padding: 0px;\\\\n font-family: Arial, sans-serif;\\\\n position: relative;\\\\n display: block;\\\\n width: fit-content;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.boxAddress.tileStyle {\\\\n border: 1px solid #edf2fb;\\\\n background: white;\\\\n border-radius: 5px;\\\\n}\\\\n.boxAddressContentWrapper {\\\\n display: flex;\\\\n justify-content: flex-end;\\\\n align-items: center;\\\\n}\\\\n.boxAddressContentWrapper.boxAddressLink {\\\\n cursor: pointer;\\\\n}\\\\n.tileStyle .boxAddressContentWrapper {\\\\n max-width: calc(200px + 50px + 40px);\\\\n min-width: calc(92px + 50px + 40px);\\\\n}\\\\n.boxAddressContentWrapper {\\\\n max-width: calc(200px + 50px + 40px);\\\\n}\\\\n.boxAddressFull {\\\\n width: fit-content;\\\\n}\\\\n.boxAddressWrap {\\\\n display: block;\\\\n float: left;\\\\n position: relative;\\\\n font-family: Arial, sans-serif;\\\\n -webkit-font-smoothing: antialiased;\\\\n background-clip: padding-box;\\\\n}\\\\n.boxAddress .boxImg {\\\\n background: #074988;\\\\n height: 50px;\\\\n width: 50px;\\\\n border-radius: 50%;\\\\n overflow: hidden;\\\\n}\\\\n.boxAddress.tileStyle .boxImg {\\\\n border-radius: 5px 0px 0px 5px;\\\\n}\\\\n.boxAddress .boxImg img {\\\\n height: 100%;\\\\n width: 100%;\\\\n object-fit: cover;\\\\n background-color: white;\\\\n}\\\\n.boxShortAddress {\\\\n color: #636668;\\\\n font-size: 15px;\\\\n font-weight: 600;\\\\n letter-spacing: 0.015em;\\\\n display: block;\\\\n padding: 0 16px;\\\\n max-width: 200px;\\\\n text-overflow: ellipsis;\\\\n overflow: hidden;\\\\n white-space: nowrap;\\\\n}\\\\n.tileStyle .boxShortAddress {\\\\n min-width: 100px;\\\\n}\\\\n.openHover_mobile {\\\\n width: fit-content;\\\\n height: fit-content;\\\\n color: #b7bece;\\\\n padding: 0;\\\\n border: none;\\\\n background-color: transparent;\\\\n}\\\\n.tileStyle .openHover_mobile {\\\\n background-color: #f9f9f9;\\\\n border-left: 1px solid #edf2fb;\\\\n border-radius: 0 5px 5px 0;\\\\n width: 50px;\\\\n height: 50px;\\\\n}\\\\n.openHover_mobile svg {\\\\n height: 14px !important;\\\\n width: 14px !important;\\\\n}\\\\n.addressCopy {\\\\n position: relative;\\\\n color: #b7bece;\\\\n border-left: 1px solid #edf2fb;\\\\n padding: 9px 4px 4px 9px;\\\\n width: 16px;\\\\n font-size: 12px;\\\\n height: 20px;\\\\n display: inline-block;\\\\n}\\\\n.addressCopy:hover {\\\\n cursor: pointer;\\\\n color: #7c8aa7;\\\\n}\\\\n.addressCopy:active {\\\\n background-color: #f7f7fb;\\\\n}\\\\n.addressAndCheck svg {\\\\n margin-left: 6px;\\\\n}\\\\n.boxAddressWrap .hoverWrap {\\\\n height: fit-content;\\\\n width: fit-content;\\\\n position: absolute;\\\\n z-index: 2;\\\\n}\\\\n.boxAddressWrap .hoverWrap.top {\\\\n padding-bottom: 20px;\\\\n bottom: 90%;\\\\n left: -10px;\\\\n}\\\\n.boxAddressWrap .hoverWrap.bottom {\\\\n padding-top: 20px;\\\\n top: 90%;\\\\n left: -10px;\\\\n}\\\\n.boxAddressWrap .hoverWrap.right {\\\\n padding-left: 20px;\\\\n top: calc(50% - 33px);\\\\n left: calc(100% + -5px);\\\\n}\\\\n.boxAddressWrap .hoverWrap.left {\\\\n padding-right: 20px;\\\\n top: calc(50% - 33px);\\\\n right: calc(100% + -5px);\\\\n}\\\\n.boxAddressWrap .hoverProfile {\\\\n border-radius: 10px;\\\\n border: 1px solid #edf2fb;\\\\n box-shadow: 0 3px 8px 0 rgba(87, 87, 87, 0.15);\\\\n background: white;\\\\n color: #181F21;\\\\n width: 230px;\\\\n z-index: 1111;\\\\n display: none;\\\\n flex-direction: column;\\\\n justify-content: flex-start;\\\\n align-items: flex-start;\\\\n padding: 20px 20px 20px 20px;\\\\n position: relative;\\\\n}\\\\n.boxAddressWrap.isDesktop:hover .hoverWrap .hoverProfile {\\\\n display: flex;\\\\n}\\\\n.boxAddressWrap .hoverWrap.showHoverMobile .hoverProfile {\\\\n display: flex;\\\\n box-sizing: border-box;\\\\n min-width: 270px;\\\\n}\\\\n.hoverProfileEmpty {\\\\n padding: 20px;\\\\n}\\\\n.hoverProfile p {\\\\n letter-spacing: 0.4px;\\\\n}\\\\n.hoverProfile textarea {\\\\n font-size: 18px;\\\\n}\\\\n.hoverProfile .coverPicture {\\\\n position: absolute;\\\\n top: 0;\\\\n width: 100%;\\\\n height: 70px;\\\\n z-index: 1;\\\\n margin-left: -20px;\\\\n}\\\\n.hoverProfile .coverPicture_image {\\\\n min-width: 100%;\\\\n min-height: 70px;\\\\n max-width: 100%;\\\\n max-height: 70px;\\\\n object-fit: cover;\\\\n border-top-left-radius: 10px;\\\\n border-top-right-radius: 10px;\\\\n background-color: #f5f5f5;\\\\n}\\\\n.hoverProfile .profileValue {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n width: 100%;\\\\n height: 18px;\\\\n}\\\\n.hoverProfile .profileValue a {\\\\n text-decoration: none;\\\\n color: #487dec;\\\\n font-size: 14px;\\\\n width: 80%;\\\\n white-space: nowrap;\\\\n}\\\\n.hoverProfile p {\\\\n margin: 0;\\\\n color: #ababab;\\\\n}\\\\n.hoverProfile .profileValuePicture {\\\\n z-index: 2;\\\\n margin-top: 10px;\\\\n display: flex;\\\\n}\\\\n.hoverProfile .profileValuePicture .profileValuePicture_image {\\\\n background: white;\\\\n height: 60px;\\\\n width: 60px;\\\\n border-radius: 50%;\\\\n object-fit: cover;\\\\n margin-bottom: 14px;\\\\n border: 3px solid white;\\\\n}\\\\n.hoverProfile .noProfileImgSpacer {\\\\n margin-top: 65px;\\\\n}\\\\n.hoverProfile .profileDescription .profileDescription_text {\\\\n font-size: 14px;\\\\n margin-top: 4px;\\\\n color: #949494;\\\\n line-height: 18px;\\\\n text-align: left;\\\\n}\\\\n.hoverProfile .profileValue .profileText {\\\\n padding-left: 6px;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n color: #487dec;\\\\n}\\\\n.hoverProfile .profileValue svg {\\\\n margin-left: 8px;\\\\n color: #487dec;\\\\n}\\\\n.hoverProfile .profileValueName {\\\\n letter-spacing: 1px;\\\\n width: 100%;\\\\n overflow: hidden;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.hoverProfile .profileValueName.noContent {\\\\n margin-bottom: 20px;\\\\n}\\\\n.hoverProfile .profileValueName span {\\\\n margin-left: 5px;\\\\n}\\\\n.hoverProfile .profileValueName svg {\\\\n margin-left: 8px;\\\\n}\\\\n.hoverProfile .profileValueName .profileText {\\\\n text-decoration: none;\\\\n color: #181F21;\\\\n font-weight: 600;\\\\n font-size: 20px;\\\\n text-align: left;\\\\n}\\\\n.hoverProfile .profileText p {\\\\n color: #487dec !important;\\\\n font-size: 14px !important;\\\\n}\\\\n.hoverProfile .profileValueName .profileText:hover {\\\\n text-decoration: underline;\\\\n}\\\\n.hoverProfile .profileValueName .profileText:visited {\\\\n color: #181F21;\\\\n}\\\\n.hoverProfile .boxLink {\\\\n font-size: 12px;\\\\n border-radius: 0px 0px 3px 3px;\\\\n color: #ababab;\\\\n display: flex;\\\\n justify-content: space-between;\\\\n align-items: center;\\\\n width: 100%;\\\\n position: relative;\\\\n}\\\\n.hoverProfile .boxLink .boxLinkText {\\\\n display: flex;\\\\n justify-content: flex-end;\\\\n align-items: center;\\\\n transition: 0.3s all ease-in-out;\\\\n}\\\\n.hoverProfile .boxLink .boxLinkText:hover {\\\\n color: #1168df !important;\\\\n}\\\\n.hoverProfile .boxLink .boxLinkText:hover .logo {\\\\n opacity: 1 !important;\\\\n filter: saturate(100%);\\\\n}\\\\n.hoverProfile .boxLink .boxLinkText img {\\\\n margin-left: 12px;\\\\n}\\\\n.hoverProfile .boxLink .profileCheck {\\\\n position: absolute;\\\\n right: -16px;\\\\n}\\\\n.hoverProfile .logo {\\\\n opacity: 0.1 !important;\\\\n height: 18px;\\\\n width: 18px;\\\\n filter: saturate(0%);\\\\n transition: 0.3s all ease-in-out;\\\\n}\\\\n.hoverProfile .boxLink a {\\\\n color: #ababab !important;\\\\n font-weight: 300 !important;\\\\n}\\\\n.hoverProfile .BoxLinkText {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.hoverProfile .boxLinkEmpty {\\\\n font-size: 12px;\\\\n text-align: center;\\\\n border-radius: 0px 0px 3px 3px;\\\\n display: flex;\\\\n justify-content: space-between;\\\\n align-items: center;\\\\n width: 100%;\\\\n}\\\\n.hoverProfile .boxLink a {\\\\n text-decoration: none;\\\\n}\\\\n.hoverProfile .boxLink svg {\\\\n color: #487dec;\\\\n}\\\\n.hoverProfile .boxLinkEmpty_text {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.hoverProfile .boxLinkEmpty a {\\\\n text-decoration: none;\\\\n color: #487dec;\\\\n font-weight: 600;\\\\n margin-right: 5px;\\\\n}\\\\n.hoverProfile .boxLinkEmpty span {\\\\n color: #ababab;\\\\n}\\\\n.hoverProfile .boxLinkEmpty svg {\\\\n color: #487dec;\\\\n}\\\\n.hoverProfile .profileDetails {\\\\n margin: 24px 0;\\\\n width: 100%;\\\\n overflow: hidden;\\\\n}\\\\n.hoverProfile .profileValueKey {\\\\n font-size: 12px;\\\\n width: 20%;\\\\n text-align: left;\\\\n}\\\\n.hoverProfile:after {\\\\n content: '';\\\\n position: absolute;\\\\n width: 10px;\\\\n height: 10px;\\\\n border-bottom: 1px solid #edf2fb;\\\\n border-right: 1px solid #edf2fb;\\\\n background: white;\\\\n z-index: 0;\\\\n}\\\\n.hoverWrap.bottom .hoverProfile:after {\\\\n top: -6px;\\\\n left: 14%;\\\\n margin-left: -10px;\\\\n -moz-transform: rotate(225deg);\\\\n -webkit-transform: rotate(225deg);\\\\n transform: rotate(225deg);\\\\n}\\\\n.hoverWrap.top .hoverProfile:after {\\\\n bottom: -6px;\\\\n left: 14%;\\\\n margin-left: -10px;\\\\n -moz-transform: rotate(45deg);\\\\n -webkit-transform: rotate(45deg);\\\\n transform: rotate(45deg);\\\\n}\\\\n.hoverWrap.right .hoverProfile:after {\\\\n top: 37px;\\\\n left: -6px;\\\\n margin-top: -10px;\\\\n -moz-transform: rotate(135deg);\\\\n -webkit-transform: rotate(135deg);\\\\n transform: rotate(135deg);\\\\n}\\\\n.hoverWrap.left .hoverProfile:after {\\\\n top: 37px;\\\\n right: -6px;\\\\n margin-top: -10px;\\\\n -moz-transform: rotate(315deg);\\\\n -webkit-transform: rotate(315deg);\\\\n transform: rotate(315deg);\\\\n}\\\\n.hoverProfile .addressAndCheck {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n width: fit-content;\\\\n}\\\\n.hoverProfile .addressWrapper {\\\\n background-color: #f9f9f9;\\\\n padding: 4px 6px;\\\\n border-radius: 3px;\\\\n cursor: pointer;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.hoverProfile .addressWrapper img {\\\\n width: 13px;\\\\n height: 13px;\\\\n opacity: 0.3;\\\\n margin-right: 6px;\\\\n}\\\\n.hoverProfile .address {\\\\n font-size: 12px;\\\\n color: #ababab;\\\\n}\\\\n.loadingText {\\\\n text-align: center;\\\\n padding: 2px;\\\\n font-size: 13px;\\\\n}\\\\n.noMargin {\\\\n margin: 0 !important;\\\\n}\\\\n.onClickOutsideMobile {\\\\n display: flex;\\\\n position: fixed;\\\\n top: 0;\\\\n left: 0;\\\\n width: 100%;\\\\n height: 100%;\\\\n z-index: 1;\\\\n}\\\\n\\\"],\\\"sourceRoot\\\":\\\"\\\"}]);\\n\\n// Exports\\nexports.locals = {\\n\\t\\\"boxAddress\\\": \\\"threeboxProfileHover__style_boxAddress\\\",\\n\\t\\\"tileStyle\\\": \\\"threeboxProfileHover__style_tileStyle\\\",\\n\\t\\\"boxAddressContentWrapper\\\": \\\"threeboxProfileHover__style_boxAddressContentWrapper\\\",\\n\\t\\\"boxAddressLink\\\": \\\"threeboxProfileHover__style_boxAddressLink\\\",\\n\\t\\\"boxAddressFull\\\": \\\"threeboxProfileHover__style_boxAddressFull\\\",\\n\\t\\\"boxAddressWrap\\\": \\\"threeboxProfileHover__style_boxAddressWrap\\\",\\n\\t\\\"boxImg\\\": \\\"threeboxProfileHover__style_boxImg\\\",\\n\\t\\\"boxShortAddress\\\": \\\"threeboxProfileHover__style_boxShortAddress\\\",\\n\\t\\\"openHover_mobile\\\": \\\"threeboxProfileHover__style_openHover_mobile\\\",\\n\\t\\\"addressCopy\\\": \\\"threeboxProfileHover__style_addressCopy\\\",\\n\\t\\\"addressAndCheck\\\": \\\"threeboxProfileHover__style_addressAndCheck\\\",\\n\\t\\\"hoverWrap\\\": \\\"threeboxProfileHover__style_hoverWrap\\\",\\n\\t\\\"top\\\": \\\"threeboxProfileHover__style_top\\\",\\n\\t\\\"bottom\\\": \\\"threeboxProfileHover__style_bottom\\\",\\n\\t\\\"right\\\": \\\"threeboxProfileHover__style_right\\\",\\n\\t\\\"left\\\": \\\"threeboxProfileHover__style_left\\\",\\n\\t\\\"hoverProfile\\\": \\\"threeboxProfileHover__style_hoverProfile\\\",\\n\\t\\\"isDesktop\\\": \\\"threeboxProfileHover__style_isDesktop\\\",\\n\\t\\\"showHoverMobile\\\": \\\"threeboxProfileHover__style_showHoverMobile\\\",\\n\\t\\\"hoverProfileEmpty\\\": \\\"threeboxProfileHover__style_hoverProfileEmpty\\\",\\n\\t\\\"coverPicture\\\": \\\"threeboxProfileHover__style_coverPicture\\\",\\n\\t\\\"coverPicture_image\\\": \\\"threeboxProfileHover__style_coverPicture_image\\\",\\n\\t\\\"profileValue\\\": \\\"threeboxProfileHover__style_profileValue\\\",\\n\\t\\\"profileValuePicture\\\": \\\"threeboxProfileHover__style_profileValuePicture\\\",\\n\\t\\\"profileValuePicture_image\\\": \\\"threeboxProfileHover__style_profileValuePicture_image\\\",\\n\\t\\\"noProfileImgSpacer\\\": \\\"threeboxProfileHover__style_noProfileImgSpacer\\\",\\n\\t\\\"profileDescription\\\": \\\"threeboxProfileHover__style_profileDescription\\\",\\n\\t\\\"profileDescription_text\\\": \\\"threeboxProfileHover__style_profileDescription_text\\\",\\n\\t\\\"profileText\\\": \\\"threeboxProfileHover__style_profileText\\\",\\n\\t\\\"profileValueName\\\": \\\"threeboxProfileHover__style_profileValueName\\\",\\n\\t\\\"noContent\\\": \\\"threeboxProfileHover__style_noContent\\\",\\n\\t\\\"boxLink\\\": \\\"threeboxProfileHover__style_boxLink\\\",\\n\\t\\\"boxLinkText\\\": \\\"threeboxProfileHover__style_boxLinkText\\\",\\n\\t\\\"logo\\\": \\\"threeboxProfileHover__style_logo\\\",\\n\\t\\\"profileCheck\\\": \\\"threeboxProfileHover__style_profileCheck\\\",\\n\\t\\\"BoxLinkText\\\": \\\"threeboxProfileHover__style_BoxLinkText\\\",\\n\\t\\\"boxLinkEmpty\\\": \\\"threeboxProfileHover__style_boxLinkEmpty\\\",\\n\\t\\\"boxLinkEmpty_text\\\": \\\"threeboxProfileHover__style_boxLinkEmpty_text\\\",\\n\\t\\\"profileDetails\\\": \\\"threeboxProfileHover__style_profileDetails\\\",\\n\\t\\\"profileValueKey\\\": \\\"threeboxProfileHover__style_profileValueKey\\\",\\n\\t\\\"addressWrapper\\\": \\\"threeboxProfileHover__style_addressWrapper\\\",\\n\\t\\\"address\\\": \\\"threeboxProfileHover__style_address\\\",\\n\\t\\\"loadingText\\\": \\\"threeboxProfileHover__style_loadingText\\\",\\n\\t\\\"noMargin\\\": \\\"threeboxProfileHover__style_noMargin\\\",\\n\\t\\\"onClickOutsideMobile\\\": \\\"threeboxProfileHover__style_onClickOutsideMobile\\\"\\n};\\n\\n//# sourceURL=webpack:///./src/style.less?./node_modules/css-loader/dist/cjs.js??ref--5-0!./node_modules/less-loader/dist/cjs.js\");\n\n/***/ }),\n\n/***/ \"./node_modules/css-loader/dist/runtime/api.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/css-loader/dist/runtime/api.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\n/*\\n MIT License http://www.opensource.org/licenses/mit-license.php\\n Author Tobias Koppers @sokra\\n*/\\n// css base code, injected by the css-loader\\nmodule.exports = function (useSourceMap) {\\n var list = []; // return the list of modules as css string\\n\\n list.toString = function toString() {\\n return this.map(function (item) {\\n var content = cssWithMappingToString(item, useSourceMap);\\n\\n if (item[2]) {\\n return '@media ' + item[2] + '{' + content + '}';\\n } else {\\n return content;\\n }\\n }).join('');\\n }; // import a list of modules into the list\\n\\n\\n list.i = function (modules, mediaQuery) {\\n if (typeof modules === 'string') {\\n modules = [[null, modules, '']];\\n }\\n\\n var alreadyImportedModules = {};\\n\\n for (var i = 0; i < this.length; i++) {\\n var id = this[i][0];\\n\\n if (id != null) {\\n alreadyImportedModules[id] = true;\\n }\\n }\\n\\n for (i = 0; i < modules.length; i++) {\\n var item = modules[i]; // skip already imported module\\n // this implementation is not 100% perfect for weird media query combinations\\n // when a module is imported multiple times with different media queries.\\n // I hope this will never occur (Hey this way we have smaller bundles)\\n\\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\\n if (mediaQuery && !item[2]) {\\n item[2] = mediaQuery;\\n } else if (mediaQuery) {\\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\\n }\\n\\n list.push(item);\\n }\\n }\\n };\\n\\n return list;\\n};\\n\\nfunction cssWithMappingToString(item, useSourceMap) {\\n var content = item[1] || '';\\n var cssMapping = item[3];\\n\\n if (!cssMapping) {\\n return content;\\n }\\n\\n if (useSourceMap && typeof btoa === 'function') {\\n var sourceMapping = toComment(cssMapping);\\n var sourceURLs = cssMapping.sources.map(function (source) {\\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\\n });\\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\\\n');\\n }\\n\\n return [content].join('\\\\n');\\n} // Adapted from convert-source-map (MIT)\\n\\n\\nfunction toComment(sourceMap) {\\n // eslint-disable-next-line no-undef\\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\\n return '/*# ' + data + ' */';\\n}\\n\\n//# sourceURL=webpack:///./node_modules/css-loader/dist/runtime/api.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/did-jwt/lib/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/did-jwt/lib/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {function r(r){return r&&\\\"object\\\"==typeof r&&\\\"default\\\"in r?r.default:r}var e=__webpack_require__(/*! js-sha256 */ \\\"./node_modules/js-sha256/src/sha256.js\\\"),t=__webpack_require__(/*! js-sha3 */ \\\"./node_modules/did-jwt/node_modules/js-sha3/src/sha3.js\\\"),n=__webpack_require__(/*! elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\"),o=r(__webpack_require__(/*! tweetnacl */ \\\"./node_modules/tweetnacl/nacl-fast.js\\\")),i=__webpack_require__(/*! @stablelib/utf8 */ \\\"./node_modules/@stablelib/utf8/lib/utf8.js\\\"),a=__webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\"),u=r(__webpack_require__(/*! uport-base64url */ \\\"./node_modules/uport-base64url/index.js\\\")),c=r(__webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\"));function f(r){return a.Buffer.from(e.sha256.arrayBuffer(r))}function s(r){return\\\"0x\\\"+(e=a.Buffer.from(r.slice(2),\\\"hex\\\"),a.Buffer.from(t.keccak_256.arrayBuffer(e))).slice(-20).toString(\\\"hex\\\");var e}var d=new n.ec(\\\"secp256k1\\\");function h(r,e){return void 0===e&&(e=64),r.length===e?r:\\\"0\\\".repeat(e-r.length)+r}function l(r){return new Uint8Array(Array.prototype.slice.call(Buffer.from(r,\\\"base64\\\"),0))}var p=new n.ec(\\\"secp256k1\\\");function v(r,e){void 0===e&&(e=!1);var t=u.toBuffer(r);if(t.length!==(e?65:64))throw new Error(\\\"wrong signature length\\\");var n={r:t.slice(0,32).toString(\\\"hex\\\"),s:t.slice(32,64).toString(\\\"hex\\\")};return e&&(n.recoveryParam=t[64]),n}var w={ES256K:function(r,e,t){var n=f(r),o=v(e),i=t.find(function(r){return p.keyFromPublic(r.publicKeyHex,\\\"hex\\\").verify(n,o)});if(!i)throw new Error(\\\"Signature invalid for JWT\\\");return i},\\\"ES256K-R\\\":function(r,e,t){var n=v(e,!0),o=f(r),i=p.recoverPubKey(o,n,n.recoveryParam),a=i.encode(\\\"hex\\\"),u=i.encode(\\\"hex\\\",!0),c=s(a),d=t.find(function(r){var e=r.publicKeyHex;return e===a||e===u||r.ethereumAddress===c});if(!d)throw new Error(\\\"Signature invalid for JWT\\\");return d},Ed25519:function(r,e,t){var n=i.encode(r),a=l(u.toBase64(e)),c=t.find(function(r){return o.sign.detached.verify(n,a,l(r.publicKeyBase64))});if(!c)throw new Error(\\\"Signature invalid for JWT\\\");return c}};function y(r){var e=w[r];if(!e)throw new Error(\\\"Unsupported algorithm \\\"+r);return e}function g(r){return\\\"object\\\"==typeof r&&\\\"r\\\"in r&&\\\"s\\\"in r}function m(r){return function(e,t){try{return Promise.resolve(t(e)).then(function(e){if(g(e))return function(t){var n=e.r,o=e.s,i=e.recoveryParam,c=a.Buffer.alloc(r?65:64);if(a.Buffer.from(n,\\\"hex\\\").copy(c,0),a.Buffer.from(o,\\\"hex\\\").copy(c,32),r){if(void 0===i)throw new Error(\\\"Signer did not return a recoveryParam\\\");c[64]=i}return u.encode(c)}();throw new Error(\\\"expected a signer function that returns a signature object instead of string\\\")})}catch(r){return Promise.reject(r)}}}y.toSignatureObject=v;var E={ES256K:m(),\\\"ES256K-R\\\":m(!0),Ed25519:function(r,e){try{return Promise.resolve(e(r)).then(function(r){if(g(r))throw new Error(\\\"expected a signer function that returns a string instead of signature object\\\");return r})}catch(r){return Promise.reject(r)}}},b={ES256K:[\\\"Secp256k1VerificationKey2018\\\",\\\"Secp256k1SignatureVerificationKey2018\\\",\\\"EcdsaPublicKeySecp256k1\\\"],\\\"ES256K-R\\\":[\\\"Secp256k1VerificationKey2018\\\",\\\"Secp256k1SignatureVerificationKey2018\\\",\\\"EcdsaPublicKeySecp256k1\\\"],Ed25519:[\\\"ED25519SignatureVerification\\\"]};function S(r){return u.encode(JSON.stringify(r))}function x(r){return r.match(/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/)}function P(r){if(r.match(/^did:/))return r;if(x(r))return\\\"did:uport:\\\"+r;throw new Error(\\\"Not a valid DID '\\\"+r+\\\"'\\\")}function k(r){if(!r)throw new Error(\\\"no JWT passed into decodeJWT\\\");var e=r.match(/^([a-zA-Z0-9_-]+)\\\\.([a-zA-Z0-9_-]+)\\\\.([a-zA-Z0-9_-]+)$/);if(e)return{header:JSON.parse(u.decode(e[1])),payload:JSON.parse(u.decode(e[2])),signature:e[3],data:e[1]+\\\".\\\"+e[2]};throw new Error(\\\"Incorrect format JWT\\\")}exports.SimpleSigner=function(r){var e=d.keyFromPrivate(r);return function(r){try{var t=e.sign(f(r)),n=t.s,o=t.recoveryParam;return Promise.resolve({r:h(t.r.toString(\\\"hex\\\")),s:h(n.toString(\\\"hex\\\")),recoveryParam:o})}catch(r){return Promise.reject(r)}}},exports.NaclSigner=function(r){var e=l(r);return function(r){try{var t=i.encode(r),n=o.sign.detached(t,e),c=u.encode(a.Buffer.from(n));return Promise.resolve(c)}catch(r){return Promise.reject(r)}}},exports.verifyJWT=function(r,e){void 0===e&&(e={auth:null,audience:null,callbackUrl:null});try{var t=e.audience?P(e.audience):void 0,n=k(r),o=n.payload,i=n.header,a=n.signature,u=n.data;return Promise.resolve(function(r,e,t){try{var n=b[r];if(!n||0===n.length)throw new Error(\\\"No supported signature types for algorithm \\\"+r);var o=P(e);return Promise.resolve(c(o)).then(function(e){if(!e)throw new Error(\\\"Unable to resolve DID document for \\\"+o);var i=!t||(e.authentication||[]).map(function(r){return r.publicKey}),a=(e.publicKey||[]).filter(function(r){var e=r.type,o=r.id;return n.find(function(r){return r===e&&(!t||Array.isArray(i)&&i.indexOf(o)>=0)})});if(t&&(!a||0===a.length))throw new Error(\\\"DID document for \\\"+o+\\\" does not have public keys suitable for authenticationg user\\\");if(!a||0===a.length)throw new Error(\\\"DID document for \\\"+o+\\\" does not have public keys for \\\"+r);return{authenticators:a,issuer:o,doc:e}})}catch(r){return Promise.reject(r)}}(i.alg,o.iss,e.auth)).then(function(n){var c,f=n.doc,s=n.authenticators,d=n.issuer,h=y(i.alg)(u,a,s),l=Math.floor(Date.now()/1e3);if(h){if(o.iat&&o.iat>l+300)throw new Error(\\\"JWT not valid yet (issued in the future): iat: \\\"+o.iat+\\\" > now: \\\"+l);if(o.exp&&o.exp<=l-300)throw new Error(\\\"JWT has expired: exp: \\\"+o.exp+\\\" < now: \\\"+l);if(o.aud)if((c=o.aud)&&(c.match(/^did:/)||x(c))){if(!t)throw new Error(\\\"JWT audience is required but your app address has not been configured\\\");if(t!==P(o.aud))throw new Error(\\\"JWT audience does not match your DID: aud: \\\"+o.aud+\\\" !== yours: \\\"+t)}else{if(!e.callbackUrl)throw new Error(\\\"JWT audience matching your callback url is required but one wasn't passed in\\\");if(o.aud!==e.callbackUrl)throw new Error(\\\"JWT audience does not match the callback url: aud: \\\"+o.aud+\\\" !== url: \\\"+e.callbackUrl)}return{payload:o,doc:f,issuer:d,signer:h,jwt:r}}})}catch(r){return Promise.reject(r)}},exports.createJWT=function(r,e){var t=e.issuer,n=e.signer,o=e.alg,i=e.expiresIn;try{if(!n)throw new Error(\\\"No Signer functionality has been configured\\\");if(!t)throw new Error(\\\"No issuing DID has been configured\\\");var a={typ:\\\"JWT\\\",alg:o||\\\"ES256K\\\"},u={iat:Math.floor(Date.now()/1e3),exp:void 0};if(i){if(\\\"number\\\"!=typeof i)throw new Error(\\\"JWT expiresIn is not a number\\\");u.exp=u.iat+Math.floor(i)}var c=[S(a),S(Object.assign({},u,r,{iss:t}))].join(\\\".\\\"),f=function(r){var e=E[r];if(!e)throw new Error(\\\"Unsupported algorithm \\\"+r);return e}(a.alg);return Promise.resolve(f(c,n)).then(function(r){return[c,r].join(\\\".\\\")})}catch(r){return Promise.reject(r)}},exports.decodeJWT=k,exports.toEthereumAddress=s;\\n//# sourceMappingURL=index.js.map\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/did-jwt/lib/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/did-jwt/node_modules/js-sha3/src/sha3.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/did-jwt/node_modules/js-sha3/src/sha3.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\\n *\\n * @version 0.8.0\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\n * @copyright Chen, Yi-Cyuan 2015-2018\\n * @license MIT\\n */\\n/*jslint bitwise: true */\\n(function () {\\n 'use strict';\\n\\n var INPUT_ERROR = 'input is invalid type';\\n var FINALIZE_ERROR = 'finalize already called';\\n var WINDOW = typeof window === 'object';\\n var root = WINDOW ? window : {};\\n if (root.JS_SHA3_NO_WINDOW) {\\n WINDOW = false;\\n }\\n var WEB_WORKER = !WINDOW && typeof self === 'object';\\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\n if (NODE_JS) {\\n root = global;\\n } else if (WEB_WORKER) {\\n root = self;\\n }\\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\\n var AMD = true && __webpack_require__(/*! !webpack amd options */ \\\"./node_modules/webpack/buildin/amd-options.js\\\");\\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\\n var HEX_CHARS = '0123456789abcdef'.split('');\\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\\n var PADDING = [6, 1536, 393216, 100663296];\\n var SHIFT = [0, 8, 16, 24];\\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\\n var BITS = [224, 256, 384, 512];\\n var SHAKE_BITS = [128, 256];\\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\\n var CSHAKE_BYTEPAD = {\\n '128': 168,\\n '256': 136\\n };\\n\\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\\n Array.isArray = function (obj) {\\n return Object.prototype.toString.call(obj) === '[object Array]';\\n };\\n }\\n\\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\\n ArrayBuffer.isView = function (obj) {\\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\\n };\\n }\\n\\n var createOutputMethod = function (bits, padding, outputType) {\\n return function (message) {\\n return new Keccak(bits, padding, bits).update(message)[outputType]();\\n };\\n };\\n\\n var createShakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits) {\\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\\n };\\n };\\n\\n var createCshakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits, n, s) {\\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\\n };\\n };\\n\\n var createKmacOutputMethod = function (bits, padding, outputType) {\\n return function (key, message, outputBits, s) {\\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\\n };\\n };\\n\\n var createOutputMethods = function (method, createMethod, bits, padding) {\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createMethod(bits, padding, type);\\n }\\n return method;\\n };\\n\\n var createMethod = function (bits, padding) {\\n var method = createOutputMethod(bits, padding, 'hex');\\n method.create = function () {\\n return new Keccak(bits, padding, bits);\\n };\\n method.update = function (message) {\\n return method.create().update(message);\\n };\\n return createOutputMethods(method, createOutputMethod, bits, padding);\\n };\\n\\n var createShakeMethod = function (bits, padding) {\\n var method = createShakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits) {\\n return new Keccak(bits, padding, outputBits);\\n };\\n method.update = function (message, outputBits) {\\n return method.create(outputBits).update(message);\\n };\\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\\n };\\n\\n var createCshakeMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createCshakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits, n, s) {\\n if (!n && !s) {\\n return methods['shake' + bits].create(outputBits);\\n } else {\\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\\n }\\n };\\n method.update = function (message, outputBits, n, s) {\\n return method.create(outputBits, n, s).update(message);\\n };\\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\\n };\\n\\n var createKmacMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createKmacOutputMethod(bits, padding, 'hex');\\n method.create = function (key, outputBits, s) {\\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\\n };\\n method.update = function (key, message, outputBits, s) {\\n return method.create(key, outputBits, s).update(message);\\n };\\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\\n };\\n\\n var algorithms = [\\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\\n ];\\n\\n var methods = {}, methodNames = [];\\n\\n for (var i = 0; i < algorithms.length; ++i) {\\n var algorithm = algorithms[i];\\n var bits = algorithm.bits;\\n for (var j = 0; j < bits.length; ++j) {\\n var methodName = algorithm.name + '_' + bits[j];\\n methodNames.push(methodName);\\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\\n if (algorithm.name !== 'sha3') {\\n var newMethodName = algorithm.name + bits[j];\\n methodNames.push(newMethodName);\\n methods[newMethodName] = methods[methodName];\\n }\\n }\\n }\\n\\n function Keccak(bits, padding, outputBits) {\\n this.blocks = [];\\n this.s = [];\\n this.padding = padding;\\n this.outputBits = outputBits;\\n this.reset = true;\\n this.finalized = false;\\n this.block = 0;\\n this.start = 0;\\n this.blockCount = (1600 - (bits << 1)) >> 5;\\n this.byteCount = this.blockCount << 2;\\n this.outputBlocks = outputBits >> 5;\\n this.extraBytes = (outputBits & 31) >> 3;\\n\\n for (var i = 0; i < 50; ++i) {\\n this.s[i] = 0;\\n }\\n }\\n\\n Keccak.prototype.update = function (message) {\\n if (this.finalized) {\\n throw new Error(FINALIZE_ERROR);\\n }\\n var notString, type = typeof message;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (message === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n } else if (!Array.isArray(message)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\\n\\n while (index < length) {\\n if (this.reset) {\\n this.reset = false;\\n blocks[0] = this.block;\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n if (notString) {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\n }\\n } else {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n code = message.charCodeAt(index);\\n if (code < 0x80) {\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\n } else if (code < 0x800) {\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else if (code < 0xd800 || code >= 0xe000) {\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n }\\n }\\n }\\n this.lastByteIndex = i;\\n if (i >= byteCount) {\\n this.start = i - byteCount;\\n this.block = blocks[blockCount];\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n this.reset = true;\\n } else {\\n this.start = i;\\n }\\n }\\n return this;\\n };\\n\\n Keccak.prototype.encode = function (x, right) {\\n var o = x & 255, n = 1;\\n var bytes = [o];\\n x = x >> 8;\\n o = x & 255;\\n while (o > 0) {\\n bytes.unshift(o);\\n x = x >> 8;\\n o = x & 255;\\n ++n;\\n }\\n if (right) {\\n bytes.push(n);\\n } else {\\n bytes.unshift(n);\\n }\\n this.update(bytes);\\n return bytes.length;\\n };\\n\\n Keccak.prototype.encodeString = function (str) {\\n var notString, type = typeof str;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (str === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\\n str = new Uint8Array(str);\\n } else if (!Array.isArray(str)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var bytes = 0, length = str.length;\\n if (notString) {\\n bytes = length;\\n } else {\\n for (var i = 0; i < str.length; ++i) {\\n var code = str.charCodeAt(i);\\n if (code < 0x80) {\\n bytes += 1;\\n } else if (code < 0x800) {\\n bytes += 2;\\n } else if (code < 0xd800 || code >= 0xe000) {\\n bytes += 3;\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\\n bytes += 4;\\n }\\n }\\n }\\n bytes += this.encode(bytes * 8);\\n this.update(str);\\n return bytes;\\n };\\n\\n Keccak.prototype.bytepad = function (strs, w) {\\n var bytes = this.encode(w);\\n for (var i = 0; i < strs.length; ++i) {\\n bytes += this.encodeString(strs[i]);\\n }\\n var paddingBytes = w - bytes % w;\\n var zeros = [];\\n zeros.length = paddingBytes;\\n this.update(zeros);\\n return this;\\n };\\n\\n Keccak.prototype.finalize = function () {\\n if (this.finalized) {\\n return;\\n }\\n this.finalized = true;\\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\\n blocks[i >> 2] |= this.padding[i & 3];\\n if (this.lastByteIndex === this.byteCount) {\\n blocks[0] = blocks[blockCount];\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n blocks[blockCount - 1] |= 0x80000000;\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n };\\n\\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var hex = '', block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n i = 0;\\n }\\n }\\n if (extraBytes) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\\n if (extraBytes > 1) {\\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\\n }\\n if (extraBytes > 2) {\\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\\n }\\n }\\n return hex;\\n };\\n\\n Keccak.prototype.arrayBuffer = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var bytes = this.outputBits >> 3;\\n var buffer;\\n if (extraBytes) {\\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\\n } else {\\n buffer = new ArrayBuffer(bytes);\\n }\\n var array = new Uint32Array(buffer);\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n array[j] = s[i];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n array[i] = s[i];\\n buffer = buffer.slice(0, bytes);\\n }\\n return buffer;\\n };\\n\\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\\n\\n Keccak.prototype.digest = Keccak.prototype.array = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var array = [], offset, block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n array[offset + 1] = (block >> 8) & 0xFF;\\n array[offset + 2] = (block >> 16) & 0xFF;\\n array[offset + 3] = (block >> 24) & 0xFF;\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n if (extraBytes > 1) {\\n array[offset + 1] = (block >> 8) & 0xFF;\\n }\\n if (extraBytes > 2) {\\n array[offset + 2] = (block >> 16) & 0xFF;\\n }\\n }\\n return array;\\n };\\n\\n function Kmac(bits, padding, outputBits) {\\n Keccak.call(this, bits, padding, outputBits);\\n }\\n\\n Kmac.prototype = new Keccak();\\n\\n Kmac.prototype.finalize = function () {\\n this.encode(this.outputBits, true);\\n return Keccak.prototype.finalize.call(this);\\n };\\n\\n var f = function (s) {\\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\\n for (n = 0; n < 48; n += 2) {\\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\\n\\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\\n s[0] ^= h;\\n s[1] ^= l;\\n s[10] ^= h;\\n s[11] ^= l;\\n s[20] ^= h;\\n s[21] ^= l;\\n s[30] ^= h;\\n s[31] ^= l;\\n s[40] ^= h;\\n s[41] ^= l;\\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\\n s[2] ^= h;\\n s[3] ^= l;\\n s[12] ^= h;\\n s[13] ^= l;\\n s[22] ^= h;\\n s[23] ^= l;\\n s[32] ^= h;\\n s[33] ^= l;\\n s[42] ^= h;\\n s[43] ^= l;\\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\\n s[4] ^= h;\\n s[5] ^= l;\\n s[14] ^= h;\\n s[15] ^= l;\\n s[24] ^= h;\\n s[25] ^= l;\\n s[34] ^= h;\\n s[35] ^= l;\\n s[44] ^= h;\\n s[45] ^= l;\\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\\n s[6] ^= h;\\n s[7] ^= l;\\n s[16] ^= h;\\n s[17] ^= l;\\n s[26] ^= h;\\n s[27] ^= l;\\n s[36] ^= h;\\n s[37] ^= l;\\n s[46] ^= h;\\n s[47] ^= l;\\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\\n s[8] ^= h;\\n s[9] ^= l;\\n s[18] ^= h;\\n s[19] ^= l;\\n s[28] ^= h;\\n s[29] ^= l;\\n s[38] ^= h;\\n s[39] ^= l;\\n s[48] ^= h;\\n s[49] ^= l;\\n\\n b0 = s[0];\\n b1 = s[1];\\n b32 = (s[11] << 4) | (s[10] >>> 28);\\n b33 = (s[10] << 4) | (s[11] >>> 28);\\n b14 = (s[20] << 3) | (s[21] >>> 29);\\n b15 = (s[21] << 3) | (s[20] >>> 29);\\n b46 = (s[31] << 9) | (s[30] >>> 23);\\n b47 = (s[30] << 9) | (s[31] >>> 23);\\n b28 = (s[40] << 18) | (s[41] >>> 14);\\n b29 = (s[41] << 18) | (s[40] >>> 14);\\n b20 = (s[2] << 1) | (s[3] >>> 31);\\n b21 = (s[3] << 1) | (s[2] >>> 31);\\n b2 = (s[13] << 12) | (s[12] >>> 20);\\n b3 = (s[12] << 12) | (s[13] >>> 20);\\n b34 = (s[22] << 10) | (s[23] >>> 22);\\n b35 = (s[23] << 10) | (s[22] >>> 22);\\n b16 = (s[33] << 13) | (s[32] >>> 19);\\n b17 = (s[32] << 13) | (s[33] >>> 19);\\n b48 = (s[42] << 2) | (s[43] >>> 30);\\n b49 = (s[43] << 2) | (s[42] >>> 30);\\n b40 = (s[5] << 30) | (s[4] >>> 2);\\n b41 = (s[4] << 30) | (s[5] >>> 2);\\n b22 = (s[14] << 6) | (s[15] >>> 26);\\n b23 = (s[15] << 6) | (s[14] >>> 26);\\n b4 = (s[25] << 11) | (s[24] >>> 21);\\n b5 = (s[24] << 11) | (s[25] >>> 21);\\n b36 = (s[34] << 15) | (s[35] >>> 17);\\n b37 = (s[35] << 15) | (s[34] >>> 17);\\n b18 = (s[45] << 29) | (s[44] >>> 3);\\n b19 = (s[44] << 29) | (s[45] >>> 3);\\n b10 = (s[6] << 28) | (s[7] >>> 4);\\n b11 = (s[7] << 28) | (s[6] >>> 4);\\n b42 = (s[17] << 23) | (s[16] >>> 9);\\n b43 = (s[16] << 23) | (s[17] >>> 9);\\n b24 = (s[26] << 25) | (s[27] >>> 7);\\n b25 = (s[27] << 25) | (s[26] >>> 7);\\n b6 = (s[36] << 21) | (s[37] >>> 11);\\n b7 = (s[37] << 21) | (s[36] >>> 11);\\n b38 = (s[47] << 24) | (s[46] >>> 8);\\n b39 = (s[46] << 24) | (s[47] >>> 8);\\n b30 = (s[8] << 27) | (s[9] >>> 5);\\n b31 = (s[9] << 27) | (s[8] >>> 5);\\n b12 = (s[18] << 20) | (s[19] >>> 12);\\n b13 = (s[19] << 20) | (s[18] >>> 12);\\n b44 = (s[29] << 7) | (s[28] >>> 25);\\n b45 = (s[28] << 7) | (s[29] >>> 25);\\n b26 = (s[38] << 8) | (s[39] >>> 24);\\n b27 = (s[39] << 8) | (s[38] >>> 24);\\n b8 = (s[48] << 14) | (s[49] >>> 18);\\n b9 = (s[49] << 14) | (s[48] >>> 18);\\n\\n s[0] = b0 ^ (~b2 & b4);\\n s[1] = b1 ^ (~b3 & b5);\\n s[10] = b10 ^ (~b12 & b14);\\n s[11] = b11 ^ (~b13 & b15);\\n s[20] = b20 ^ (~b22 & b24);\\n s[21] = b21 ^ (~b23 & b25);\\n s[30] = b30 ^ (~b32 & b34);\\n s[31] = b31 ^ (~b33 & b35);\\n s[40] = b40 ^ (~b42 & b44);\\n s[41] = b41 ^ (~b43 & b45);\\n s[2] = b2 ^ (~b4 & b6);\\n s[3] = b3 ^ (~b5 & b7);\\n s[12] = b12 ^ (~b14 & b16);\\n s[13] = b13 ^ (~b15 & b17);\\n s[22] = b22 ^ (~b24 & b26);\\n s[23] = b23 ^ (~b25 & b27);\\n s[32] = b32 ^ (~b34 & b36);\\n s[33] = b33 ^ (~b35 & b37);\\n s[42] = b42 ^ (~b44 & b46);\\n s[43] = b43 ^ (~b45 & b47);\\n s[4] = b4 ^ (~b6 & b8);\\n s[5] = b5 ^ (~b7 & b9);\\n s[14] = b14 ^ (~b16 & b18);\\n s[15] = b15 ^ (~b17 & b19);\\n s[24] = b24 ^ (~b26 & b28);\\n s[25] = b25 ^ (~b27 & b29);\\n s[34] = b34 ^ (~b36 & b38);\\n s[35] = b35 ^ (~b37 & b39);\\n s[44] = b44 ^ (~b46 & b48);\\n s[45] = b45 ^ (~b47 & b49);\\n s[6] = b6 ^ (~b8 & b0);\\n s[7] = b7 ^ (~b9 & b1);\\n s[16] = b16 ^ (~b18 & b10);\\n s[17] = b17 ^ (~b19 & b11);\\n s[26] = b26 ^ (~b28 & b20);\\n s[27] = b27 ^ (~b29 & b21);\\n s[36] = b36 ^ (~b38 & b30);\\n s[37] = b37 ^ (~b39 & b31);\\n s[46] = b46 ^ (~b48 & b40);\\n s[47] = b47 ^ (~b49 & b41);\\n s[8] = b8 ^ (~b0 & b2);\\n s[9] = b9 ^ (~b1 & b3);\\n s[18] = b18 ^ (~b10 & b12);\\n s[19] = b19 ^ (~b11 & b13);\\n s[28] = b28 ^ (~b20 & b22);\\n s[29] = b29 ^ (~b21 & b23);\\n s[38] = b38 ^ (~b30 & b32);\\n s[39] = b39 ^ (~b31 & b33);\\n s[48] = b48 ^ (~b40 & b42);\\n s[49] = b49 ^ (~b41 & b43);\\n\\n s[0] ^= RC[n];\\n s[1] ^= RC[n + 1];\\n }\\n };\\n\\n if (COMMON_JS) {\\n module.exports = methods;\\n } else {\\n for (i = 0; i < methodNames.length; ++i) {\\n root[methodNames[i]] = methods[methodNames[i]];\\n }\\n if (AMD) {\\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\\n return methods;\\n }).call(exports, __webpack_require__, exports, module),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n }\\n }\\n})();\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/did-jwt/node_modules/js-sha3/src/sha3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/did-resolver/lib/resolver.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/did-resolver/lib/resolver.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(global) {\\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\nvar __generator = (this && this.__generator) || function (thisArg, body) {\\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n return g = { next: verb(0), \\\"throw\\\": verb(1), \\\"return\\\": verb(2) }, typeof Symbol === \\\"function\\\" && (g[Symbol.iterator] = function() { return this; }), g;\\n function verb(n) { return function (v) { return step([n, v]); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\"Generator is already executing.\\\");\\n while (_) try {\\n if (f = 1, y && (t = op[0] & 2 ? y[\\\"return\\\"] : op[0] ? y[\\\"throw\\\"] || ((t = y[\\\"return\\\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\\n if (y = 0, t) op = [op[0] & 2, t.value];\\n switch (op[0]) {\\n case 0: case 1: t = op; break;\\n case 4: _.label++; return { value: op[1], done: false };\\n case 5: _.label++; y = op[1]; op = [0]; continue;\\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\\n if (t[2]) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op = body.call(thisArg, _);\\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\\n }\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar globalObject;\\nvar REGISTRY;\\nif (typeof window === 'object') {\\n globalObject = window;\\n}\\nelse if (typeof global === 'object') {\\n globalObject = global;\\n}\\nelse {\\n globalObject = {\\n DID_REGISTRY: {}\\n };\\n}\\nif (globalObject.DID_REGISTRY) {\\n REGISTRY = globalObject.DID_REGISTRY;\\n}\\nelse {\\n REGISTRY = globalObject.DID_REGISTRY = {};\\n}\\nfunction registerMethod(method, resolver) {\\n REGISTRY[method] = resolver;\\n}\\nexports.registerMethod = registerMethod;\\nfunction parse(did) {\\n if (did === '')\\n throw new Error('Missing DID');\\n var sections = did.match(/^did:([a-zA-Z0-9_]+):([[a-zA-Z0-9_.-]+)(\\\\/[^#]*)?(#.*)?$/);\\n if (sections) {\\n var parts = { did: sections[0], method: sections[1], id: sections[2] };\\n if (sections[3])\\n parts.path = sections[3];\\n if (sections[4])\\n parts.fragment = sections[4].slice(1);\\n return parts;\\n }\\n throw new Error(\\\"Invalid DID \\\" + did);\\n}\\nexports.parse = parse;\\nfunction resolve(did) {\\n return __awaiter(this, void 0, void 0, function () {\\n var parsed, resolver;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n parsed = parse(did);\\n resolver = REGISTRY[parsed.method];\\n if (!resolver) return [3 /*break*/, 2];\\n return [4 /*yield*/, resolver(did, parsed)];\\n case 1: return [2 /*return*/, _a.sent()];\\n case 2: throw new Error(\\\"Unsupported DID method: '\\\" + parsed.method + \\\"'\\\");\\n }\\n });\\n });\\n}\\nexports.default = resolve;\\n//# sourceMappingURL=resolver.js.map\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/did-resolver/lib/resolver.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar elliptic = exports;\\n\\nelliptic.version = __webpack_require__(/*! ../package.json */ \\\"./node_modules/elliptic/package.json\\\").version;\\nelliptic.utils = __webpack_require__(/*! ./elliptic/utils */ \\\"./node_modules/elliptic/lib/elliptic/utils.js\\\");\\nelliptic.rand = __webpack_require__(/*! brorand */ \\\"./node_modules/brorand/index.js\\\");\\nelliptic.curve = __webpack_require__(/*! ./elliptic/curve */ \\\"./node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nelliptic.curves = __webpack_require__(/*! ./elliptic/curves */ \\\"./node_modules/elliptic/lib/elliptic/curves.js\\\");\\n\\n// Protocols\\nelliptic.ec = __webpack_require__(/*! ./elliptic/ec */ \\\"./node_modules/elliptic/lib/elliptic/ec/index.js\\\");\\nelliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ \\\"./node_modules/elliptic/lib/elliptic/eddsa/index.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/base.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/base.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar getNAF = utils.getNAF;\\nvar getJSF = utils.getJSF;\\nvar assert = utils.assert;\\n\\nfunction BaseCurve(type, conf) {\\n this.type = type;\\n this.p = new BN(conf.p, 16);\\n\\n // Use Montgomery, when there is no fast reduction for the prime\\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\\n\\n // Useful for many curves\\n this.zero = new BN(0).toRed(this.red);\\n this.one = new BN(1).toRed(this.red);\\n this.two = new BN(2).toRed(this.red);\\n\\n // Curve configuration, optional\\n this.n = conf.n && new BN(conf.n, 16);\\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\\n\\n // Temporary arrays\\n this._wnafT1 = new Array(4);\\n this._wnafT2 = new Array(4);\\n this._wnafT3 = new Array(4);\\n this._wnafT4 = new Array(4);\\n\\n // Generalized Greg Maxwell's trick\\n var adjustCount = this.n && this.p.div(this.n);\\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\\n this.redN = null;\\n } else {\\n this._maxwellTrick = true;\\n this.redN = this.n.toRed(this.red);\\n }\\n}\\nmodule.exports = BaseCurve;\\n\\nBaseCurve.prototype.point = function point() {\\n throw new Error('Not implemented');\\n};\\n\\nBaseCurve.prototype.validate = function validate() {\\n throw new Error('Not implemented');\\n};\\n\\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\\n assert(p.precomputed);\\n var doubles = p._getDoubles();\\n\\n var naf = getNAF(k, 1);\\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\\n I /= 3;\\n\\n // Translate into more windowed form\\n var repr = [];\\n for (var j = 0; j < naf.length; j += doubles.step) {\\n var nafW = 0;\\n for (var k = j + doubles.step - 1; k >= j; k--)\\n nafW = (nafW << 1) + naf[k];\\n repr.push(nafW);\\n }\\n\\n var a = this.jpoint(null, null, null);\\n var b = this.jpoint(null, null, null);\\n for (var i = I; i > 0; i--) {\\n for (var j = 0; j < repr.length; j++) {\\n var nafW = repr[j];\\n if (nafW === i)\\n b = b.mixedAdd(doubles.points[j]);\\n else if (nafW === -i)\\n b = b.mixedAdd(doubles.points[j].neg());\\n }\\n a = a.add(b);\\n }\\n return a.toP();\\n};\\n\\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\\n var w = 4;\\n\\n // Precompute window\\n var nafPoints = p._getNAFPoints(w);\\n w = nafPoints.wnd;\\n var wnd = nafPoints.points;\\n\\n // Get NAF form\\n var naf = getNAF(k, w);\\n\\n // Add `this`*(N+1) for every w-NAF index\\n var acc = this.jpoint(null, null, null);\\n for (var i = naf.length - 1; i >= 0; i--) {\\n // Count zeroes\\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\\n k++;\\n if (i >= 0)\\n k++;\\n acc = acc.dblp(k);\\n\\n if (i < 0)\\n break;\\n var z = naf[i];\\n assert(z !== 0);\\n if (p.type === 'affine') {\\n // J +- P\\n if (z > 0)\\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\\n else\\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\\n } else {\\n // J +- J\\n if (z > 0)\\n acc = acc.add(wnd[(z - 1) >> 1]);\\n else\\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\\n }\\n }\\n return p.type === 'affine' ? acc.toP() : acc;\\n};\\n\\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\\n points,\\n coeffs,\\n len,\\n jacobianResult) {\\n var wndWidth = this._wnafT1;\\n var wnd = this._wnafT2;\\n var naf = this._wnafT3;\\n\\n // Fill all arrays\\n var max = 0;\\n for (var i = 0; i < len; i++) {\\n var p = points[i];\\n var nafPoints = p._getNAFPoints(defW);\\n wndWidth[i] = nafPoints.wnd;\\n wnd[i] = nafPoints.points;\\n }\\n\\n // Comb small window NAFs\\n for (var i = len - 1; i >= 1; i -= 2) {\\n var a = i - 1;\\n var b = i;\\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\\n naf[a] = getNAF(coeffs[a], wndWidth[a]);\\n naf[b] = getNAF(coeffs[b], wndWidth[b]);\\n max = Math.max(naf[a].length, max);\\n max = Math.max(naf[b].length, max);\\n continue;\\n }\\n\\n var comb = [\\n points[a], /* 1 */\\n null, /* 3 */\\n null, /* 5 */\\n points[b] /* 7 */\\n ];\\n\\n // Try to avoid Projective points, if possible\\n if (points[a].y.cmp(points[b].y) === 0) {\\n comb[1] = points[a].add(points[b]);\\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\\n comb[1] = points[a].toJ().mixedAdd(points[b]);\\n comb[2] = points[a].add(points[b].neg());\\n } else {\\n comb[1] = points[a].toJ().mixedAdd(points[b]);\\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\\n }\\n\\n var index = [\\n -3, /* -1 -1 */\\n -1, /* -1 0 */\\n -5, /* -1 1 */\\n -7, /* 0 -1 */\\n 0, /* 0 0 */\\n 7, /* 0 1 */\\n 5, /* 1 -1 */\\n 1, /* 1 0 */\\n 3 /* 1 1 */\\n ];\\n\\n var jsf = getJSF(coeffs[a], coeffs[b]);\\n max = Math.max(jsf[0].length, max);\\n naf[a] = new Array(max);\\n naf[b] = new Array(max);\\n for (var j = 0; j < max; j++) {\\n var ja = jsf[0][j] | 0;\\n var jb = jsf[1][j] | 0;\\n\\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\\n naf[b][j] = 0;\\n wnd[a] = comb;\\n }\\n }\\n\\n var acc = this.jpoint(null, null, null);\\n var tmp = this._wnafT4;\\n for (var i = max; i >= 0; i--) {\\n var k = 0;\\n\\n while (i >= 0) {\\n var zero = true;\\n for (var j = 0; j < len; j++) {\\n tmp[j] = naf[j][i] | 0;\\n if (tmp[j] !== 0)\\n zero = false;\\n }\\n if (!zero)\\n break;\\n k++;\\n i--;\\n }\\n if (i >= 0)\\n k++;\\n acc = acc.dblp(k);\\n if (i < 0)\\n break;\\n\\n for (var j = 0; j < len; j++) {\\n var z = tmp[j];\\n var p;\\n if (z === 0)\\n continue;\\n else if (z > 0)\\n p = wnd[j][(z - 1) >> 1];\\n else if (z < 0)\\n p = wnd[j][(-z - 1) >> 1].neg();\\n\\n if (p.type === 'affine')\\n acc = acc.mixedAdd(p);\\n else\\n acc = acc.add(p);\\n }\\n }\\n // Zeroify references\\n for (var i = 0; i < len; i++)\\n wnd[i] = null;\\n\\n if (jacobianResult)\\n return acc;\\n else\\n return acc.toP();\\n};\\n\\nfunction BasePoint(curve, type) {\\n this.curve = curve;\\n this.type = type;\\n this.precomputed = null;\\n}\\nBaseCurve.BasePoint = BasePoint;\\n\\nBasePoint.prototype.eq = function eq(/*other*/) {\\n throw new Error('Not implemented');\\n};\\n\\nBasePoint.prototype.validate = function validate() {\\n return this.curve.validate(this);\\n};\\n\\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\\n bytes = utils.toArray(bytes, enc);\\n\\n var len = this.p.byteLength();\\n\\n // uncompressed, hybrid-odd, hybrid-even\\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\\n bytes.length - 1 === 2 * len) {\\n if (bytes[0] === 0x06)\\n assert(bytes[bytes.length - 1] % 2 === 0);\\n else if (bytes[0] === 0x07)\\n assert(bytes[bytes.length - 1] % 2 === 1);\\n\\n var res = this.point(bytes.slice(1, 1 + len),\\n bytes.slice(1 + len, 1 + 2 * len));\\n\\n return res;\\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\\n bytes.length - 1 === len) {\\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\\n }\\n throw new Error('Unknown point format');\\n};\\n\\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\\n return this.encode(enc, true);\\n};\\n\\nBasePoint.prototype._encode = function _encode(compact) {\\n var len = this.curve.p.byteLength();\\n var x = this.getX().toArray('be', len);\\n\\n if (compact)\\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\\n\\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\\n};\\n\\nBasePoint.prototype.encode = function encode(enc, compact) {\\n return utils.encode(this._encode(compact), enc);\\n};\\n\\nBasePoint.prototype.precompute = function precompute(power) {\\n if (this.precomputed)\\n return this;\\n\\n var precomputed = {\\n doubles: null,\\n naf: null,\\n beta: null\\n };\\n precomputed.naf = this._getNAFPoints(8);\\n precomputed.doubles = this._getDoubles(4, power);\\n precomputed.beta = this._getBeta();\\n this.precomputed = precomputed;\\n\\n return this;\\n};\\n\\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\\n if (!this.precomputed)\\n return false;\\n\\n var doubles = this.precomputed.doubles;\\n if (!doubles)\\n return false;\\n\\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\\n};\\n\\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\\n if (this.precomputed && this.precomputed.doubles)\\n return this.precomputed.doubles;\\n\\n var doubles = [ this ];\\n var acc = this;\\n for (var i = 0; i < power; i += step) {\\n for (var j = 0; j < step; j++)\\n acc = acc.dbl();\\n doubles.push(acc);\\n }\\n return {\\n step: step,\\n points: doubles\\n };\\n};\\n\\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\\n if (this.precomputed && this.precomputed.naf)\\n return this.precomputed.naf;\\n\\n var res = [ this ];\\n var max = (1 << wnd) - 1;\\n var dbl = max === 1 ? null : this.dbl();\\n for (var i = 1; i < max; i++)\\n res[i] = res[i - 1].add(dbl);\\n return {\\n wnd: wnd,\\n points: res\\n };\\n};\\n\\nBasePoint.prototype._getBeta = function _getBeta() {\\n return null;\\n};\\n\\nBasePoint.prototype.dblp = function dblp(k) {\\n var r = this;\\n for (var i = 0; i < k; i++)\\n r = r.dbl();\\n return r;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/edwards.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/edwards.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = __webpack_require__(/*! ../curve */ \\\"./node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = curve.base;\\n\\nvar assert = elliptic.utils.assert;\\n\\nfunction EdwardsCurve(conf) {\\n // NOTE: Important as we are creating point in Base.call()\\n this.twisted = (conf.a | 0) !== 1;\\n this.mOneA = this.twisted && (conf.a | 0) === -1;\\n this.extended = this.mOneA;\\n\\n Base.call(this, 'edwards', conf);\\n\\n this.a = new BN(conf.a, 16).umod(this.red.m);\\n this.a = this.a.toRed(this.red);\\n this.c = new BN(conf.c, 16).toRed(this.red);\\n this.c2 = this.c.redSqr();\\n this.d = new BN(conf.d, 16).toRed(this.red);\\n this.dd = this.d.redAdd(this.d);\\n\\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\\n this.oneC = (conf.c | 0) === 1;\\n}\\ninherits(EdwardsCurve, Base);\\nmodule.exports = EdwardsCurve;\\n\\nEdwardsCurve.prototype._mulA = function _mulA(num) {\\n if (this.mOneA)\\n return num.redNeg();\\n else\\n return this.a.redMul(num);\\n};\\n\\nEdwardsCurve.prototype._mulC = function _mulC(num) {\\n if (this.oneC)\\n return num;\\n else\\n return this.c.redMul(num);\\n};\\n\\n// Just for compatibility with Short curve\\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\\n return this.point(x, y, z, t);\\n};\\n\\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\\n x = new BN(x, 16);\\n if (!x.red)\\n x = x.toRed(this.red);\\n\\n var x2 = x.redSqr();\\n var rhs = this.c2.redSub(this.a.redMul(x2));\\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\\n\\n var y2 = rhs.redMul(lhs.redInvm());\\n var y = y2.redSqrt();\\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n var isOdd = y.fromRed().isOdd();\\n if (odd && !isOdd || !odd && isOdd)\\n y = y.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\\n y = new BN(y, 16);\\n if (!y.red)\\n y = y.toRed(this.red);\\n\\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\\n var y2 = y.redSqr();\\n var lhs = y2.redSub(this.c2);\\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\\n var x2 = lhs.redMul(rhs.redInvm());\\n\\n if (x2.cmp(this.zero) === 0) {\\n if (odd)\\n throw new Error('invalid point');\\n else\\n return this.point(this.zero, y);\\n }\\n\\n var x = x2.redSqrt();\\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n if (x.fromRed().isOdd() !== odd)\\n x = x.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nEdwardsCurve.prototype.validate = function validate(point) {\\n if (point.isInfinity())\\n return true;\\n\\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\\n point.normalize();\\n\\n var x2 = point.x.redSqr();\\n var y2 = point.y.redSqr();\\n var lhs = x2.redMul(this.a).redAdd(y2);\\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\\n\\n return lhs.cmp(rhs) === 0;\\n};\\n\\nfunction Point(curve, x, y, z, t) {\\n Base.BasePoint.call(this, curve, 'projective');\\n if (x === null && y === null && z === null) {\\n this.x = this.curve.zero;\\n this.y = this.curve.one;\\n this.z = this.curve.one;\\n this.t = this.curve.zero;\\n this.zOne = true;\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n this.z = z ? new BN(z, 16) : this.curve.one;\\n this.t = t && new BN(t, 16);\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n if (this.t && !this.t.red)\\n this.t = this.t.toRed(this.curve.red);\\n this.zOne = this.z === this.curve.one;\\n\\n // Use extended coordinates\\n if (this.curve.extended && !this.t) {\\n this.t = this.x.redMul(this.y);\\n if (!this.zOne)\\n this.t = this.t.redMul(this.z.redInvm());\\n }\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\\n return Point.fromJSON(this, obj);\\n};\\n\\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\\n return new Point(this, x, y, z, t);\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj) {\\n return new Point(curve, obj[0], obj[1], obj[2]);\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' y: ' + this.y.fromRed().toString(16, 2) +\\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.x.cmpn(0) === 0 &&\\n (this.y.cmp(this.z) === 0 ||\\n (this.zOne && this.y.cmp(this.curve.c) === 0));\\n};\\n\\nPoint.prototype._extDbl = function _extDbl() {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\\n // #doubling-dbl-2008-hwcd\\n // 4M + 4S\\n\\n // A = X1^2\\n var a = this.x.redSqr();\\n // B = Y1^2\\n var b = this.y.redSqr();\\n // C = 2 * Z1^2\\n var c = this.z.redSqr();\\n c = c.redIAdd(c);\\n // D = a * A\\n var d = this.curve._mulA(a);\\n // E = (X1 + Y1)^2 - A - B\\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\\n // G = D + B\\n var g = d.redAdd(b);\\n // F = G - C\\n var f = g.redSub(c);\\n // H = D - B\\n var h = d.redSub(b);\\n // X3 = E * F\\n var nx = e.redMul(f);\\n // Y3 = G * H\\n var ny = g.redMul(h);\\n // T3 = E * H\\n var nt = e.redMul(h);\\n // Z3 = F * G\\n var nz = f.redMul(g);\\n return this.curve.point(nx, ny, nz, nt);\\n};\\n\\nPoint.prototype._projDbl = function _projDbl() {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\\n // #doubling-dbl-2008-bbjlp\\n // #doubling-dbl-2007-bl\\n // and others\\n // Generally 3M + 4S or 2M + 4S\\n\\n // B = (X1 + Y1)^2\\n var b = this.x.redAdd(this.y).redSqr();\\n // C = X1^2\\n var c = this.x.redSqr();\\n // D = Y1^2\\n var d = this.y.redSqr();\\n\\n var nx;\\n var ny;\\n var nz;\\n if (this.curve.twisted) {\\n // E = a * C\\n var e = this.curve._mulA(c);\\n // F = E + D\\n var f = e.redAdd(d);\\n if (this.zOne) {\\n // X3 = (B - C - D) * (F - 2)\\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\\n // Y3 = F * (E - D)\\n ny = f.redMul(e.redSub(d));\\n // Z3 = F^2 - 2 * F\\n nz = f.redSqr().redSub(f).redSub(f);\\n } else {\\n // H = Z1^2\\n var h = this.z.redSqr();\\n // J = F - 2 * H\\n var j = f.redSub(h).redISub(h);\\n // X3 = (B-C-D)*J\\n nx = b.redSub(c).redISub(d).redMul(j);\\n // Y3 = F * (E - D)\\n ny = f.redMul(e.redSub(d));\\n // Z3 = F * J\\n nz = f.redMul(j);\\n }\\n } else {\\n // E = C + D\\n var e = c.redAdd(d);\\n // H = (c * Z1)^2\\n var h = this.curve._mulC(this.z).redSqr();\\n // J = E - 2 * H\\n var j = e.redSub(h).redSub(h);\\n // X3 = c * (B - E) * J\\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\\n // Y3 = c * E * (C - D)\\n ny = this.curve._mulC(e).redMul(c.redISub(d));\\n // Z3 = E * J\\n nz = e.redMul(j);\\n }\\n return this.curve.point(nx, ny, nz);\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n if (this.isInfinity())\\n return this;\\n\\n // Double in extended coordinates\\n if (this.curve.extended)\\n return this._extDbl();\\n else\\n return this._projDbl();\\n};\\n\\nPoint.prototype._extAdd = function _extAdd(p) {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\\n // #addition-add-2008-hwcd-3\\n // 8M\\n\\n // A = (Y1 - X1) * (Y2 - X2)\\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\\n // B = (Y1 + X1) * (Y2 + X2)\\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\\n // C = T1 * k * T2\\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\\n // D = Z1 * 2 * Z2\\n var d = this.z.redMul(p.z.redAdd(p.z));\\n // E = B - A\\n var e = b.redSub(a);\\n // F = D - C\\n var f = d.redSub(c);\\n // G = D + C\\n var g = d.redAdd(c);\\n // H = B + A\\n var h = b.redAdd(a);\\n // X3 = E * F\\n var nx = e.redMul(f);\\n // Y3 = G * H\\n var ny = g.redMul(h);\\n // T3 = E * H\\n var nt = e.redMul(h);\\n // Z3 = F * G\\n var nz = f.redMul(g);\\n return this.curve.point(nx, ny, nz, nt);\\n};\\n\\nPoint.prototype._projAdd = function _projAdd(p) {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\\n // #addition-add-2008-bbjlp\\n // #addition-add-2007-bl\\n // 10M + 1S\\n\\n // A = Z1 * Z2\\n var a = this.z.redMul(p.z);\\n // B = A^2\\n var b = a.redSqr();\\n // C = X1 * X2\\n var c = this.x.redMul(p.x);\\n // D = Y1 * Y2\\n var d = this.y.redMul(p.y);\\n // E = d * C * D\\n var e = this.curve.d.redMul(c).redMul(d);\\n // F = B - E\\n var f = b.redSub(e);\\n // G = B + E\\n var g = b.redAdd(e);\\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\\n var nx = a.redMul(f).redMul(tmp);\\n var ny;\\n var nz;\\n if (this.curve.twisted) {\\n // Y3 = A * G * (D - a * C)\\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\\n // Z3 = F * G\\n nz = f.redMul(g);\\n } else {\\n // Y3 = A * G * (D - C)\\n ny = a.redMul(g).redMul(d.redSub(c));\\n // Z3 = c * F * G\\n nz = this.curve._mulC(f).redMul(g);\\n }\\n return this.curve.point(nx, ny, nz);\\n};\\n\\nPoint.prototype.add = function add(p) {\\n if (this.isInfinity())\\n return p;\\n if (p.isInfinity())\\n return this;\\n\\n if (this.curve.extended)\\n return this._extAdd(p);\\n else\\n return this._projAdd(p);\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n if (this._hasDoubles(k))\\n return this.curve._fixedNafMul(this, k);\\n else\\n return this.curve._wnafMul(this, k);\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\\n};\\n\\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\\n};\\n\\nPoint.prototype.normalize = function normalize() {\\n if (this.zOne)\\n return this;\\n\\n // Normalize coordinates\\n var zi = this.z.redInvm();\\n this.x = this.x.redMul(zi);\\n this.y = this.y.redMul(zi);\\n if (this.t)\\n this.t = this.t.redMul(zi);\\n this.z = this.curve.one;\\n this.zOne = true;\\n return this;\\n};\\n\\nPoint.prototype.neg = function neg() {\\n return this.curve.point(this.x.redNeg(),\\n this.y,\\n this.z,\\n this.t && this.t.redNeg());\\n};\\n\\nPoint.prototype.getX = function getX() {\\n this.normalize();\\n return this.x.fromRed();\\n};\\n\\nPoint.prototype.getY = function getY() {\\n this.normalize();\\n return this.y.fromRed();\\n};\\n\\nPoint.prototype.eq = function eq(other) {\\n return this === other ||\\n this.getX().cmp(other.getX()) === 0 &&\\n this.getY().cmp(other.getY()) === 0;\\n};\\n\\nPoint.prototype.eqXToP = function eqXToP(x) {\\n var rx = x.toRed(this.curve.red).redMul(this.z);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n\\n var xc = x.clone();\\n var t = this.curve.redN.redMul(this.z);\\n for (;;) {\\n xc.iadd(this.curve.n);\\n if (xc.cmp(this.curve.p) >= 0)\\n return false;\\n\\n rx.redIAdd(t);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n }\\n};\\n\\n// Compatibility with BaseCurve\\nPoint.prototype.toP = Point.prototype.normalize;\\nPoint.prototype.mixedAdd = Point.prototype.add;\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/index.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/index.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = exports;\\n\\ncurve.base = __webpack_require__(/*! ./base */ \\\"./node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\ncurve.short = __webpack_require__(/*! ./short */ \\\"./node_modules/elliptic/lib/elliptic/curve/short.js\\\");\\ncurve.mont = __webpack_require__(/*! ./mont */ \\\"./node_modules/elliptic/lib/elliptic/curve/mont.js\\\");\\ncurve.edwards = __webpack_require__(/*! ./edwards */ \\\"./node_modules/elliptic/lib/elliptic/curve/edwards.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/mont.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/mont.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = __webpack_require__(/*! ../curve */ \\\"./node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = curve.base;\\n\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\n\\nfunction MontCurve(conf) {\\n Base.call(this, 'mont', conf);\\n\\n this.a = new BN(conf.a, 16).toRed(this.red);\\n this.b = new BN(conf.b, 16).toRed(this.red);\\n this.i4 = new BN(4).toRed(this.red).redInvm();\\n this.two = new BN(2).toRed(this.red);\\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\\n}\\ninherits(MontCurve, Base);\\nmodule.exports = MontCurve;\\n\\nMontCurve.prototype.validate = function validate(point) {\\n var x = point.normalize().x;\\n var x2 = x.redSqr();\\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\\n var y = rhs.redSqrt();\\n\\n return y.redSqr().cmp(rhs) === 0;\\n};\\n\\nfunction Point(curve, x, z) {\\n Base.BasePoint.call(this, curve, 'projective');\\n if (x === null && z === null) {\\n this.x = this.curve.one;\\n this.z = this.curve.zero;\\n } else {\\n this.x = new BN(x, 16);\\n this.z = new BN(z, 16);\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\\n return this.point(utils.toArray(bytes, enc), 1);\\n};\\n\\nMontCurve.prototype.point = function point(x, z) {\\n return new Point(this, x, z);\\n};\\n\\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\\n return Point.fromJSON(this, obj);\\n};\\n\\nPoint.prototype.precompute = function precompute() {\\n // No-op\\n};\\n\\nPoint.prototype._encode = function _encode() {\\n return this.getX().toArray('be', this.curve.p.byteLength());\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj) {\\n return new Point(curve, obj[0], obj[1] || curve.one);\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.z.cmpn(0) === 0;\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\\n // 2M + 2S + 4A\\n\\n // A = X1 + Z1\\n var a = this.x.redAdd(this.z);\\n // AA = A^2\\n var aa = a.redSqr();\\n // B = X1 - Z1\\n var b = this.x.redSub(this.z);\\n // BB = B^2\\n var bb = b.redSqr();\\n // C = AA - BB\\n var c = aa.redSub(bb);\\n // X3 = AA * BB\\n var nx = aa.redMul(bb);\\n // Z3 = C * (BB + A24 * C)\\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\\n return this.curve.point(nx, nz);\\n};\\n\\nPoint.prototype.add = function add() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\\n // 4M + 2S + 6A\\n\\n // A = X2 + Z2\\n var a = this.x.redAdd(this.z);\\n // B = X2 - Z2\\n var b = this.x.redSub(this.z);\\n // C = X3 + Z3\\n var c = p.x.redAdd(p.z);\\n // D = X3 - Z3\\n var d = p.x.redSub(p.z);\\n // DA = D * A\\n var da = d.redMul(a);\\n // CB = C * B\\n var cb = c.redMul(b);\\n // X5 = Z1 * (DA + CB)^2\\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\\n // Z5 = X1 * (DA - CB)^2\\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\\n return this.curve.point(nx, nz);\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n var t = k.clone();\\n var a = this; // (N / 2) * Q + Q\\n var b = this.curve.point(null, null); // (N / 2) * Q\\n var c = this; // Q\\n\\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\\n bits.push(t.andln(1));\\n\\n for (var i = bits.length - 1; i >= 0; i--) {\\n if (bits[i] === 0) {\\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\\n a = a.diffAdd(b, c);\\n // N * Q = 2 * ((N / 2) * Q + Q))\\n b = b.dbl();\\n } else {\\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\\n b = a.diffAdd(b, c);\\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\\n a = a.dbl();\\n }\\n }\\n return b;\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.jumlAdd = function jumlAdd() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.eq = function eq(other) {\\n return this.getX().cmp(other.getX()) === 0;\\n};\\n\\nPoint.prototype.normalize = function normalize() {\\n this.x = this.x.redMul(this.z.redInvm());\\n this.z = this.curve.one;\\n return this;\\n};\\n\\nPoint.prototype.getX = function getX() {\\n // Normalize coordinates\\n this.normalize();\\n\\n return this.x.fromRed();\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/short.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/short.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = __webpack_require__(/*! ../curve */ \\\"./node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = curve.base;\\n\\nvar assert = elliptic.utils.assert;\\n\\nfunction ShortCurve(conf) {\\n Base.call(this, 'short', conf);\\n\\n this.a = new BN(conf.a, 16).toRed(this.red);\\n this.b = new BN(conf.b, 16).toRed(this.red);\\n this.tinv = this.two.redInvm();\\n\\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\\n\\n // If the curve is endomorphic, precalculate beta and lambda\\n this.endo = this._getEndomorphism(conf);\\n this._endoWnafT1 = new Array(4);\\n this._endoWnafT2 = new Array(4);\\n}\\ninherits(ShortCurve, Base);\\nmodule.exports = ShortCurve;\\n\\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\\n // No efficient endomorphism\\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\\n return;\\n\\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\\n var beta;\\n var lambda;\\n if (conf.beta) {\\n beta = new BN(conf.beta, 16).toRed(this.red);\\n } else {\\n var betas = this._getEndoRoots(this.p);\\n // Choose the smallest beta\\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\\n beta = beta.toRed(this.red);\\n }\\n if (conf.lambda) {\\n lambda = new BN(conf.lambda, 16);\\n } else {\\n // Choose the lambda that is matching selected beta\\n var lambdas = this._getEndoRoots(this.n);\\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\\n lambda = lambdas[0];\\n } else {\\n lambda = lambdas[1];\\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\\n }\\n }\\n\\n // Get basis vectors, used for balanced length-two representation\\n var basis;\\n if (conf.basis) {\\n basis = conf.basis.map(function(vec) {\\n return {\\n a: new BN(vec.a, 16),\\n b: new BN(vec.b, 16)\\n };\\n });\\n } else {\\n basis = this._getEndoBasis(lambda);\\n }\\n\\n return {\\n beta: beta,\\n lambda: lambda,\\n basis: basis\\n };\\n};\\n\\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\\n // Find roots of for x^2 + x + 1 in F\\n // Root = (-1 +- Sqrt(-3)) / 2\\n //\\n var red = num === this.p ? this.red : BN.mont(num);\\n var tinv = new BN(2).toRed(red).redInvm();\\n var ntinv = tinv.redNeg();\\n\\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\\n\\n var l1 = ntinv.redAdd(s).fromRed();\\n var l2 = ntinv.redSub(s).fromRed();\\n return [ l1, l2 ];\\n};\\n\\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\\n // aprxSqrt >= sqrt(this.n)\\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\\n\\n // 3.74\\n // Run EGCD, until r(L + 1) < aprxSqrt\\n var u = lambda;\\n var v = this.n.clone();\\n var x1 = new BN(1);\\n var y1 = new BN(0);\\n var x2 = new BN(0);\\n var y2 = new BN(1);\\n\\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\\n var a0;\\n var b0;\\n // First vector\\n var a1;\\n var b1;\\n // Second vector\\n var a2;\\n var b2;\\n\\n var prevR;\\n var i = 0;\\n var r;\\n var x;\\n while (u.cmpn(0) !== 0) {\\n var q = v.div(u);\\n r = v.sub(q.mul(u));\\n x = x2.sub(q.mul(x1));\\n var y = y2.sub(q.mul(y1));\\n\\n if (!a1 && r.cmp(aprxSqrt) < 0) {\\n a0 = prevR.neg();\\n b0 = x1;\\n a1 = r.neg();\\n b1 = x;\\n } else if (a1 && ++i === 2) {\\n break;\\n }\\n prevR = r;\\n\\n v = u;\\n u = r;\\n x2 = x1;\\n x1 = x;\\n y2 = y1;\\n y1 = y;\\n }\\n a2 = r.neg();\\n b2 = x;\\n\\n var len1 = a1.sqr().add(b1.sqr());\\n var len2 = a2.sqr().add(b2.sqr());\\n if (len2.cmp(len1) >= 0) {\\n a2 = a0;\\n b2 = b0;\\n }\\n\\n // Normalize signs\\n if (a1.negative) {\\n a1 = a1.neg();\\n b1 = b1.neg();\\n }\\n if (a2.negative) {\\n a2 = a2.neg();\\n b2 = b2.neg();\\n }\\n\\n return [\\n { a: a1, b: b1 },\\n { a: a2, b: b2 }\\n ];\\n};\\n\\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\\n var basis = this.endo.basis;\\n var v1 = basis[0];\\n var v2 = basis[1];\\n\\n var c1 = v2.b.mul(k).divRound(this.n);\\n var c2 = v1.b.neg().mul(k).divRound(this.n);\\n\\n var p1 = c1.mul(v1.a);\\n var p2 = c2.mul(v2.a);\\n var q1 = c1.mul(v1.b);\\n var q2 = c2.mul(v2.b);\\n\\n // Calculate answer\\n var k1 = k.sub(p1).sub(p2);\\n var k2 = q1.add(q2).neg();\\n return { k1: k1, k2: k2 };\\n};\\n\\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\\n x = new BN(x, 16);\\n if (!x.red)\\n x = x.toRed(this.red);\\n\\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\\n var y = y2.redSqrt();\\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n // XXX Is there any way to tell if the number is odd without converting it\\n // to non-red form?\\n var isOdd = y.fromRed().isOdd();\\n if (odd && !isOdd || !odd && isOdd)\\n y = y.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nShortCurve.prototype.validate = function validate(point) {\\n if (point.inf)\\n return true;\\n\\n var x = point.x;\\n var y = point.y;\\n\\n var ax = this.a.redMul(x);\\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\\n};\\n\\nShortCurve.prototype._endoWnafMulAdd =\\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\\n var npoints = this._endoWnafT1;\\n var ncoeffs = this._endoWnafT2;\\n for (var i = 0; i < points.length; i++) {\\n var split = this._endoSplit(coeffs[i]);\\n var p = points[i];\\n var beta = p._getBeta();\\n\\n if (split.k1.negative) {\\n split.k1.ineg();\\n p = p.neg(true);\\n }\\n if (split.k2.negative) {\\n split.k2.ineg();\\n beta = beta.neg(true);\\n }\\n\\n npoints[i * 2] = p;\\n npoints[i * 2 + 1] = beta;\\n ncoeffs[i * 2] = split.k1;\\n ncoeffs[i * 2 + 1] = split.k2;\\n }\\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\\n\\n // Clean-up references to points and coefficients\\n for (var j = 0; j < i * 2; j++) {\\n npoints[j] = null;\\n ncoeffs[j] = null;\\n }\\n return res;\\n};\\n\\nfunction Point(curve, x, y, isRed) {\\n Base.BasePoint.call(this, curve, 'affine');\\n if (x === null && y === null) {\\n this.x = null;\\n this.y = null;\\n this.inf = true;\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n // Force redgomery representation when loading from JSON\\n if (isRed) {\\n this.x.forceRed(this.curve.red);\\n this.y.forceRed(this.curve.red);\\n }\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n this.inf = false;\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nShortCurve.prototype.point = function point(x, y, isRed) {\\n return new Point(this, x, y, isRed);\\n};\\n\\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\\n return Point.fromJSON(this, obj, red);\\n};\\n\\nPoint.prototype._getBeta = function _getBeta() {\\n if (!this.curve.endo)\\n return;\\n\\n var pre = this.precomputed;\\n if (pre && pre.beta)\\n return pre.beta;\\n\\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\\n if (pre) {\\n var curve = this.curve;\\n var endoMul = function(p) {\\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\\n };\\n pre.beta = beta;\\n beta.precomputed = {\\n beta: null,\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: pre.naf.points.map(endoMul)\\n },\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: pre.doubles.points.map(endoMul)\\n }\\n };\\n }\\n return beta;\\n};\\n\\nPoint.prototype.toJSON = function toJSON() {\\n if (!this.precomputed)\\n return [ this.x, this.y ];\\n\\n return [ this.x, this.y, this.precomputed && {\\n doubles: this.precomputed.doubles && {\\n step: this.precomputed.doubles.step,\\n points: this.precomputed.doubles.points.slice(1)\\n },\\n naf: this.precomputed.naf && {\\n wnd: this.precomputed.naf.wnd,\\n points: this.precomputed.naf.points.slice(1)\\n }\\n } ];\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj, red) {\\n if (typeof obj === 'string')\\n obj = JSON.parse(obj);\\n var res = curve.point(obj[0], obj[1], red);\\n if (!obj[2])\\n return res;\\n\\n function obj2point(obj) {\\n return curve.point(obj[0], obj[1], red);\\n }\\n\\n var pre = obj[2];\\n res.precomputed = {\\n beta: null,\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: [ res ].concat(pre.doubles.points.map(obj2point))\\n },\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: [ res ].concat(pre.naf.points.map(obj2point))\\n }\\n };\\n return res;\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n return this.inf;\\n};\\n\\nPoint.prototype.add = function add(p) {\\n // O + P = P\\n if (this.inf)\\n return p;\\n\\n // P + O = P\\n if (p.inf)\\n return this;\\n\\n // P + P = 2P\\n if (this.eq(p))\\n return this.dbl();\\n\\n // P + (-P) = O\\n if (this.neg().eq(p))\\n return this.curve.point(null, null);\\n\\n // P + Q = O\\n if (this.x.cmp(p.x) === 0)\\n return this.curve.point(null, null);\\n\\n var c = this.y.redSub(p.y);\\n if (c.cmpn(0) !== 0)\\n c = c.redMul(this.x.redSub(p.x).redInvm());\\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\\n return this.curve.point(nx, ny);\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n if (this.inf)\\n return this;\\n\\n // 2P = O\\n var ys1 = this.y.redAdd(this.y);\\n if (ys1.cmpn(0) === 0)\\n return this.curve.point(null, null);\\n\\n var a = this.curve.a;\\n\\n var x2 = this.x.redSqr();\\n var dyinv = ys1.redInvm();\\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\\n\\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\\n return this.curve.point(nx, ny);\\n};\\n\\nPoint.prototype.getX = function getX() {\\n return this.x.fromRed();\\n};\\n\\nPoint.prototype.getY = function getY() {\\n return this.y.fromRed();\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n k = new BN(k, 16);\\n\\n if (this._hasDoubles(k))\\n return this.curve._fixedNafMul(this, k);\\n else if (this.curve.endo)\\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\\n else\\n return this.curve._wnafMul(this, k);\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\\n var points = [ this, p2 ];\\n var coeffs = [ k1, k2 ];\\n if (this.curve.endo)\\n return this.curve._endoWnafMulAdd(points, coeffs);\\n else\\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\\n};\\n\\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\\n var points = [ this, p2 ];\\n var coeffs = [ k1, k2 ];\\n if (this.curve.endo)\\n return this.curve._endoWnafMulAdd(points, coeffs, true);\\n else\\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\\n};\\n\\nPoint.prototype.eq = function eq(p) {\\n return this === p ||\\n this.inf === p.inf &&\\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\\n};\\n\\nPoint.prototype.neg = function neg(_precompute) {\\n if (this.inf)\\n return this;\\n\\n var res = this.curve.point(this.x, this.y.redNeg());\\n if (_precompute && this.precomputed) {\\n var pre = this.precomputed;\\n var negate = function(p) {\\n return p.neg();\\n };\\n res.precomputed = {\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: pre.naf.points.map(negate)\\n },\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: pre.doubles.points.map(negate)\\n }\\n };\\n }\\n return res;\\n};\\n\\nPoint.prototype.toJ = function toJ() {\\n if (this.inf)\\n return this.curve.jpoint(null, null, null);\\n\\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\\n return res;\\n};\\n\\nfunction JPoint(curve, x, y, z) {\\n Base.BasePoint.call(this, curve, 'jacobian');\\n if (x === null && y === null && z === null) {\\n this.x = this.curve.one;\\n this.y = this.curve.one;\\n this.z = new BN(0);\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n this.z = new BN(z, 16);\\n }\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n\\n this.zOne = this.z === this.curve.one;\\n}\\ninherits(JPoint, Base.BasePoint);\\n\\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\\n return new JPoint(this, x, y, z);\\n};\\n\\nJPoint.prototype.toP = function toP() {\\n if (this.isInfinity())\\n return this.curve.point(null, null);\\n\\n var zinv = this.z.redInvm();\\n var zinv2 = zinv.redSqr();\\n var ax = this.x.redMul(zinv2);\\n var ay = this.y.redMul(zinv2).redMul(zinv);\\n\\n return this.curve.point(ax, ay);\\n};\\n\\nJPoint.prototype.neg = function neg() {\\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\\n};\\n\\nJPoint.prototype.add = function add(p) {\\n // O + P = P\\n if (this.isInfinity())\\n return p;\\n\\n // P + O = P\\n if (p.isInfinity())\\n return this;\\n\\n // 12M + 4S + 7A\\n var pz2 = p.z.redSqr();\\n var z2 = this.z.redSqr();\\n var u1 = this.x.redMul(pz2);\\n var u2 = p.x.redMul(z2);\\n var s1 = this.y.redMul(pz2.redMul(p.z));\\n var s2 = p.y.redMul(z2.redMul(this.z));\\n\\n var h = u1.redSub(u2);\\n var r = s1.redSub(s2);\\n if (h.cmpn(0) === 0) {\\n if (r.cmpn(0) !== 0)\\n return this.curve.jpoint(null, null, null);\\n else\\n return this.dbl();\\n }\\n\\n var h2 = h.redSqr();\\n var h3 = h2.redMul(h);\\n var v = u1.redMul(h2);\\n\\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\\n var nz = this.z.redMul(p.z).redMul(h);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\\n // O + P = P\\n if (this.isInfinity())\\n return p.toJ();\\n\\n // P + O = P\\n if (p.isInfinity())\\n return this;\\n\\n // 8M + 3S + 7A\\n var z2 = this.z.redSqr();\\n var u1 = this.x;\\n var u2 = p.x.redMul(z2);\\n var s1 = this.y;\\n var s2 = p.y.redMul(z2).redMul(this.z);\\n\\n var h = u1.redSub(u2);\\n var r = s1.redSub(s2);\\n if (h.cmpn(0) === 0) {\\n if (r.cmpn(0) !== 0)\\n return this.curve.jpoint(null, null, null);\\n else\\n return this.dbl();\\n }\\n\\n var h2 = h.redSqr();\\n var h3 = h2.redMul(h);\\n var v = u1.redMul(h2);\\n\\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\\n var nz = this.z.redMul(h);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.dblp = function dblp(pow) {\\n if (pow === 0)\\n return this;\\n if (this.isInfinity())\\n return this;\\n if (!pow)\\n return this.dbl();\\n\\n if (this.curve.zeroA || this.curve.threeA) {\\n var r = this;\\n for (var i = 0; i < pow; i++)\\n r = r.dbl();\\n return r;\\n }\\n\\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\\n // N = 1 => 6M + 6S + 9A\\n var a = this.curve.a;\\n var tinv = this.curve.tinv;\\n\\n var jx = this.x;\\n var jy = this.y;\\n var jz = this.z;\\n var jz4 = jz.redSqr().redSqr();\\n\\n // Reuse results\\n var jyd = jy.redAdd(jy);\\n for (var i = 0; i < pow; i++) {\\n var jx2 = jx.redSqr();\\n var jyd2 = jyd.redSqr();\\n var jyd4 = jyd2.redSqr();\\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\\n\\n var t1 = jx.redMul(jyd2);\\n var nx = c.redSqr().redISub(t1.redAdd(t1));\\n var t2 = t1.redISub(nx);\\n var dny = c.redMul(t2);\\n dny = dny.redIAdd(dny).redISub(jyd4);\\n var nz = jyd.redMul(jz);\\n if (i + 1 < pow)\\n jz4 = jz4.redMul(jyd4);\\n\\n jx = nx;\\n jz = nz;\\n jyd = dny;\\n }\\n\\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\\n};\\n\\nJPoint.prototype.dbl = function dbl() {\\n if (this.isInfinity())\\n return this;\\n\\n if (this.curve.zeroA)\\n return this._zeroDbl();\\n else if (this.curve.threeA)\\n return this._threeDbl();\\n else\\n return this._dbl();\\n};\\n\\nJPoint.prototype._zeroDbl = function _zeroDbl() {\\n var nx;\\n var ny;\\n var nz;\\n // Z = 1\\n if (this.zOne) {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\\n // #doubling-mdbl-2007-bl\\n // 1M + 5S + 14A\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n s = s.redIAdd(s);\\n // M = 3 * XX + a; a = 0\\n var m = xx.redAdd(xx).redIAdd(xx);\\n // T = M ^ 2 - 2*S\\n var t = m.redSqr().redISub(s).redISub(s);\\n\\n // 8 * YYYY\\n var yyyy8 = yyyy.redIAdd(yyyy);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n\\n // X3 = T\\n nx = t;\\n // Y3 = M * (S - T) - 8 * YYYY\\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\\n // Z3 = 2*Y1\\n nz = this.y.redAdd(this.y);\\n } else {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\\n // #doubling-dbl-2009-l\\n // 2M + 5S + 13A\\n\\n // A = X1^2\\n var a = this.x.redSqr();\\n // B = Y1^2\\n var b = this.y.redSqr();\\n // C = B^2\\n var c = b.redSqr();\\n // D = 2 * ((X1 + B)^2 - A - C)\\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\\n d = d.redIAdd(d);\\n // E = 3 * A\\n var e = a.redAdd(a).redIAdd(a);\\n // F = E^2\\n var f = e.redSqr();\\n\\n // 8 * C\\n var c8 = c.redIAdd(c);\\n c8 = c8.redIAdd(c8);\\n c8 = c8.redIAdd(c8);\\n\\n // X3 = F - 2 * D\\n nx = f.redISub(d).redISub(d);\\n // Y3 = E * (D - X3) - 8 * C\\n ny = e.redMul(d.redISub(nx)).redISub(c8);\\n // Z3 = 2 * Y1 * Z1\\n nz = this.y.redMul(this.z);\\n nz = nz.redIAdd(nz);\\n }\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype._threeDbl = function _threeDbl() {\\n var nx;\\n var ny;\\n var nz;\\n // Z = 1\\n if (this.zOne) {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\\n // #doubling-mdbl-2007-bl\\n // 1M + 5S + 15A\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n s = s.redIAdd(s);\\n // M = 3 * XX + a\\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\\n // T = M^2 - 2 * S\\n var t = m.redSqr().redISub(s).redISub(s);\\n // X3 = T\\n nx = t;\\n // Y3 = M * (S - T) - 8 * YYYY\\n var yyyy8 = yyyy.redIAdd(yyyy);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\\n // Z3 = 2 * Y1\\n nz = this.y.redAdd(this.y);\\n } else {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\\n // 3M + 5S\\n\\n // delta = Z1^2\\n var delta = this.z.redSqr();\\n // gamma = Y1^2\\n var gamma = this.y.redSqr();\\n // beta = X1 * gamma\\n var beta = this.x.redMul(gamma);\\n // alpha = 3 * (X1 - delta) * (X1 + delta)\\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\\n // X3 = alpha^2 - 8 * beta\\n var beta4 = beta.redIAdd(beta);\\n beta4 = beta4.redIAdd(beta4);\\n var beta8 = beta4.redAdd(beta4);\\n nx = alpha.redSqr().redISub(beta8);\\n // Z3 = (Y1 + Z1)^2 - gamma - delta\\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\\n var ggamma8 = gamma.redSqr();\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\\n }\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype._dbl = function _dbl() {\\n var a = this.curve.a;\\n\\n // 4M + 6S + 10A\\n var jx = this.x;\\n var jy = this.y;\\n var jz = this.z;\\n var jz4 = jz.redSqr().redSqr();\\n\\n var jx2 = jx.redSqr();\\n var jy2 = jy.redSqr();\\n\\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\\n\\n var jxd4 = jx.redAdd(jx);\\n jxd4 = jxd4.redIAdd(jxd4);\\n var t1 = jxd4.redMul(jy2);\\n var nx = c.redSqr().redISub(t1.redAdd(t1));\\n var t2 = t1.redISub(nx);\\n\\n var jyd8 = jy2.redSqr();\\n jyd8 = jyd8.redIAdd(jyd8);\\n jyd8 = jyd8.redIAdd(jyd8);\\n jyd8 = jyd8.redIAdd(jyd8);\\n var ny = c.redMul(t2).redISub(jyd8);\\n var nz = jy.redAdd(jy).redMul(jz);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.trpl = function trpl() {\\n if (!this.curve.zeroA)\\n return this.dbl().add(this);\\n\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\\n // 5M + 10S + ...\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // ZZ = Z1^2\\n var zz = this.z.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // M = 3 * XX + a * ZZ2; a = 0\\n var m = xx.redAdd(xx).redIAdd(xx);\\n // MM = M^2\\n var mm = m.redSqr();\\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n e = e.redIAdd(e);\\n e = e.redAdd(e).redIAdd(e);\\n e = e.redISub(mm);\\n // EE = E^2\\n var ee = e.redSqr();\\n // T = 16*YYYY\\n var t = yyyy.redIAdd(yyyy);\\n t = t.redIAdd(t);\\n t = t.redIAdd(t);\\n t = t.redIAdd(t);\\n // U = (M + E)^2 - MM - EE - T\\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\\n // X3 = 4 * (X1 * EE - 4 * YY * U)\\n var yyu4 = yy.redMul(u);\\n yyu4 = yyu4.redIAdd(yyu4);\\n yyu4 = yyu4.redIAdd(yyu4);\\n var nx = this.x.redMul(ee).redISub(yyu4);\\n nx = nx.redIAdd(nx);\\n nx = nx.redIAdd(nx);\\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\\n ny = ny.redIAdd(ny);\\n ny = ny.redIAdd(ny);\\n ny = ny.redIAdd(ny);\\n // Z3 = (Z1 + E)^2 - ZZ - EE\\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.mul = function mul(k, kbase) {\\n k = new BN(k, kbase);\\n\\n return this.curve._wnafMul(this, k);\\n};\\n\\nJPoint.prototype.eq = function eq(p) {\\n if (p.type === 'affine')\\n return this.eq(p.toJ());\\n\\n if (this === p)\\n return true;\\n\\n // x1 * z2^2 == x2 * z1^2\\n var z2 = this.z.redSqr();\\n var pz2 = p.z.redSqr();\\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\\n return false;\\n\\n // y1 * z2^3 == y2 * z1^3\\n var z3 = z2.redMul(this.z);\\n var pz3 = pz2.redMul(p.z);\\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\\n};\\n\\nJPoint.prototype.eqXToP = function eqXToP(x) {\\n var zs = this.z.redSqr();\\n var rx = x.toRed(this.curve.red).redMul(zs);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n\\n var xc = x.clone();\\n var t = this.curve.redN.redMul(zs);\\n for (;;) {\\n xc.iadd(this.curve.n);\\n if (xc.cmp(this.curve.p) >= 0)\\n return false;\\n\\n rx.redIAdd(t);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n }\\n};\\n\\nJPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC JPoint Infinity>';\\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\\n ' y: ' + this.y.toString(16, 2) +\\n ' z: ' + this.z.toString(16, 2) + '>';\\n};\\n\\nJPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.z.cmpn(0) === 0;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curves.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curves.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curves = exports;\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar elliptic = __webpack_require__(/*! ../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\n\\nvar assert = elliptic.utils.assert;\\n\\nfunction PresetCurve(options) {\\n if (options.type === 'short')\\n this.curve = new elliptic.curve.short(options);\\n else if (options.type === 'edwards')\\n this.curve = new elliptic.curve.edwards(options);\\n else\\n this.curve = new elliptic.curve.mont(options);\\n this.g = this.curve.g;\\n this.n = this.curve.n;\\n this.hash = options.hash;\\n\\n assert(this.g.validate(), 'Invalid curve');\\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\\n}\\ncurves.PresetCurve = PresetCurve;\\n\\nfunction defineCurve(name, options) {\\n Object.defineProperty(curves, name, {\\n configurable: true,\\n enumerable: true,\\n get: function() {\\n var curve = new PresetCurve(options);\\n Object.defineProperty(curves, name, {\\n configurable: true,\\n enumerable: true,\\n value: curve\\n });\\n return curve;\\n }\\n });\\n}\\n\\ndefineCurve('p192', {\\n type: 'short',\\n prime: 'p192',\\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\\n ]\\n});\\n\\ndefineCurve('p224', {\\n type: 'short',\\n prime: 'p224',\\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\\n ]\\n});\\n\\ndefineCurve('p256', {\\n type: 'short',\\n prime: null,\\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\\n ]\\n});\\n\\ndefineCurve('p384', {\\n type: 'short',\\n prime: null,\\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\\n hash: hash.sha384,\\n gRed: false,\\n g: [\\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\\n '5502f25d bf55296c 3a545e38 72760ab7',\\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\\n ]\\n});\\n\\ndefineCurve('p521', {\\n type: 'short',\\n prime: null,\\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\\n hash: hash.sha512,\\n gRed: false,\\n g: [\\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\\n ]\\n});\\n\\ndefineCurve('curve25519', {\\n type: 'mont',\\n prime: 'p25519',\\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\\n a: '76d06',\\n b: '1',\\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '9'\\n ]\\n});\\n\\ndefineCurve('ed25519', {\\n type: 'edwards',\\n prime: 'p25519',\\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\\n a: '-1',\\n c: '1',\\n // -121665 * (121666^(-1)) (mod P)\\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\\n\\n // 4/5\\n '6666666666666666666666666666666666666666666666666666666666666658'\\n ]\\n});\\n\\nvar pre;\\ntry {\\n pre = __webpack_require__(/*! ./precomputed/secp256k1 */ \\\"./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js\\\");\\n} catch (e) {\\n pre = undefined;\\n}\\n\\ndefineCurve('secp256k1', {\\n type: 'short',\\n prime: 'k256',\\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\\n a: '0',\\n b: '7',\\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\\n h: '1',\\n hash: hash.sha256,\\n\\n // Precomputed endomorphism\\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\\n basis: [\\n {\\n a: '3086d221a7d46bcde86c90e49284eb15',\\n b: '-e4437ed6010e88286f547fa90abfe4c3'\\n },\\n {\\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\\n b: '3086d221a7d46bcde86c90e49284eb15'\\n }\\n ],\\n\\n gRed: false,\\n g: [\\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\\n pre\\n ]\\n});\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curves.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/ec/index.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/ec/index.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar HmacDRBG = __webpack_require__(/*! hmac-drbg */ \\\"./node_modules/hmac-drbg/lib/hmac-drbg.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\n\\nvar KeyPair = __webpack_require__(/*! ./key */ \\\"./node_modules/elliptic/lib/elliptic/ec/key.js\\\");\\nvar Signature = __webpack_require__(/*! ./signature */ \\\"./node_modules/elliptic/lib/elliptic/ec/signature.js\\\");\\n\\nfunction EC(options) {\\n if (!(this instanceof EC))\\n return new EC(options);\\n\\n // Shortcut `elliptic.ec(curve-name)`\\n if (typeof options === 'string') {\\n assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\\n\\n options = elliptic.curves[options];\\n }\\n\\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\\n if (options instanceof elliptic.curves.PresetCurve)\\n options = { curve: options };\\n\\n this.curve = options.curve.curve;\\n this.n = this.curve.n;\\n this.nh = this.n.ushrn(1);\\n this.g = this.curve.g;\\n\\n // Point on curve\\n this.g = options.curve.g;\\n this.g.precompute(options.curve.n.bitLength() + 1);\\n\\n // Hash for function for DRBG\\n this.hash = options.hash || options.curve.hash;\\n}\\nmodule.exports = EC;\\n\\nEC.prototype.keyPair = function keyPair(options) {\\n return new KeyPair(this, options);\\n};\\n\\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\\n return KeyPair.fromPrivate(this, priv, enc);\\n};\\n\\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\\n return KeyPair.fromPublic(this, pub, enc);\\n};\\n\\nEC.prototype.genKeyPair = function genKeyPair(options) {\\n if (!options)\\n options = {};\\n\\n // Instantiate Hmac_DRBG\\n var drbg = new HmacDRBG({\\n hash: this.hash,\\n pers: options.pers,\\n persEnc: options.persEnc || 'utf8',\\n entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\\n nonce: this.n.toArray()\\n });\\n\\n var bytes = this.n.byteLength();\\n var ns2 = this.n.sub(new BN(2));\\n do {\\n var priv = new BN(drbg.generate(bytes));\\n if (priv.cmp(ns2) > 0)\\n continue;\\n\\n priv.iaddn(1);\\n return this.keyFromPrivate(priv);\\n } while (true);\\n};\\n\\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\\n var delta = msg.byteLength() * 8 - this.n.bitLength();\\n if (delta > 0)\\n msg = msg.ushrn(delta);\\n if (!truncOnly && msg.cmp(this.n) >= 0)\\n return msg.sub(this.n);\\n else\\n return msg;\\n};\\n\\nEC.prototype.sign = function sign(msg, key, enc, options) {\\n if (typeof enc === 'object') {\\n options = enc;\\n enc = null;\\n }\\n if (!options)\\n options = {};\\n\\n key = this.keyFromPrivate(key, enc);\\n msg = this._truncateToN(new BN(msg, 16));\\n\\n // Zero-extend key to provide enough entropy\\n var bytes = this.n.byteLength();\\n var bkey = key.getPrivate().toArray('be', bytes);\\n\\n // Zero-extend nonce to have the same byte size as N\\n var nonce = msg.toArray('be', bytes);\\n\\n // Instantiate Hmac_DRBG\\n var drbg = new HmacDRBG({\\n hash: this.hash,\\n entropy: bkey,\\n nonce: nonce,\\n pers: options.pers,\\n persEnc: options.persEnc || 'utf8'\\n });\\n\\n // Number of bytes to generate\\n var ns1 = this.n.sub(new BN(1));\\n\\n for (var iter = 0; true; iter++) {\\n var k = options.k ?\\n options.k(iter) :\\n new BN(drbg.generate(this.n.byteLength()));\\n k = this._truncateToN(k, true);\\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\\n continue;\\n\\n var kp = this.g.mul(k);\\n if (kp.isInfinity())\\n continue;\\n\\n var kpX = kp.getX();\\n var r = kpX.umod(this.n);\\n if (r.cmpn(0) === 0)\\n continue;\\n\\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\\n s = s.umod(this.n);\\n if (s.cmpn(0) === 0)\\n continue;\\n\\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\\n (kpX.cmp(r) !== 0 ? 2 : 0);\\n\\n // Use complement of `s`, if it is > `n / 2`\\n if (options.canonical && s.cmp(this.nh) > 0) {\\n s = this.n.sub(s);\\n recoveryParam ^= 1;\\n }\\n\\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\\n }\\n};\\n\\nEC.prototype.verify = function verify(msg, signature, key, enc) {\\n msg = this._truncateToN(new BN(msg, 16));\\n key = this.keyFromPublic(key, enc);\\n signature = new Signature(signature, 'hex');\\n\\n // Perform primitive values validation\\n var r = signature.r;\\n var s = signature.s;\\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\\n return false;\\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\\n return false;\\n\\n // Validate signature\\n var sinv = s.invm(this.n);\\n var u1 = sinv.mul(msg).umod(this.n);\\n var u2 = sinv.mul(r).umod(this.n);\\n\\n if (!this.curve._maxwellTrick) {\\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\\n if (p.isInfinity())\\n return false;\\n\\n return p.getX().umod(this.n).cmp(r) === 0;\\n }\\n\\n // NOTE: Greg Maxwell's trick, inspired by:\\n // https://git.io/vad3K\\n\\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\\n if (p.isInfinity())\\n return false;\\n\\n // Compare `p.x` of Jacobian point with `r`,\\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\\n // inverse of `p.z^2`\\n return p.eqXToP(r);\\n};\\n\\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\\n assert((3 & j) === j, 'The recovery param is more than two bits');\\n signature = new Signature(signature, enc);\\n\\n var n = this.n;\\n var e = new BN(msg);\\n var r = signature.r;\\n var s = signature.s;\\n\\n // A set LSB signifies that the y-coordinate is odd\\n var isYOdd = j & 1;\\n var isSecondKey = j >> 1;\\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\\n throw new Error('Unable to find sencond key candinate');\\n\\n // 1.1. Let x = r + jn.\\n if (isSecondKey)\\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\\n else\\n r = this.curve.pointFromX(r, isYOdd);\\n\\n var rInv = signature.r.invm(n);\\n var s1 = n.sub(e).mul(rInv).umod(n);\\n var s2 = s.mul(rInv).umod(n);\\n\\n // 1.6.1 Compute Q = r^-1 (sR - eG)\\n // Q = r^-1 (sR + -eG)\\n return this.g.mulAdd(s1, r, s2);\\n};\\n\\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\\n signature = new Signature(signature, enc);\\n if (signature.recoveryParam !== null)\\n return signature.recoveryParam;\\n\\n for (var i = 0; i < 4; i++) {\\n var Qprime;\\n try {\\n Qprime = this.recoverPubKey(e, signature, i);\\n } catch (e) {\\n continue;\\n }\\n\\n if (Qprime.eq(Q))\\n return i;\\n }\\n throw new Error('Unable to find valid recovery factor');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/ec/key.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/ec/key.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\n\\nfunction KeyPair(ec, options) {\\n this.ec = ec;\\n this.priv = null;\\n this.pub = null;\\n\\n // KeyPair(ec, { priv: ..., pub: ... })\\n if (options.priv)\\n this._importPrivate(options.priv, options.privEnc);\\n if (options.pub)\\n this._importPublic(options.pub, options.pubEnc);\\n}\\nmodule.exports = KeyPair;\\n\\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\\n if (pub instanceof KeyPair)\\n return pub;\\n\\n return new KeyPair(ec, {\\n pub: pub,\\n pubEnc: enc\\n });\\n};\\n\\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\\n if (priv instanceof KeyPair)\\n return priv;\\n\\n return new KeyPair(ec, {\\n priv: priv,\\n privEnc: enc\\n });\\n};\\n\\nKeyPair.prototype.validate = function validate() {\\n var pub = this.getPublic();\\n\\n if (pub.isInfinity())\\n return { result: false, reason: 'Invalid public key' };\\n if (!pub.validate())\\n return { result: false, reason: 'Public key is not a point' };\\n if (!pub.mul(this.ec.curve.n).isInfinity())\\n return { result: false, reason: 'Public key * N != O' };\\n\\n return { result: true, reason: null };\\n};\\n\\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\\n // compact is optional argument\\n if (typeof compact === 'string') {\\n enc = compact;\\n compact = null;\\n }\\n\\n if (!this.pub)\\n this.pub = this.ec.g.mul(this.priv);\\n\\n if (!enc)\\n return this.pub;\\n\\n return this.pub.encode(enc, compact);\\n};\\n\\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\\n if (enc === 'hex')\\n return this.priv.toString(16, 2);\\n else\\n return this.priv;\\n};\\n\\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\\n this.priv = new BN(key, enc || 16);\\n\\n // Ensure that the priv won't be bigger than n, otherwise we may fail\\n // in fixed multiplication method\\n this.priv = this.priv.umod(this.ec.curve.n);\\n};\\n\\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\\n if (key.x || key.y) {\\n // Montgomery points only have an `x` coordinate.\\n // Weierstrass/Edwards points on the other hand have both `x` and\\n // `y` coordinates.\\n if (this.ec.curve.type === 'mont') {\\n assert(key.x, 'Need x coordinate');\\n } else if (this.ec.curve.type === 'short' ||\\n this.ec.curve.type === 'edwards') {\\n assert(key.x && key.y, 'Need both x and y coordinate');\\n }\\n this.pub = this.ec.curve.point(key.x, key.y);\\n return;\\n }\\n this.pub = this.ec.curve.decodePoint(key, enc);\\n};\\n\\n// ECDH\\nKeyPair.prototype.derive = function derive(pub) {\\n return pub.mul(this.priv).getX();\\n};\\n\\n// ECDSA\\nKeyPair.prototype.sign = function sign(msg, enc, options) {\\n return this.ec.sign(msg, this, enc, options);\\n};\\n\\nKeyPair.prototype.verify = function verify(msg, signature) {\\n return this.ec.verify(msg, signature, this);\\n};\\n\\nKeyPair.prototype.inspect = function inspect() {\\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/ec/signature.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/ec/signature.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\n\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\n\\nfunction Signature(options, enc) {\\n if (options instanceof Signature)\\n return options;\\n\\n if (this._importDER(options, enc))\\n return;\\n\\n assert(options.r && options.s, 'Signature without r or s');\\n this.r = new BN(options.r, 16);\\n this.s = new BN(options.s, 16);\\n if (options.recoveryParam === undefined)\\n this.recoveryParam = null;\\n else\\n this.recoveryParam = options.recoveryParam;\\n}\\nmodule.exports = Signature;\\n\\nfunction Position() {\\n this.place = 0;\\n}\\n\\nfunction getLength(buf, p) {\\n var initial = buf[p.place++];\\n if (!(initial & 0x80)) {\\n return initial;\\n }\\n var octetLen = initial & 0xf;\\n var val = 0;\\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\\n val <<= 8;\\n val |= buf[off];\\n }\\n p.place = off;\\n return val;\\n}\\n\\nfunction rmPadding(buf) {\\n var i = 0;\\n var len = buf.length - 1;\\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\\n i++;\\n }\\n if (i === 0) {\\n return buf;\\n }\\n return buf.slice(i);\\n}\\n\\nSignature.prototype._importDER = function _importDER(data, enc) {\\n data = utils.toArray(data, enc);\\n var p = new Position();\\n if (data[p.place++] !== 0x30) {\\n return false;\\n }\\n var len = getLength(data, p);\\n if ((len + p.place) !== data.length) {\\n return false;\\n }\\n if (data[p.place++] !== 0x02) {\\n return false;\\n }\\n var rlen = getLength(data, p);\\n var r = data.slice(p.place, rlen + p.place);\\n p.place += rlen;\\n if (data[p.place++] !== 0x02) {\\n return false;\\n }\\n var slen = getLength(data, p);\\n if (data.length !== slen + p.place) {\\n return false;\\n }\\n var s = data.slice(p.place, slen + p.place);\\n if (r[0] === 0 && (r[1] & 0x80)) {\\n r = r.slice(1);\\n }\\n if (s[0] === 0 && (s[1] & 0x80)) {\\n s = s.slice(1);\\n }\\n\\n this.r = new BN(r);\\n this.s = new BN(s);\\n this.recoveryParam = null;\\n\\n return true;\\n};\\n\\nfunction constructLength(arr, len) {\\n if (len < 0x80) {\\n arr.push(len);\\n return;\\n }\\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\\n arr.push(octets | 0x80);\\n while (--octets) {\\n arr.push((len >>> (octets << 3)) & 0xff);\\n }\\n arr.push(len);\\n}\\n\\nSignature.prototype.toDER = function toDER(enc) {\\n var r = this.r.toArray();\\n var s = this.s.toArray();\\n\\n // Pad values\\n if (r[0] & 0x80)\\n r = [ 0 ].concat(r);\\n // Pad values\\n if (s[0] & 0x80)\\n s = [ 0 ].concat(s);\\n\\n r = rmPadding(r);\\n s = rmPadding(s);\\n\\n while (!s[0] && !(s[1] & 0x80)) {\\n s = s.slice(1);\\n }\\n var arr = [ 0x02 ];\\n constructLength(arr, r.length);\\n arr = arr.concat(r);\\n arr.push(0x02);\\n constructLength(arr, s.length);\\n var backHalf = arr.concat(s);\\n var res = [ 0x30 ];\\n constructLength(res, backHalf.length);\\n res = res.concat(backHalf);\\n return utils.encode(res, enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/eddsa/index.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/eddsa/index.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\nvar parseBytes = utils.parseBytes;\\nvar KeyPair = __webpack_require__(/*! ./key */ \\\"./node_modules/elliptic/lib/elliptic/eddsa/key.js\\\");\\nvar Signature = __webpack_require__(/*! ./signature */ \\\"./node_modules/elliptic/lib/elliptic/eddsa/signature.js\\\");\\n\\nfunction EDDSA(curve) {\\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\\n\\n if (!(this instanceof EDDSA))\\n return new EDDSA(curve);\\n\\n var curve = elliptic.curves[curve].curve;\\n this.curve = curve;\\n this.g = curve.g;\\n this.g.precompute(curve.n.bitLength() + 1);\\n\\n this.pointClass = curve.point().constructor;\\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\\n this.hash = hash.sha512;\\n}\\n\\nmodule.exports = EDDSA;\\n\\n/**\\n* @param {Array|String} message - message bytes\\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\\n* @returns {Signature} - signature\\n*/\\nEDDSA.prototype.sign = function sign(message, secret) {\\n message = parseBytes(message);\\n var key = this.keyFromSecret(secret);\\n var r = this.hashInt(key.messagePrefix(), message);\\n var R = this.g.mul(r);\\n var Rencoded = this.encodePoint(R);\\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\\n .mul(key.priv());\\n var S = r.add(s_).umod(this.curve.n);\\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\\n};\\n\\n/**\\n* @param {Array} message - message bytes\\n* @param {Array|String|Signature} sig - sig bytes\\n* @param {Array|String|Point|KeyPair} pub - public key\\n* @returns {Boolean} - true if public key matches sig of message\\n*/\\nEDDSA.prototype.verify = function verify(message, sig, pub) {\\n message = parseBytes(message);\\n sig = this.makeSignature(sig);\\n var key = this.keyFromPublic(pub);\\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\\n var SG = this.g.mul(sig.S());\\n var RplusAh = sig.R().add(key.pub().mul(h));\\n return RplusAh.eq(SG);\\n};\\n\\nEDDSA.prototype.hashInt = function hashInt() {\\n var hash = this.hash();\\n for (var i = 0; i < arguments.length; i++)\\n hash.update(arguments[i]);\\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\\n};\\n\\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\\n return KeyPair.fromPublic(this, pub);\\n};\\n\\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\\n return KeyPair.fromSecret(this, secret);\\n};\\n\\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\\n if (sig instanceof Signature)\\n return sig;\\n return new Signature(this, sig);\\n};\\n\\n/**\\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\\n*\\n* EDDSA defines methods for encoding and decoding points and integers. These are\\n* helper convenience methods, that pass along to utility functions implied\\n* parameters.\\n*\\n*/\\nEDDSA.prototype.encodePoint = function encodePoint(point) {\\n var enc = point.getY().toArray('le', this.encodingLength);\\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\\n return enc;\\n};\\n\\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\\n bytes = utils.parseBytes(bytes);\\n\\n var lastIx = bytes.length - 1;\\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\\n\\n var y = utils.intFromLE(normed);\\n return this.curve.pointFromY(y, xIsOdd);\\n};\\n\\nEDDSA.prototype.encodeInt = function encodeInt(num) {\\n return num.toArray('le', this.encodingLength);\\n};\\n\\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\\n return utils.intFromLE(bytes);\\n};\\n\\nEDDSA.prototype.isPoint = function isPoint(val) {\\n return val instanceof this.pointClass;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/eddsa/key.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/eddsa/key.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\nvar parseBytes = utils.parseBytes;\\nvar cachedProperty = utils.cachedProperty;\\n\\n/**\\n* @param {EDDSA} eddsa - instance\\n* @param {Object} params - public/private key parameters\\n*\\n* @param {Array<Byte>} [params.secret] - secret seed bytes\\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\\n*\\n*/\\nfunction KeyPair(eddsa, params) {\\n this.eddsa = eddsa;\\n this._secret = parseBytes(params.secret);\\n if (eddsa.isPoint(params.pub))\\n this._pub = params.pub;\\n else\\n this._pubBytes = parseBytes(params.pub);\\n}\\n\\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\\n if (pub instanceof KeyPair)\\n return pub;\\n return new KeyPair(eddsa, { pub: pub });\\n};\\n\\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\\n if (secret instanceof KeyPair)\\n return secret;\\n return new KeyPair(eddsa, { secret: secret });\\n};\\n\\nKeyPair.prototype.secret = function secret() {\\n return this._secret;\\n};\\n\\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\\n return this.eddsa.encodePoint(this.pub());\\n});\\n\\ncachedProperty(KeyPair, 'pub', function pub() {\\n if (this._pubBytes)\\n return this.eddsa.decodePoint(this._pubBytes);\\n return this.eddsa.g.mul(this.priv());\\n});\\n\\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\\n var eddsa = this.eddsa;\\n var hash = this.hash();\\n var lastIx = eddsa.encodingLength - 1;\\n\\n var a = hash.slice(0, eddsa.encodingLength);\\n a[0] &= 248;\\n a[lastIx] &= 127;\\n a[lastIx] |= 64;\\n\\n return a;\\n});\\n\\ncachedProperty(KeyPair, 'priv', function priv() {\\n return this.eddsa.decodeInt(this.privBytes());\\n});\\n\\ncachedProperty(KeyPair, 'hash', function hash() {\\n return this.eddsa.hash().update(this.secret()).digest();\\n});\\n\\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\\n return this.hash().slice(this.eddsa.encodingLength);\\n});\\n\\nKeyPair.prototype.sign = function sign(message) {\\n assert(this._secret, 'KeyPair can only verify');\\n return this.eddsa.sign(message, this);\\n};\\n\\nKeyPair.prototype.verify = function verify(message, sig) {\\n return this.eddsa.verify(message, sig, this);\\n};\\n\\nKeyPair.prototype.getSecret = function getSecret(enc) {\\n assert(this._secret, 'KeyPair is public only');\\n return utils.encode(this.secret(), enc);\\n};\\n\\nKeyPair.prototype.getPublic = function getPublic(enc) {\\n return utils.encode(this.pubBytes(), enc);\\n};\\n\\nmodule.exports = KeyPair;\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/eddsa/signature.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/eddsa/signature.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\nvar cachedProperty = utils.cachedProperty;\\nvar parseBytes = utils.parseBytes;\\n\\n/**\\n* @param {EDDSA} eddsa - eddsa instance\\n* @param {Array<Bytes>|Object} sig -\\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\\n*/\\nfunction Signature(eddsa, sig) {\\n this.eddsa = eddsa;\\n\\n if (typeof sig !== 'object')\\n sig = parseBytes(sig);\\n\\n if (Array.isArray(sig)) {\\n sig = {\\n R: sig.slice(0, eddsa.encodingLength),\\n S: sig.slice(eddsa.encodingLength)\\n };\\n }\\n\\n assert(sig.R && sig.S, 'Signature without R or S');\\n\\n if (eddsa.isPoint(sig.R))\\n this._R = sig.R;\\n if (sig.S instanceof BN)\\n this._S = sig.S;\\n\\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\\n}\\n\\ncachedProperty(Signature, 'S', function S() {\\n return this.eddsa.decodeInt(this.Sencoded());\\n});\\n\\ncachedProperty(Signature, 'R', function R() {\\n return this.eddsa.decodePoint(this.Rencoded());\\n});\\n\\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\\n return this.eddsa.encodePoint(this.R());\\n});\\n\\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\\n return this.eddsa.encodeInt(this.S());\\n});\\n\\nSignature.prototype.toBytes = function toBytes() {\\n return this.Rencoded().concat(this.Sencoded());\\n};\\n\\nSignature.prototype.toHex = function toHex() {\\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\\n};\\n\\nmodule.exports = Signature;\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = {\\n doubles: {\\n step: 4,\\n points: [\\n [\\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\\n ],\\n [\\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\\n ],\\n [\\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\\n ],\\n [\\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\\n ],\\n [\\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\\n ],\\n [\\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\\n ],\\n [\\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\\n ],\\n [\\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\\n ],\\n [\\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\\n ],\\n [\\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\\n ],\\n [\\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\\n ],\\n [\\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\\n ],\\n [\\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\\n ],\\n [\\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\\n ],\\n [\\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\\n ],\\n [\\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\\n ],\\n [\\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\\n ],\\n [\\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\\n ],\\n [\\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\\n ],\\n [\\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\\n ],\\n [\\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\\n ],\\n [\\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\\n ],\\n [\\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\\n ],\\n [\\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\\n ],\\n [\\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\\n ],\\n [\\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\\n ],\\n [\\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\\n ],\\n [\\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\\n ],\\n [\\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\\n ],\\n [\\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\\n ],\\n [\\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\\n ],\\n [\\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\\n ],\\n [\\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\\n ],\\n [\\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\\n ],\\n [\\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\\n ],\\n [\\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\\n ],\\n [\\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\\n ],\\n [\\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\\n ],\\n [\\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\\n ],\\n [\\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\\n ],\\n [\\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\\n ],\\n [\\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\\n ],\\n [\\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\\n ],\\n [\\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\\n ],\\n [\\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\\n ],\\n [\\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\\n ],\\n [\\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\\n ],\\n [\\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\\n ],\\n [\\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\\n ],\\n [\\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\\n ],\\n [\\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\\n ],\\n [\\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\\n ],\\n [\\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\\n ],\\n [\\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\\n ],\\n [\\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\\n ],\\n [\\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\\n ],\\n [\\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\\n ],\\n [\\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\\n ],\\n [\\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\\n ],\\n [\\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\\n ],\\n [\\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\\n ],\\n [\\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\\n ],\\n [\\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\\n ],\\n [\\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\\n ],\\n [\\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\\n ]\\n ]\\n },\\n naf: {\\n wnd: 7,\\n points: [\\n [\\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\\n ],\\n [\\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\\n ],\\n [\\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\\n ],\\n [\\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\\n ],\\n [\\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\\n ],\\n [\\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\\n ],\\n [\\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\\n ],\\n [\\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\\n ],\\n [\\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\\n ],\\n [\\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\\n ],\\n [\\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\\n ],\\n [\\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\\n ],\\n [\\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\\n ],\\n [\\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\\n ],\\n [\\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\\n ],\\n [\\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\\n ],\\n [\\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\\n ],\\n [\\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\\n ],\\n [\\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\\n ],\\n [\\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\\n ],\\n [\\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\\n ],\\n [\\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\\n ],\\n [\\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\\n ],\\n [\\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\\n ],\\n [\\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\\n ],\\n [\\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\\n ],\\n [\\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\\n ],\\n [\\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\\n ],\\n [\\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\\n ],\\n [\\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\\n ],\\n [\\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\\n ],\\n [\\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\\n ],\\n [\\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\\n ],\\n [\\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\\n ],\\n [\\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\\n ],\\n [\\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\\n ],\\n [\\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\\n ],\\n [\\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\\n ],\\n [\\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\\n ],\\n [\\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\\n ],\\n [\\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\\n ],\\n [\\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\\n ],\\n [\\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\\n ],\\n [\\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\\n ],\\n [\\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\\n ],\\n [\\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\\n ],\\n [\\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\\n ],\\n [\\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\\n ],\\n [\\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\\n ],\\n [\\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\\n ],\\n [\\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\\n ],\\n [\\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\\n ],\\n [\\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\\n ],\\n [\\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\\n ],\\n [\\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\\n ],\\n [\\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\\n ],\\n [\\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\\n ],\\n [\\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\\n ],\\n [\\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\\n ],\\n [\\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\\n ],\\n [\\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\\n ],\\n [\\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\\n ],\\n [\\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\\n ],\\n [\\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\\n ],\\n [\\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\\n ],\\n [\\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\\n ],\\n [\\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\\n ],\\n [\\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\\n ],\\n [\\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\\n ],\\n [\\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\\n ],\\n [\\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\\n ],\\n [\\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\\n ],\\n [\\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\\n ],\\n [\\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\\n ],\\n [\\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\\n ],\\n [\\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\\n ],\\n [\\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\\n ],\\n [\\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\\n ],\\n [\\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\\n ],\\n [\\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\\n ],\\n [\\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\\n ],\\n [\\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\\n ],\\n [\\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\\n ],\\n [\\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\\n ],\\n [\\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\\n ],\\n [\\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\\n ],\\n [\\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\\n ],\\n [\\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\\n ],\\n [\\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\\n ],\\n [\\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\\n ],\\n [\\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\\n ],\\n [\\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\\n ],\\n [\\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\\n ],\\n [\\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\\n ],\\n [\\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\\n ],\\n [\\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\\n ],\\n [\\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\\n ],\\n [\\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\\n ],\\n [\\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\\n ],\\n [\\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\\n ],\\n [\\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\\n ],\\n [\\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\\n ],\\n [\\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\\n ],\\n [\\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\\n ],\\n [\\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\\n ],\\n [\\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\\n ],\\n [\\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\\n ],\\n [\\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\\n ],\\n [\\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\\n ],\\n [\\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\\n ],\\n [\\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\\n ],\\n [\\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\\n ],\\n [\\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\\n ],\\n [\\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\\n ],\\n [\\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\\n ],\\n [\\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\\n ],\\n [\\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\\n ],\\n [\\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\\n ],\\n [\\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\\n ],\\n [\\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\\n ],\\n [\\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\\n ],\\n [\\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\\n ],\\n [\\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\\n ],\\n [\\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\\n ],\\n [\\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\\n ],\\n [\\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\\n ],\\n [\\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\\n ]\\n ]\\n }\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/utils.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/utils.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = exports;\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar minAssert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\nvar minUtils = __webpack_require__(/*! minimalistic-crypto-utils */ \\\"./node_modules/minimalistic-crypto-utils/lib/utils.js\\\");\\n\\nutils.assert = minAssert;\\nutils.toArray = minUtils.toArray;\\nutils.zero2 = minUtils.zero2;\\nutils.toHex = minUtils.toHex;\\nutils.encode = minUtils.encode;\\n\\n// Represent num in a w-NAF form\\nfunction getNAF(num, w) {\\n var naf = [];\\n var ws = 1 << (w + 1);\\n var k = num.clone();\\n while (k.cmpn(1) >= 0) {\\n var z;\\n if (k.isOdd()) {\\n var mod = k.andln(ws - 1);\\n if (mod > (ws >> 1) - 1)\\n z = (ws >> 1) - mod;\\n else\\n z = mod;\\n k.isubn(z);\\n } else {\\n z = 0;\\n }\\n naf.push(z);\\n\\n // Optimization, shift by word if possible\\n var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\\n for (var i = 1; i < shift; i++)\\n naf.push(0);\\n k.iushrn(shift);\\n }\\n\\n return naf;\\n}\\nutils.getNAF = getNAF;\\n\\n// Represent k1, k2 in a Joint Sparse Form\\nfunction getJSF(k1, k2) {\\n var jsf = [\\n [],\\n []\\n ];\\n\\n k1 = k1.clone();\\n k2 = k2.clone();\\n var d1 = 0;\\n var d2 = 0;\\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\\n\\n // First phase\\n var m14 = (k1.andln(3) + d1) & 3;\\n var m24 = (k2.andln(3) + d2) & 3;\\n if (m14 === 3)\\n m14 = -1;\\n if (m24 === 3)\\n m24 = -1;\\n var u1;\\n if ((m14 & 1) === 0) {\\n u1 = 0;\\n } else {\\n var m8 = (k1.andln(7) + d1) & 7;\\n if ((m8 === 3 || m8 === 5) && m24 === 2)\\n u1 = -m14;\\n else\\n u1 = m14;\\n }\\n jsf[0].push(u1);\\n\\n var u2;\\n if ((m24 & 1) === 0) {\\n u2 = 0;\\n } else {\\n var m8 = (k2.andln(7) + d2) & 7;\\n if ((m8 === 3 || m8 === 5) && m14 === 2)\\n u2 = -m24;\\n else\\n u2 = m24;\\n }\\n jsf[1].push(u2);\\n\\n // Second phase\\n if (2 * d1 === u1 + 1)\\n d1 = 1 - d1;\\n if (2 * d2 === u2 + 1)\\n d2 = 1 - d2;\\n k1.iushrn(1);\\n k2.iushrn(1);\\n }\\n\\n return jsf;\\n}\\nutils.getJSF = getJSF;\\n\\nfunction cachedProperty(obj, name, computer) {\\n var key = '_' + name;\\n obj.prototype[name] = function cachedProperty() {\\n return this[key] !== undefined ? this[key] :\\n this[key] = computer.call(this);\\n };\\n}\\nutils.cachedProperty = cachedProperty;\\n\\nfunction parseBytes(bytes) {\\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\\n bytes;\\n}\\nutils.parseBytes = parseBytes;\\n\\nfunction intFromLE(bytes) {\\n return new BN(bytes, 'hex', 'le');\\n}\\nutils.intFromLE = intFromLE;\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/package.json\":\n/*!********************************************!*\\\n !*** ./node_modules/elliptic/package.json ***!\n \\********************************************/\n/*! exports provided: _args, _from, _id, _inBundle, _integrity, _location, _phantomChildren, _requested, _requiredBy, _resolved, _spec, _where, author, bugs, dependencies, description, devDependencies, files, homepage, keywords, license, main, name, repository, scripts, version, default */\n/***/ (function(module) {\n\neval(\"module.exports = {\\\"_args\\\":[[\\\"elliptic@6.4.1\\\",\\\"/Users/kenzo/profile-hover\\\"]],\\\"_from\\\":\\\"elliptic@6.4.1\\\",\\\"_id\\\":\\\"elliptic@6.4.1\\\",\\\"_inBundle\\\":false,\\\"_integrity\\\":\\\"sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==\\\",\\\"_location\\\":\\\"/elliptic\\\",\\\"_phantomChildren\\\":{},\\\"_requested\\\":{\\\"type\\\":\\\"version\\\",\\\"registry\\\":true,\\\"raw\\\":\\\"elliptic@6.4.1\\\",\\\"name\\\":\\\"elliptic\\\",\\\"escapedName\\\":\\\"elliptic\\\",\\\"rawSpec\\\":\\\"6.4.1\\\",\\\"saveSpec\\\":null,\\\"fetchSpec\\\":\\\"6.4.1\\\"},\\\"_requiredBy\\\":[\\\"/3box-orbitdb-plugins/did-jwt\\\",\\\"/3id-resolver/did-jwt\\\",\\\"/browserify-sign\\\",\\\"/create-ecdh\\\",\\\"/did-jwt\\\",\\\"/orbit-db-keystore\\\",\\\"/secp256k1\\\"],\\\"_resolved\\\":\\\"https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz\\\",\\\"_spec\\\":\\\"6.4.1\\\",\\\"_where\\\":\\\"/Users/kenzo/profile-hover\\\",\\\"author\\\":{\\\"name\\\":\\\"Fedor Indutny\\\",\\\"email\\\":\\\"fedor@indutny.com\\\"},\\\"bugs\\\":{\\\"url\\\":\\\"https://github.com/indutny/elliptic/issues\\\"},\\\"dependencies\\\":{\\\"bn.js\\\":\\\"^4.4.0\\\",\\\"brorand\\\":\\\"^1.0.1\\\",\\\"hash.js\\\":\\\"^1.0.0\\\",\\\"hmac-drbg\\\":\\\"^1.0.0\\\",\\\"inherits\\\":\\\"^2.0.1\\\",\\\"minimalistic-assert\\\":\\\"^1.0.0\\\",\\\"minimalistic-crypto-utils\\\":\\\"^1.0.0\\\"},\\\"description\\\":\\\"EC cryptography\\\",\\\"devDependencies\\\":{\\\"brfs\\\":\\\"^1.4.3\\\",\\\"coveralls\\\":\\\"^2.11.3\\\",\\\"grunt\\\":\\\"^0.4.5\\\",\\\"grunt-browserify\\\":\\\"^5.0.0\\\",\\\"grunt-cli\\\":\\\"^1.2.0\\\",\\\"grunt-contrib-connect\\\":\\\"^1.0.0\\\",\\\"grunt-contrib-copy\\\":\\\"^1.0.0\\\",\\\"grunt-contrib-uglify\\\":\\\"^1.0.1\\\",\\\"grunt-mocha-istanbul\\\":\\\"^3.0.1\\\",\\\"grunt-saucelabs\\\":\\\"^8.6.2\\\",\\\"istanbul\\\":\\\"^0.4.2\\\",\\\"jscs\\\":\\\"^2.9.0\\\",\\\"jshint\\\":\\\"^2.6.0\\\",\\\"mocha\\\":\\\"^2.1.0\\\"},\\\"files\\\":[\\\"lib\\\"],\\\"homepage\\\":\\\"https://github.com/indutny/elliptic\\\",\\\"keywords\\\":[\\\"EC\\\",\\\"Elliptic\\\",\\\"curve\\\",\\\"Cryptography\\\"],\\\"license\\\":\\\"MIT\\\",\\\"main\\\":\\\"lib/elliptic.js\\\",\\\"name\\\":\\\"elliptic\\\",\\\"repository\\\":{\\\"type\\\":\\\"git\\\",\\\"url\\\":\\\"git+ssh://git@github.com/indutny/elliptic.git\\\"},\\\"scripts\\\":{\\\"jscs\\\":\\\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\\\",\\\"jshint\\\":\\\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\\\",\\\"lint\\\":\\\"npm run jscs && npm run jshint\\\",\\\"test\\\":\\\"npm run lint && npm run unit\\\",\\\"unit\\\":\\\"istanbul test _mocha --reporter=spec test/index.js\\\",\\\"version\\\":\\\"grunt dist && git add dist/\\\"},\\\"version\\\":\\\"6.4.1\\\"};\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/package.json?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ethereum-blockies-base64/dist/main.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/ethereum-blockies-base64/dist/main.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"(function webpackUniversalModuleDefinition(root, factory) {\\n\\tif(true)\\n\\t\\tmodule.exports = factory();\\n\\telse {}\\n})(this, function() {\\nreturn /******/ (function(modules) { // webpackBootstrap\\n/******/ \\t// The module cache\\n/******/ \\tvar installedModules = {};\\n\\n/******/ \\t// The require function\\n/******/ \\tfunction __webpack_require__(moduleId) {\\n\\n/******/ \\t\\t// Check if module is in cache\\n/******/ \\t\\tif(installedModules[moduleId])\\n/******/ \\t\\t\\treturn installedModules[moduleId].exports;\\n\\n/******/ \\t\\t// Create a new module (and put it into the cache)\\n/******/ \\t\\tvar module = installedModules[moduleId] = {\\n/******/ \\t\\t\\texports: {},\\n/******/ \\t\\t\\tid: moduleId,\\n/******/ \\t\\t\\tloaded: false\\n/******/ \\t\\t};\\n\\n/******/ \\t\\t// Execute the module function\\n/******/ \\t\\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\\n\\n/******/ \\t\\t// Flag the module as loaded\\n/******/ \\t\\tmodule.loaded = true;\\n\\n/******/ \\t\\t// Return the exports of the module\\n/******/ \\t\\treturn module.exports;\\n/******/ \\t}\\n\\n\\n/******/ \\t// expose the modules object (__webpack_modules__)\\n/******/ \\t__webpack_require__.m = modules;\\n\\n/******/ \\t// expose the module cache\\n/******/ \\t__webpack_require__.c = installedModules;\\n\\n/******/ \\t// __webpack_public_path__\\n/******/ \\t__webpack_require__.p = \\\"\\\";\\n\\n/******/ \\t// Load entry module and return exports\\n/******/ \\treturn __webpack_require__(0);\\n/******/ })\\n/************************************************************************/\\n/******/ ([\\n/* 0 */\\n/***/ function(module, exports, __webpack_require__) {\\n\\n\\tconst pnglib = __webpack_require__(1);\\n\\tconst hsl2rgb = __webpack_require__(2);\\n\\n\\t// The random number is a js implementation of the Xorshift PRNG\\n\\tconst randseed = new Array(4); // Xorshift: [x, y, z, w] 32 bit values\\n\\n\\tfunction seedrand(seed) {\\n\\t for (let i = 0; i < randseed.length; i++) {\\n\\t randseed[i] = 0;\\n\\t }\\n\\t for (let i = 0; i < seed.length; i++) {\\n\\t randseed[i % 4] = (randseed[i % 4] << 5) - randseed[i % 4] + seed.charCodeAt(i);\\n\\t }\\n\\t}\\n\\n\\tfunction rand() {\\n\\t // based on Java's String.hashCode(), expanded to 4 32bit values\\n\\t const t = randseed[0] ^ (randseed[0] << 11);\\n\\n\\t randseed[0] = randseed[1];\\n\\t randseed[1] = randseed[2];\\n\\t randseed[2] = randseed[3];\\n\\t randseed[3] = randseed[3] ^ (randseed[3] >> 19) ^ t ^ (t >> 8);\\n\\n\\t return (randseed[3] >>> 0) / (1 << 31 >>> 0);\\n\\t}\\n\\n\\tfunction createColor() {\\n\\t //saturation is the whole color spectrum\\n\\t const h = Math.floor(rand() * 360);\\n\\t //saturation goes from 40 to 100, it avoids greyish colors\\n\\t const s = rand() * 60 + 40;\\n\\t //lightness can be anything from 0 to 100, but probabilities are a bell curve around 50%\\n\\t const l = (rand() + rand() + rand() + rand()) * 25 ;\\n\\n\\t return [h / 360, s / 100, l / 100];\\n\\t}\\n\\n\\tfunction createImageData(size) {\\n\\t const width = size; // Only support square icons for now\\n\\t const height = size;\\n\\n\\t const dataWidth = Math.ceil(width / 2);\\n\\t const mirrorWidth = width - dataWidth;\\n\\n\\t const data = [];\\n\\t for (let y = 0; y < height; y++) {\\n\\t let row = [];\\n\\t for (let x = 0; x < dataWidth; x++) {\\n\\t // this makes foreground and background color to have a 43% (1/2.3) probability\\n\\t // spot color has 13% chance\\n\\t row[x] = Math.floor(rand() * 2.3);\\n\\t }\\n\\t const r = row.slice(0, mirrorWidth).reverse();\\n\\t row = row.concat(r);\\n\\n\\t for (let i = 0; i < row.length; i++) {\\n\\t data.push(row[i]);\\n\\t }\\n\\t }\\n\\n\\t return data;\\n\\t}\\n\\n\\t// Modifies the passed PNG to fill in a specified rectangle\\n\\tfunction fillRect(png, x, y, w, h, color) {\\n\\t for(let i = 0; i < w; i++) {\\n\\t for (let j = 0; j < h; j++) {\\n\\t png.buffer[png.index(x + i, y + j)] = color;\\n\\t }\\n\\t }\\n\\t}\\n\\n\\tfunction buildOpts(opts) {\\n\\t if (!opts.seed) {\\n\\t throw new Error('No seed provided');\\n\\t }\\n\\n\\t seedrand(opts.seed);\\n\\n\\t return Object.assign({\\n\\t size: 8,\\n\\t scale: 16,\\n\\t color: createColor(),\\n\\t bgcolor: createColor(),\\n\\t spotcolor: createColor(),\\n\\t }, opts)\\n\\t}\\n\\n\\tfunction makeBlockie(address) {\\n\\t const opts = buildOpts({ seed: address.toLowerCase() });\\n\\n\\t const imageData = createImageData(opts.size);\\n\\t const width = Math.sqrt(imageData.length);\\n\\n\\t const p = new pnglib(opts.size * opts.scale, opts.size * opts.scale, 3);\\n\\t const bgcolor = p.color(...hsl2rgb(...opts.bgcolor));\\n\\t const color = p.color(...hsl2rgb(...opts.color));\\n\\t const spotcolor = p.color(...hsl2rgb(...opts.spotcolor));\\n\\n\\t for (let i = 0; i < imageData.length; i++) {\\n\\t const row = Math.floor(i / width);\\n\\t const col = i % width;\\n\\t // if data is 0, leave the background\\n\\t if (imageData[i]) {\\n\\t // if data is 2, choose spot color, if 1 choose foreground\\n\\t const pngColor = imageData[i] == 1 ? color : spotcolor;\\n\\t fillRect(p, col * opts.scale, row * opts.scale, opts.scale, opts.scale, pngColor);\\n\\t }\\n\\t }\\n\\t return `data:image/png;base64,${p.getBase64()}`;\\n\\t}\\n\\n\\tmodule.exports = makeBlockie;\\n\\n\\n/***/ },\\n/* 1 */\\n/***/ function(module, exports) {\\n\\n\\t/**\\n\\t * A handy class to calculate color values.\\n\\t *\\n\\t * @version 1.0\\n\\t * @author Robert Eisele <robert@xarg.org>\\n\\t * @copyright Copyright (c) 2010, Robert Eisele\\n\\t * @link http://www.xarg.org/2010/03/generate-client-side-png-files-using-javascript/\\n\\t * @license http://www.opensource.org/licenses/bsd-license.php BSD License\\n\\t *\\n\\t */\\n\\n\\t// Modified by George Chan <gchan@21cn.com>\\n\\n\\t// Further modified by Will O'B <@wbobeirne> to make it\\n\\t// UglifyJS and \\\"use strict\\\"; friendly\\n\\n\\tmodule.exports = function(width,height,depth) {\\n\\n\\n\\t // helper functions for that ctx\\n\\t function write(buffer, offs) {\\n\\t for (var i = 2; i < arguments.length; i++) {\\n\\t for (var j = 0; j < arguments[i].length; j++) {\\n\\t buffer[offs++] = arguments[i].charAt(j);\\n\\t }\\n\\t }\\n\\t }\\n\\n\\t function byte2(w) {\\n\\t return String.fromCharCode((w >> 8) & 255, w & 255);\\n\\t }\\n\\n\\t function byte4(w) {\\n\\t return String.fromCharCode((w >> 24) & 255, (w >> 16) & 255, (w >> 8) & 255, w & 255);\\n\\t }\\n\\n\\t function byte2lsb(w) {\\n\\t return String.fromCharCode(w & 255, (w >> 8) & 255);\\n\\t }\\n\\n\\t this.width = width;\\n\\t this.height = height;\\n\\t this.depth = depth;\\n\\n\\t // pixel data and row filter identifier size\\n\\t this.pix_size = height * (width + 1);\\n\\n\\t // deflate header, pix_size, block headers, adler32 checksum\\n\\t this.data_size = 2 + this.pix_size + 5 * Math.floor((0xfffe + this.pix_size) / 0xffff) + 4;\\n\\n\\t // offsets and sizes of Png chunks\\n\\t this.ihdr_offs = 0; // IHDR offset and size\\n\\t this.ihdr_size = 4 + 4 + 13 + 4;\\n\\t this.plte_offs = this.ihdr_offs + this.ihdr_size; // PLTE offset and size\\n\\t this.plte_size = 4 + 4 + 3 * depth + 4;\\n\\t this.trns_offs = this.plte_offs + this.plte_size; // tRNS offset and size\\n\\t this.trns_size = 4 + 4 + depth + 4;\\n\\t this.idat_offs = this.trns_offs + this.trns_size; // IDAT offset and size\\n\\t this.idat_size = 4 + 4 + this.data_size + 4;\\n\\t this.iend_offs = this.idat_offs + this.idat_size; // IEND offset and size\\n\\t this.iend_size = 4 + 4 + 4;\\n\\t this.buffer_size = this.iend_offs + this.iend_size; // total PNG size\\n\\n\\t this.buffer = new Array();\\n\\t this.palette = new Object();\\n\\t this.pindex = 0;\\n\\n\\t var _crc32 = new Array();\\n\\n\\t // initialize buffer with zero bytes\\n\\t for (var i = 0; i < this.buffer_size; i++) {\\n\\t this.buffer[i] = \\\"\\\\x00\\\";\\n\\t }\\n\\n\\t // initialize non-zero elements\\n\\t write(this.buffer, this.ihdr_offs, byte4(this.ihdr_size - 12), 'IHDR', byte4(width), byte4(height), \\\"\\\\x08\\\\x03\\\");\\n\\t write(this.buffer, this.plte_offs, byte4(this.plte_size - 12), 'PLTE');\\n\\t write(this.buffer, this.trns_offs, byte4(this.trns_size - 12), 'tRNS');\\n\\t write(this.buffer, this.idat_offs, byte4(this.idat_size - 12), 'IDAT');\\n\\t write(this.buffer, this.iend_offs, byte4(this.iend_size - 12), 'IEND');\\n\\n\\t // initialize deflate header\\n\\t var header = ((8 + (7 << 4)) << 8) | (3 << 6);\\n\\t header+= 31 - (header % 31);\\n\\n\\t write(this.buffer, this.idat_offs + 8, byte2(header));\\n\\n\\t // initialize deflate block headers\\n\\t for (var i = 0; (i << 16) - 1 < this.pix_size; i++) {\\n\\t var size, bits;\\n\\t if (i + 0xffff < this.pix_size) {\\n\\t size = 0xffff;\\n\\t bits = \\\"\\\\x00\\\";\\n\\t } else {\\n\\t size = this.pix_size - (i << 16) - i;\\n\\t bits = \\\"\\\\x01\\\";\\n\\t }\\n\\t write(this.buffer, this.idat_offs + 8 + 2 + (i << 16) + (i << 2), bits, byte2lsb(size), byte2lsb(~size));\\n\\t }\\n\\n\\t /* Create crc32 lookup table */\\n\\t for (var i = 0; i < 256; i++) {\\n\\t var c = i;\\n\\t for (var j = 0; j < 8; j++) {\\n\\t if (c & 1) {\\n\\t c = -306674912 ^ ((c >> 1) & 0x7fffffff);\\n\\t } else {\\n\\t c = (c >> 1) & 0x7fffffff;\\n\\t }\\n\\t }\\n\\t _crc32[i] = c;\\n\\t }\\n\\n\\t // compute the index into a png for a given pixel\\n\\t this.index = function(x,y) {\\n\\t var i = y * (this.width + 1) + x + 1;\\n\\t var j = this.idat_offs + 8 + 2 + 5 * Math.floor((i / 0xffff) + 1) + i;\\n\\t return j;\\n\\t }\\n\\n\\t // convert a color and build up the palette\\n\\t this.color = function(red, green, blue, alpha) {\\n\\n\\t alpha = alpha >= 0 ? alpha : 255;\\n\\t var color = (((((alpha << 8) | red) << 8) | green) << 8) | blue;\\n\\n\\t if (typeof this.palette[color] == \\\"undefined\\\") {\\n\\t if (this.pindex == this.depth) return \\\"\\\\x00\\\";\\n\\n\\t var ndx = this.plte_offs + 8 + 3 * this.pindex;\\n\\n\\t this.buffer[ndx + 0] = String.fromCharCode(red);\\n\\t this.buffer[ndx + 1] = String.fromCharCode(green);\\n\\t this.buffer[ndx + 2] = String.fromCharCode(blue);\\n\\t this.buffer[this.trns_offs+8+this.pindex] = String.fromCharCode(alpha);\\n\\n\\t this.palette[color] = String.fromCharCode(this.pindex++);\\n\\t }\\n\\t return this.palette[color];\\n\\t }\\n\\n\\t // output a PNG string, Base64 encoded\\n\\t this.getBase64 = function() {\\n\\n\\t var s = this.getDump();\\n\\n\\t var ch = \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\\";\\n\\t var c1, c2, c3, e1, e2, e3, e4;\\n\\t var l = s.length;\\n\\t var i = 0;\\n\\t var r = \\\"\\\";\\n\\n\\t do {\\n\\t c1 = s.charCodeAt(i);\\n\\t e1 = c1 >> 2;\\n\\t c2 = s.charCodeAt(i+1);\\n\\t e2 = ((c1 & 3) << 4) | (c2 >> 4);\\n\\t c3 = s.charCodeAt(i+2);\\n\\t if (l < i+2) { e3 = 64; } else { e3 = ((c2 & 0xf) << 2) | (c3 >> 6); }\\n\\t if (l < i+3) { e4 = 64; } else { e4 = c3 & 0x3f; }\\n\\t r+= ch.charAt(e1) + ch.charAt(e2) + ch.charAt(e3) + ch.charAt(e4);\\n\\t } while ((i+= 3) < l);\\n\\t return r;\\n\\t }\\n\\n\\t // output a PNG string\\n\\t this.getDump = function() {\\n\\t // compute adler32 of output pixels + row filter bytes\\n\\t var BASE = 65521; /* largest prime smaller than 65536 */\\n\\t var NMAX = 5552; /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */\\n\\t var s1 = 1;\\n\\t var s2 = 0;\\n\\t var n = NMAX;\\n\\n\\t for (var y = 0; y < this.height; y++) {\\n\\t for (var x = -1; x < this.width; x++) {\\n\\t s1+= this.buffer[this.index(x, y)].charCodeAt(0);\\n\\t s2+= s1;\\n\\t if ((n-= 1) == 0) {\\n\\t s1%= BASE;\\n\\t s2%= BASE;\\n\\t n = NMAX;\\n\\t }\\n\\t }\\n\\t }\\n\\t s1%= BASE;\\n\\t s2%= BASE;\\n\\t write(this.buffer, this.idat_offs + this.idat_size - 8, byte4((s2 << 16) | s1));\\n\\n\\t // compute crc32 of the PNG chunks\\n\\t function crc32(png, offs, size) {\\n\\t var crc = -1;\\n\\t for (var i = 4; i < size-4; i += 1) {\\n\\t crc = _crc32[(crc ^ png[offs+i].charCodeAt(0)) & 0xff] ^ ((crc >> 8) & 0x00ffffff);\\n\\t }\\n\\t write(png, offs+size-4, byte4(crc ^ -1));\\n\\t }\\n\\n\\t crc32(this.buffer, this.ihdr_offs, this.ihdr_size);\\n\\t crc32(this.buffer, this.plte_offs, this.plte_size);\\n\\t crc32(this.buffer, this.trns_offs, this.trns_size);\\n\\t crc32(this.buffer, this.idat_offs, this.idat_size);\\n\\t crc32(this.buffer, this.iend_offs, this.iend_size);\\n\\n\\t // convert PNG to string\\n\\t return \\\"\\\\x89PNG\\\\r\\\\n\\\\x1a\\\\n\\\" + this.buffer.join('');\\n\\t }\\n\\t};\\n\\n\\n/***/ },\\n/* 2 */\\n/***/ function(module, exports) {\\n\\n\\t// https://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion\\n\\t/**\\n\\t * Converts an HSL color value to RGB. Conversion formula\\n\\t * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\\n\\t * Assumes h, s, and l are contained in the set [0, 1] and\\n\\t * returns r, g, and b in the set [0, 255].\\n\\t *\\n\\t * @param {number} h The hue\\n\\t * @param {number} s The saturation\\n\\t * @param {number} l The lightness\\n\\t * @return {Array} The RGB representation\\n\\t */\\n\\n\\t function hue2rgb(p, q, t) {\\n\\t if(t < 0) t += 1;\\n\\t if(t > 1) t -= 1;\\n\\t if(t < 1/6) return p + (q - p) * 6 * t;\\n\\t if(t < 1/2) return q;\\n\\t if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\\n\\t return p;\\n\\t }\\n\\n\\tfunction hsl2rgb(h, s, l){\\n\\t let r, g, b;\\n\\n\\t if (s == 0) {\\n\\t r = g = b = l; // achromatic\\n\\t } else {\\n\\t const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\\n\\t const p = 2 * l - q;\\n\\t r = hue2rgb(p, q, h + 1/3);\\n\\t g = hue2rgb(p, q, h);\\n\\t b = hue2rgb(p, q, h - 1/3);\\n\\t }\\n\\n\\t return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), 255];\\n\\t}\\n\\n\\tmodule.exports = hsl2rgb;\\n\\n\\n/***/ }\\n/******/ ])\\n});\\n;\\n\\n//# sourceURL=webpack:///./node_modules/ethereum-blockies-base64/dist/main.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/graphql-request/dist/src/index.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/graphql-request/dist/src/index.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\\n for (var s, i = 1, n = arguments.length; i < n; i++) {\\n s = arguments[i];\\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n t[p] = s[p];\\n }\\n return t;\\n};\\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\nvar __generator = (this && this.__generator) || function (thisArg, body) {\\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n return g = { next: verb(0), \\\"throw\\\": verb(1), \\\"return\\\": verb(2) }, typeof Symbol === \\\"function\\\" && (g[Symbol.iterator] = function() { return this; }), g;\\n function verb(n) { return function (v) { return step([n, v]); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\"Generator is already executing.\\\");\\n while (_) try {\\n if (f = 1, y && (t = y[op[0] & 2 ? \\\"return\\\" : op[0] ? \\\"throw\\\" : \\\"next\\\"]) && !(t = t.call(y, op[1])).done) return t;\\n if (y = 0, t) op = [0, t.value];\\n switch (op[0]) {\\n case 0: case 1: t = op; break;\\n case 4: _.label++; return { value: op[1], done: false };\\n case 5: _.label++; y = op[1]; op = [0]; continue;\\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\\n if (t[2]) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op = body.call(thisArg, _);\\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\\n }\\n};\\nvar __rest = (this && this.__rest) || function (s, e) {\\n var t = {};\\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\\n t[p] = s[p];\\n if (s != null && typeof Object.getOwnPropertySymbols === \\\"function\\\")\\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\\n t[p[i]] = s[p[i]];\\n return t;\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar types_1 = __webpack_require__(/*! ./types */ \\\"./node_modules/graphql-request/dist/src/types.js\\\");\\nvar types_2 = __webpack_require__(/*! ./types */ \\\"./node_modules/graphql-request/dist/src/types.js\\\");\\nexports.ClientError = types_2.ClientError;\\n__webpack_require__(/*! cross-fetch/polyfill */ \\\"./node_modules/graphql-request/node_modules/cross-fetch/dist/browser-polyfill.js\\\");\\nvar GraphQLClient = /** @class */ (function () {\\n function GraphQLClient(url, options) {\\n this.url = url;\\n this.options = options || {};\\n }\\n GraphQLClient.prototype.rawRequest = function (query, variables) {\\n return __awaiter(this, void 0, void 0, function () {\\n var _a, headers, others, body, response, result, headers_1, status_1, errorResult;\\n return __generator(this, function (_b) {\\n switch (_b.label) {\\n case 0:\\n _a = this.options, headers = _a.headers, others = __rest(_a, [\\\"headers\\\"]);\\n body = JSON.stringify({\\n query: query,\\n variables: variables ? variables : undefined,\\n });\\n return [4 /*yield*/, fetch(this.url, __assign({ method: 'POST', headers: Object.assign({ 'Content-Type': 'application/json' }, headers), body: body }, others))];\\n case 1:\\n response = _b.sent();\\n return [4 /*yield*/, getResult(response)];\\n case 2:\\n result = _b.sent();\\n if (response.ok && !result.errors && result.data) {\\n headers_1 = response.headers, status_1 = response.status;\\n return [2 /*return*/, __assign({}, result, { headers: headers_1, status: status_1 })];\\n }\\n else {\\n errorResult = typeof result === 'string' ? { error: result } : result;\\n throw new types_1.ClientError(__assign({}, errorResult, { status: response.status, headers: response.headers }), { query: query, variables: variables });\\n }\\n return [2 /*return*/];\\n }\\n });\\n });\\n };\\n GraphQLClient.prototype.request = function (query, variables) {\\n return __awaiter(this, void 0, void 0, function () {\\n var _a, headers, others, body, response, result, errorResult;\\n return __generator(this, function (_b) {\\n switch (_b.label) {\\n case 0:\\n _a = this.options, headers = _a.headers, others = __rest(_a, [\\\"headers\\\"]);\\n body = JSON.stringify({\\n query: query,\\n variables: variables ? variables : undefined,\\n });\\n return [4 /*yield*/, fetch(this.url, __assign({ method: 'POST', headers: Object.assign({ 'Content-Type': 'application/json' }, headers), body: body }, others))];\\n case 1:\\n response = _b.sent();\\n return [4 /*yield*/, getResult(response)];\\n case 2:\\n result = _b.sent();\\n if (response.ok && !result.errors && result.data) {\\n return [2 /*return*/, result.data];\\n }\\n else {\\n errorResult = typeof result === 'string' ? { error: result } : result;\\n throw new types_1.ClientError(__assign({}, errorResult, { status: response.status }), { query: query, variables: variables });\\n }\\n return [2 /*return*/];\\n }\\n });\\n });\\n };\\n GraphQLClient.prototype.setHeaders = function (headers) {\\n this.options.headers = headers;\\n return this;\\n };\\n GraphQLClient.prototype.setHeader = function (key, value) {\\n var headers = this.options.headers;\\n if (headers) {\\n headers[key] = value;\\n }\\n else {\\n this.options.headers = (_a = {}, _a[key] = value, _a);\\n }\\n return this;\\n var _a;\\n };\\n return GraphQLClient;\\n}());\\nexports.GraphQLClient = GraphQLClient;\\nfunction rawRequest(url, query, variables) {\\n return __awaiter(this, void 0, void 0, function () {\\n var client;\\n return __generator(this, function (_a) {\\n client = new GraphQLClient(url);\\n return [2 /*return*/, client.rawRequest(query, variables)];\\n });\\n });\\n}\\nexports.rawRequest = rawRequest;\\nfunction request(url, query, variables) {\\n return __awaiter(this, void 0, void 0, function () {\\n var client;\\n return __generator(this, function (_a) {\\n client = new GraphQLClient(url);\\n return [2 /*return*/, client.request(query, variables)];\\n });\\n });\\n}\\nexports.request = request;\\nexports.default = request;\\nfunction getResult(response) {\\n return __awaiter(this, void 0, void 0, function () {\\n var contentType;\\n return __generator(this, function (_a) {\\n contentType = response.headers.get('Content-Type');\\n if (contentType && contentType.startsWith('application/json')) {\\n return [2 /*return*/, response.json()];\\n }\\n else {\\n return [2 /*return*/, response.text()];\\n }\\n return [2 /*return*/];\\n });\\n });\\n}\\n//# sourceMappingURL=index.js.map\\n\\n//# sourceURL=webpack:///./node_modules/graphql-request/dist/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/graphql-request/dist/src/types.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/graphql-request/dist/src/types.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __extends = (this && this.__extends) || (function () {\\n var extendStatics = Object.setPrototypeOf ||\\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\\n return function (d, b) {\\n extendStatics(d, b);\\n function __() { this.constructor = d; }\\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\\n };\\n})();\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar ClientError = /** @class */ (function (_super) {\\n __extends(ClientError, _super);\\n function ClientError(response, request) {\\n var _this = this;\\n var message = ClientError.extractMessage(response) + \\\": \\\" + JSON.stringify({ response: response, request: request });\\n _this = _super.call(this, message) || this;\\n _this.response = response;\\n _this.request = request;\\n // this is needed as Safari doesn't support .captureStackTrace\\n /* tslint:disable-next-line */\\n if (typeof Error.captureStackTrace === 'function') {\\n Error.captureStackTrace(_this, ClientError);\\n }\\n return _this;\\n }\\n ClientError.extractMessage = function (response) {\\n try {\\n return response.errors[0].message;\\n }\\n catch (e) {\\n return \\\"GraphQL Error (Code: \\\" + response.status + \\\")\\\";\\n }\\n };\\n return ClientError;\\n}(Error));\\nexports.ClientError = ClientError;\\n//# sourceMappingURL=types.js.map\\n\\n//# sourceURL=webpack:///./node_modules/graphql-request/dist/src/types.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/graphql-request/node_modules/cross-fetch/dist/browser-polyfill.js\":\n/*!****************************************************************************************!*\\\n !*** ./node_modules/graphql-request/node_modules/cross-fetch/dist/browser-polyfill.js ***!\n \\****************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"(function(self) {\\n\\n if (self.fetch) {\\n return\\n }\\n\\n var support = {\\n searchParams: 'URLSearchParams' in self,\\n iterable: 'Symbol' in self && 'iterator' in Symbol,\\n blob: 'FileReader' in self && 'Blob' in self && (function() {\\n try {\\n new Blob();\\n return true\\n } catch(e) {\\n return false\\n }\\n })(),\\n formData: 'FormData' in self,\\n arrayBuffer: 'ArrayBuffer' in self\\n };\\n\\n if (support.arrayBuffer) {\\n var viewClasses = [\\n '[object Int8Array]',\\n '[object Uint8Array]',\\n '[object Uint8ClampedArray]',\\n '[object Int16Array]',\\n '[object Uint16Array]',\\n '[object Int32Array]',\\n '[object Uint32Array]',\\n '[object Float32Array]',\\n '[object Float64Array]'\\n ];\\n\\n var isDataView = function(obj) {\\n return obj && DataView.prototype.isPrototypeOf(obj)\\n };\\n\\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\\n };\\n }\\n\\n function normalizeName(name) {\\n if (typeof name !== 'string') {\\n name = String(name);\\n }\\n if (/[^a-z0-9\\\\-#$%&'*+.\\\\^_`|~]/i.test(name)) {\\n throw new TypeError('Invalid character in header field name')\\n }\\n return name.toLowerCase()\\n }\\n\\n function normalizeValue(value) {\\n if (typeof value !== 'string') {\\n value = String(value);\\n }\\n return value\\n }\\n\\n // Build a destructive iterator for the value list\\n function iteratorFor(items) {\\n var iterator = {\\n next: function() {\\n var value = items.shift();\\n return {done: value === undefined, value: value}\\n }\\n };\\n\\n if (support.iterable) {\\n iterator[Symbol.iterator] = function() {\\n return iterator\\n };\\n }\\n\\n return iterator\\n }\\n\\n function Headers(headers) {\\n this.map = {};\\n\\n if (headers instanceof Headers) {\\n headers.forEach(function(value, name) {\\n this.append(name, value);\\n }, this);\\n } else if (Array.isArray(headers)) {\\n headers.forEach(function(header) {\\n this.append(header[0], header[1]);\\n }, this);\\n } else if (headers) {\\n Object.getOwnPropertyNames(headers).forEach(function(name) {\\n this.append(name, headers[name]);\\n }, this);\\n }\\n }\\n\\n Headers.prototype.append = function(name, value) {\\n name = normalizeName(name);\\n value = normalizeValue(value);\\n var oldValue = this.map[name];\\n this.map[name] = oldValue ? oldValue+','+value : value;\\n };\\n\\n Headers.prototype['delete'] = function(name) {\\n delete this.map[normalizeName(name)];\\n };\\n\\n Headers.prototype.get = function(name) {\\n name = normalizeName(name);\\n return this.has(name) ? this.map[name] : null\\n };\\n\\n Headers.prototype.has = function(name) {\\n return this.map.hasOwnProperty(normalizeName(name))\\n };\\n\\n Headers.prototype.set = function(name, value) {\\n this.map[normalizeName(name)] = normalizeValue(value);\\n };\\n\\n Headers.prototype.forEach = function(callback, thisArg) {\\n for (var name in this.map) {\\n if (this.map.hasOwnProperty(name)) {\\n callback.call(thisArg, this.map[name], name, this);\\n }\\n }\\n };\\n\\n Headers.prototype.keys = function() {\\n var items = [];\\n this.forEach(function(value, name) { items.push(name); });\\n return iteratorFor(items)\\n };\\n\\n Headers.prototype.values = function() {\\n var items = [];\\n this.forEach(function(value) { items.push(value); });\\n return iteratorFor(items)\\n };\\n\\n Headers.prototype.entries = function() {\\n var items = [];\\n this.forEach(function(value, name) { items.push([name, value]); });\\n return iteratorFor(items)\\n };\\n\\n if (support.iterable) {\\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\\n }\\n\\n function consumed(body) {\\n if (body.bodyUsed) {\\n return Promise.reject(new TypeError('Already read'))\\n }\\n body.bodyUsed = true;\\n }\\n\\n function fileReaderReady(reader) {\\n return new Promise(function(resolve, reject) {\\n reader.onload = function() {\\n resolve(reader.result);\\n };\\n reader.onerror = function() {\\n reject(reader.error);\\n };\\n })\\n }\\n\\n function readBlobAsArrayBuffer(blob) {\\n var reader = new FileReader();\\n var promise = fileReaderReady(reader);\\n reader.readAsArrayBuffer(blob);\\n return promise\\n }\\n\\n function readBlobAsText(blob) {\\n var reader = new FileReader();\\n var promise = fileReaderReady(reader);\\n reader.readAsText(blob);\\n return promise\\n }\\n\\n function readArrayBufferAsText(buf) {\\n var view = new Uint8Array(buf);\\n var chars = new Array(view.length);\\n\\n for (var i = 0; i < view.length; i++) {\\n chars[i] = String.fromCharCode(view[i]);\\n }\\n return chars.join('')\\n }\\n\\n function bufferClone(buf) {\\n if (buf.slice) {\\n return buf.slice(0)\\n } else {\\n var view = new Uint8Array(buf.byteLength);\\n view.set(new Uint8Array(buf));\\n return view.buffer\\n }\\n }\\n\\n function Body() {\\n this.bodyUsed = false;\\n\\n this._initBody = function(body) {\\n this._bodyInit = body;\\n if (!body) {\\n this._bodyText = '';\\n } else if (typeof body === 'string') {\\n this._bodyText = body;\\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\\n this._bodyBlob = body;\\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\\n this._bodyFormData = body;\\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\\n this._bodyText = body.toString();\\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\\n this._bodyArrayBuffer = bufferClone(body.buffer);\\n // IE 10-11 can't handle a DataView body.\\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\\n this._bodyArrayBuffer = bufferClone(body);\\n } else {\\n throw new Error('unsupported BodyInit type')\\n }\\n\\n if (!this.headers.get('content-type')) {\\n if (typeof body === 'string') {\\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\\n } else if (this._bodyBlob && this._bodyBlob.type) {\\n this.headers.set('content-type', this._bodyBlob.type);\\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\\n }\\n }\\n };\\n\\n if (support.blob) {\\n this.blob = function() {\\n var rejected = consumed(this);\\n if (rejected) {\\n return rejected\\n }\\n\\n if (this._bodyBlob) {\\n return Promise.resolve(this._bodyBlob)\\n } else if (this._bodyArrayBuffer) {\\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\\n } else if (this._bodyFormData) {\\n throw new Error('could not read FormData body as blob')\\n } else {\\n return Promise.resolve(new Blob([this._bodyText]))\\n }\\n };\\n\\n this.arrayBuffer = function() {\\n if (this._bodyArrayBuffer) {\\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\\n } else {\\n return this.blob().then(readBlobAsArrayBuffer)\\n }\\n };\\n }\\n\\n this.text = function() {\\n var rejected = consumed(this);\\n if (rejected) {\\n return rejected\\n }\\n\\n if (this._bodyBlob) {\\n return readBlobAsText(this._bodyBlob)\\n } else if (this._bodyArrayBuffer) {\\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\\n } else if (this._bodyFormData) {\\n throw new Error('could not read FormData body as text')\\n } else {\\n return Promise.resolve(this._bodyText)\\n }\\n };\\n\\n if (support.formData) {\\n this.formData = function() {\\n return this.text().then(decode)\\n };\\n }\\n\\n this.json = function() {\\n return this.text().then(JSON.parse)\\n };\\n\\n return this\\n }\\n\\n // HTTP methods whose capitalization should be normalized\\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\\n\\n function normalizeMethod(method) {\\n var upcased = method.toUpperCase();\\n return (methods.indexOf(upcased) > -1) ? upcased : method\\n }\\n\\n function Request(input, options) {\\n options = options || {};\\n var body = options.body;\\n\\n if (input instanceof Request) {\\n if (input.bodyUsed) {\\n throw new TypeError('Already read')\\n }\\n this.url = input.url;\\n this.credentials = input.credentials;\\n if (!options.headers) {\\n this.headers = new Headers(input.headers);\\n }\\n this.method = input.method;\\n this.mode = input.mode;\\n if (!body && input._bodyInit != null) {\\n body = input._bodyInit;\\n input.bodyUsed = true;\\n }\\n } else {\\n this.url = String(input);\\n }\\n\\n this.credentials = options.credentials || this.credentials || 'omit';\\n if (options.headers || !this.headers) {\\n this.headers = new Headers(options.headers);\\n }\\n this.method = normalizeMethod(options.method || this.method || 'GET');\\n this.mode = options.mode || this.mode || null;\\n this.referrer = null;\\n\\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\\n throw new TypeError('Body not allowed for GET or HEAD requests')\\n }\\n this._initBody(body);\\n }\\n\\n Request.prototype.clone = function() {\\n return new Request(this, { body: this._bodyInit })\\n };\\n\\n function decode(body) {\\n var form = new FormData();\\n body.trim().split('&').forEach(function(bytes) {\\n if (bytes) {\\n var split = bytes.split('=');\\n var name = split.shift().replace(/\\\\+/g, ' ');\\n var value = split.join('=').replace(/\\\\+/g, ' ');\\n form.append(decodeURIComponent(name), decodeURIComponent(value));\\n }\\n });\\n return form\\n }\\n\\n function parseHeaders(rawHeaders) {\\n var headers = new Headers();\\n // Replace instances of \\\\r\\\\n and \\\\n followed by at least one space or horizontal tab with a space\\n // https://tools.ietf.org/html/rfc7230#section-3.2\\n var preProcessedHeaders = rawHeaders.replace(/\\\\r?\\\\n[\\\\t ]+/g, ' ');\\n preProcessedHeaders.split(/\\\\r?\\\\n/).forEach(function(line) {\\n var parts = line.split(':');\\n var key = parts.shift().trim();\\n if (key) {\\n var value = parts.join(':').trim();\\n headers.append(key, value);\\n }\\n });\\n return headers\\n }\\n\\n Body.call(Request.prototype);\\n\\n function Response(bodyInit, options) {\\n if (!options) {\\n options = {};\\n }\\n\\n this.type = 'default';\\n this.status = options.status === undefined ? 200 : options.status;\\n this.ok = this.status >= 200 && this.status < 300;\\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\\n this.headers = new Headers(options.headers);\\n this.url = options.url || '';\\n this._initBody(bodyInit);\\n }\\n\\n Body.call(Response.prototype);\\n\\n Response.prototype.clone = function() {\\n return new Response(this._bodyInit, {\\n status: this.status,\\n statusText: this.statusText,\\n headers: new Headers(this.headers),\\n url: this.url\\n })\\n };\\n\\n Response.error = function() {\\n var response = new Response(null, {status: 0, statusText: ''});\\n response.type = 'error';\\n return response\\n };\\n\\n var redirectStatuses = [301, 302, 303, 307, 308];\\n\\n Response.redirect = function(url, status) {\\n if (redirectStatuses.indexOf(status) === -1) {\\n throw new RangeError('Invalid status code')\\n }\\n\\n return new Response(null, {status: status, headers: {location: url}})\\n };\\n\\n self.Headers = Headers;\\n self.Request = Request;\\n self.Response = Response;\\n\\n self.fetch = function(input, init) {\\n return new Promise(function(resolve, reject) {\\n var request = new Request(input, init);\\n var xhr = new XMLHttpRequest();\\n\\n xhr.onload = function() {\\n var options = {\\n status: xhr.status,\\n statusText: xhr.statusText,\\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\\n };\\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\\n resolve(new Response(body, options));\\n };\\n\\n xhr.onerror = function() {\\n reject(new TypeError('Network request failed'));\\n };\\n\\n xhr.ontimeout = function() {\\n reject(new TypeError('Network request failed'));\\n };\\n\\n xhr.open(request.method, request.url, true);\\n\\n if (request.credentials === 'include') {\\n xhr.withCredentials = true;\\n } else if (request.credentials === 'omit') {\\n xhr.withCredentials = false;\\n }\\n\\n if ('responseType' in xhr && support.blob) {\\n xhr.responseType = 'blob';\\n }\\n\\n request.headers.forEach(function(value, name) {\\n xhr.setRequestHeader(name, value);\\n });\\n\\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\\n })\\n };\\n self.fetch.polyfill = true;\\n})(typeof self !== 'undefined' ? self : this);\\n\\n\\n//# sourceURL=webpack:///./node_modules/graphql-request/node_modules/cross-fetch/dist/browser-polyfill.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash.js\":\n/*!******************************************!*\\\n !*** ./node_modules/hash.js/lib/hash.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var hash = exports;\\n\\nhash.utils = __webpack_require__(/*! ./hash/utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nhash.common = __webpack_require__(/*! ./hash/common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\nhash.sha = __webpack_require__(/*! ./hash/sha */ \\\"./node_modules/hash.js/lib/hash/sha.js\\\");\\nhash.ripemd = __webpack_require__(/*! ./hash/ripemd */ \\\"./node_modules/hash.js/lib/hash/ripemd.js\\\");\\nhash.hmac = __webpack_require__(/*! ./hash/hmac */ \\\"./node_modules/hash.js/lib/hash/hmac.js\\\");\\n\\n// Proxy hash functions to the main object\\nhash.sha1 = hash.sha.sha1;\\nhash.sha256 = hash.sha.sha256;\\nhash.sha224 = hash.sha.sha224;\\nhash.sha384 = hash.sha.sha384;\\nhash.sha512 = hash.sha.sha512;\\nhash.ripemd160 = hash.ripemd.ripemd160;\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/common.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/common.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction BlockHash() {\\n this.pending = null;\\n this.pendingTotal = 0;\\n this.blockSize = this.constructor.blockSize;\\n this.outSize = this.constructor.outSize;\\n this.hmacStrength = this.constructor.hmacStrength;\\n this.padLength = this.constructor.padLength / 8;\\n this.endian = 'big';\\n\\n this._delta8 = this.blockSize / 8;\\n this._delta32 = this.blockSize / 32;\\n}\\nexports.BlockHash = BlockHash;\\n\\nBlockHash.prototype.update = function update(msg, enc) {\\n // Convert message to array, pad it, and join into 32bit blocks\\n msg = utils.toArray(msg, enc);\\n if (!this.pending)\\n this.pending = msg;\\n else\\n this.pending = this.pending.concat(msg);\\n this.pendingTotal += msg.length;\\n\\n // Enough data, try updating\\n if (this.pending.length >= this._delta8) {\\n msg = this.pending;\\n\\n // Process pending data in blocks\\n var r = msg.length % this._delta8;\\n this.pending = msg.slice(msg.length - r, msg.length);\\n if (this.pending.length === 0)\\n this.pending = null;\\n\\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\\n for (var i = 0; i < msg.length; i += this._delta32)\\n this._update(msg, i, i + this._delta32);\\n }\\n\\n return this;\\n};\\n\\nBlockHash.prototype.digest = function digest(enc) {\\n this.update(this._pad());\\n assert(this.pending === null);\\n\\n return this._digest(enc);\\n};\\n\\nBlockHash.prototype._pad = function pad() {\\n var len = this.pendingTotal;\\n var bytes = this._delta8;\\n var k = bytes - ((len + this.padLength) % bytes);\\n var res = new Array(k + this.padLength);\\n res[0] = 0x80;\\n for (var i = 1; i < k; i++)\\n res[i] = 0;\\n\\n // Append length\\n len <<= 3;\\n if (this.endian === 'big') {\\n for (var t = 8; t < this.padLength; t++)\\n res[i++] = 0;\\n\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = (len >>> 24) & 0xff;\\n res[i++] = (len >>> 16) & 0xff;\\n res[i++] = (len >>> 8) & 0xff;\\n res[i++] = len & 0xff;\\n } else {\\n res[i++] = len & 0xff;\\n res[i++] = (len >>> 8) & 0xff;\\n res[i++] = (len >>> 16) & 0xff;\\n res[i++] = (len >>> 24) & 0xff;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n\\n for (t = 8; t < this.padLength; t++)\\n res[i++] = 0;\\n }\\n\\n return res;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/common.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/hmac.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/hmac.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction Hmac(hash, key, enc) {\\n if (!(this instanceof Hmac))\\n return new Hmac(hash, key, enc);\\n this.Hash = hash;\\n this.blockSize = hash.blockSize / 8;\\n this.outSize = hash.outSize / 8;\\n this.inner = null;\\n this.outer = null;\\n\\n this._init(utils.toArray(key, enc));\\n}\\nmodule.exports = Hmac;\\n\\nHmac.prototype._init = function init(key) {\\n // Shorten key, if needed\\n if (key.length > this.blockSize)\\n key = new this.Hash().update(key).digest();\\n assert(key.length <= this.blockSize);\\n\\n // Add padding to key\\n for (var i = key.length; i < this.blockSize; i++)\\n key.push(0);\\n\\n for (i = 0; i < key.length; i++)\\n key[i] ^= 0x36;\\n this.inner = new this.Hash().update(key);\\n\\n // 0x36 ^ 0x5c = 0x6a\\n for (i = 0; i < key.length; i++)\\n key[i] ^= 0x6a;\\n this.outer = new this.Hash().update(key);\\n};\\n\\nHmac.prototype.update = function update(msg, enc) {\\n this.inner.update(msg, enc);\\n return this;\\n};\\n\\nHmac.prototype.digest = function digest(enc) {\\n this.outer.update(this.inner.digest());\\n return this.outer.digest(enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/hmac.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/ripemd.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/ripemd.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ./common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\n\\nvar rotl32 = utils.rotl32;\\nvar sum32 = utils.sum32;\\nvar sum32_3 = utils.sum32_3;\\nvar sum32_4 = utils.sum32_4;\\nvar BlockHash = common.BlockHash;\\n\\nfunction RIPEMD160() {\\n if (!(this instanceof RIPEMD160))\\n return new RIPEMD160();\\n\\n BlockHash.call(this);\\n\\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\\n this.endian = 'little';\\n}\\nutils.inherits(RIPEMD160, BlockHash);\\nexports.ripemd160 = RIPEMD160;\\n\\nRIPEMD160.blockSize = 512;\\nRIPEMD160.outSize = 160;\\nRIPEMD160.hmacStrength = 192;\\nRIPEMD160.padLength = 64;\\n\\nRIPEMD160.prototype._update = function update(msg, start) {\\n var A = this.h[0];\\n var B = this.h[1];\\n var C = this.h[2];\\n var D = this.h[3];\\n var E = this.h[4];\\n var Ah = A;\\n var Bh = B;\\n var Ch = C;\\n var Dh = D;\\n var Eh = E;\\n for (var j = 0; j < 80; j++) {\\n var T = sum32(\\n rotl32(\\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\\n s[j]),\\n E);\\n A = E;\\n E = D;\\n D = rotl32(C, 10);\\n C = B;\\n B = T;\\n T = sum32(\\n rotl32(\\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\\n sh[j]),\\n Eh);\\n Ah = Eh;\\n Eh = Dh;\\n Dh = rotl32(Ch, 10);\\n Ch = Bh;\\n Bh = T;\\n }\\n T = sum32_3(this.h[1], C, Dh);\\n this.h[1] = sum32_3(this.h[2], D, Eh);\\n this.h[2] = sum32_3(this.h[3], E, Ah);\\n this.h[3] = sum32_3(this.h[4], A, Bh);\\n this.h[4] = sum32_3(this.h[0], B, Ch);\\n this.h[0] = T;\\n};\\n\\nRIPEMD160.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'little');\\n else\\n return utils.split32(this.h, 'little');\\n};\\n\\nfunction f(j, x, y, z) {\\n if (j <= 15)\\n return x ^ y ^ z;\\n else if (j <= 31)\\n return (x & y) | ((~x) & z);\\n else if (j <= 47)\\n return (x | (~y)) ^ z;\\n else if (j <= 63)\\n return (x & z) | (y & (~z));\\n else\\n return x ^ (y | (~z));\\n}\\n\\nfunction K(j) {\\n if (j <= 15)\\n return 0x00000000;\\n else if (j <= 31)\\n return 0x5a827999;\\n else if (j <= 47)\\n return 0x6ed9eba1;\\n else if (j <= 63)\\n return 0x8f1bbcdc;\\n else\\n return 0xa953fd4e;\\n}\\n\\nfunction Kh(j) {\\n if (j <= 15)\\n return 0x50a28be6;\\n else if (j <= 31)\\n return 0x5c4dd124;\\n else if (j <= 47)\\n return 0x6d703ef3;\\n else if (j <= 63)\\n return 0x7a6d76e9;\\n else\\n return 0x00000000;\\n}\\n\\nvar r = [\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\\n];\\n\\nvar rh = [\\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\\n];\\n\\nvar s = [\\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\\n];\\n\\nvar sh = [\\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\\n];\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/ripemd.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.sha1 = __webpack_require__(/*! ./sha/1 */ \\\"./node_modules/hash.js/lib/hash/sha/1.js\\\");\\nexports.sha224 = __webpack_require__(/*! ./sha/224 */ \\\"./node_modules/hash.js/lib/hash/sha/224.js\\\");\\nexports.sha256 = __webpack_require__(/*! ./sha/256 */ \\\"./node_modules/hash.js/lib/hash/sha/256.js\\\");\\nexports.sha384 = __webpack_require__(/*! ./sha/384 */ \\\"./node_modules/hash.js/lib/hash/sha/384.js\\\");\\nexports.sha512 = __webpack_require__(/*! ./sha/512 */ \\\"./node_modules/hash.js/lib/hash/sha/512.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/1.js\":\n/*!************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/1.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\nvar shaCommon = __webpack_require__(/*! ./common */ \\\"./node_modules/hash.js/lib/hash/sha/common.js\\\");\\n\\nvar rotl32 = utils.rotl32;\\nvar sum32 = utils.sum32;\\nvar sum32_5 = utils.sum32_5;\\nvar ft_1 = shaCommon.ft_1;\\nvar BlockHash = common.BlockHash;\\n\\nvar sha1_K = [\\n 0x5A827999, 0x6ED9EBA1,\\n 0x8F1BBCDC, 0xCA62C1D6\\n];\\n\\nfunction SHA1() {\\n if (!(this instanceof SHA1))\\n return new SHA1();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x67452301, 0xefcdab89, 0x98badcfe,\\n 0x10325476, 0xc3d2e1f0 ];\\n this.W = new Array(80);\\n}\\n\\nutils.inherits(SHA1, BlockHash);\\nmodule.exports = SHA1;\\n\\nSHA1.blockSize = 512;\\nSHA1.outSize = 160;\\nSHA1.hmacStrength = 80;\\nSHA1.padLength = 64;\\n\\nSHA1.prototype._update = function _update(msg, start) {\\n var W = this.W;\\n\\n for (var i = 0; i < 16; i++)\\n W[i] = msg[start + i];\\n\\n for(; i < W.length; i++)\\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\\n\\n var a = this.h[0];\\n var b = this.h[1];\\n var c = this.h[2];\\n var d = this.h[3];\\n var e = this.h[4];\\n\\n for (i = 0; i < W.length; i++) {\\n var s = ~~(i / 20);\\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\\n e = d;\\n d = c;\\n c = rotl32(b, 30);\\n b = a;\\n a = t;\\n }\\n\\n this.h[0] = sum32(this.h[0], a);\\n this.h[1] = sum32(this.h[1], b);\\n this.h[2] = sum32(this.h[2], c);\\n this.h[3] = sum32(this.h[3], d);\\n this.h[4] = sum32(this.h[4], e);\\n};\\n\\nSHA1.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/1.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/224.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/224.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar SHA256 = __webpack_require__(/*! ./256 */ \\\"./node_modules/hash.js/lib/hash/sha/256.js\\\");\\n\\nfunction SHA224() {\\n if (!(this instanceof SHA224))\\n return new SHA224();\\n\\n SHA256.call(this);\\n this.h = [\\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\\n}\\nutils.inherits(SHA224, SHA256);\\nmodule.exports = SHA224;\\n\\nSHA224.blockSize = 512;\\nSHA224.outSize = 224;\\nSHA224.hmacStrength = 192;\\nSHA224.padLength = 64;\\n\\nSHA224.prototype._digest = function digest(enc) {\\n // Just truncate output\\n if (enc === 'hex')\\n return utils.toHex32(this.h.slice(0, 7), 'big');\\n else\\n return utils.split32(this.h.slice(0, 7), 'big');\\n};\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/224.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/256.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/256.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\nvar shaCommon = __webpack_require__(/*! ./common */ \\\"./node_modules/hash.js/lib/hash/sha/common.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nvar sum32 = utils.sum32;\\nvar sum32_4 = utils.sum32_4;\\nvar sum32_5 = utils.sum32_5;\\nvar ch32 = shaCommon.ch32;\\nvar maj32 = shaCommon.maj32;\\nvar s0_256 = shaCommon.s0_256;\\nvar s1_256 = shaCommon.s1_256;\\nvar g0_256 = shaCommon.g0_256;\\nvar g1_256 = shaCommon.g1_256;\\n\\nvar BlockHash = common.BlockHash;\\n\\nvar sha256_K = [\\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\\n];\\n\\nfunction SHA256() {\\n if (!(this instanceof SHA256))\\n return new SHA256();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\\n ];\\n this.k = sha256_K;\\n this.W = new Array(64);\\n}\\nutils.inherits(SHA256, BlockHash);\\nmodule.exports = SHA256;\\n\\nSHA256.blockSize = 512;\\nSHA256.outSize = 256;\\nSHA256.hmacStrength = 192;\\nSHA256.padLength = 64;\\n\\nSHA256.prototype._update = function _update(msg, start) {\\n var W = this.W;\\n\\n for (var i = 0; i < 16; i++)\\n W[i] = msg[start + i];\\n for (; i < W.length; i++)\\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\\n\\n var a = this.h[0];\\n var b = this.h[1];\\n var c = this.h[2];\\n var d = this.h[3];\\n var e = this.h[4];\\n var f = this.h[5];\\n var g = this.h[6];\\n var h = this.h[7];\\n\\n assert(this.k.length === W.length);\\n for (i = 0; i < W.length; i++) {\\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\\n var T2 = sum32(s0_256(a), maj32(a, b, c));\\n h = g;\\n g = f;\\n f = e;\\n e = sum32(d, T1);\\n d = c;\\n c = b;\\n b = a;\\n a = sum32(T1, T2);\\n }\\n\\n this.h[0] = sum32(this.h[0], a);\\n this.h[1] = sum32(this.h[1], b);\\n this.h[2] = sum32(this.h[2], c);\\n this.h[3] = sum32(this.h[3], d);\\n this.h[4] = sum32(this.h[4], e);\\n this.h[5] = sum32(this.h[5], f);\\n this.h[6] = sum32(this.h[6], g);\\n this.h[7] = sum32(this.h[7], h);\\n};\\n\\nSHA256.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/256.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/384.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/384.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\n\\nvar SHA512 = __webpack_require__(/*! ./512 */ \\\"./node_modules/hash.js/lib/hash/sha/512.js\\\");\\n\\nfunction SHA384() {\\n if (!(this instanceof SHA384))\\n return new SHA384();\\n\\n SHA512.call(this);\\n this.h = [\\n 0xcbbb9d5d, 0xc1059ed8,\\n 0x629a292a, 0x367cd507,\\n 0x9159015a, 0x3070dd17,\\n 0x152fecd8, 0xf70e5939,\\n 0x67332667, 0xffc00b31,\\n 0x8eb44a87, 0x68581511,\\n 0xdb0c2e0d, 0x64f98fa7,\\n 0x47b5481d, 0xbefa4fa4 ];\\n}\\nutils.inherits(SHA384, SHA512);\\nmodule.exports = SHA384;\\n\\nSHA384.blockSize = 1024;\\nSHA384.outSize = 384;\\nSHA384.hmacStrength = 192;\\nSHA384.padLength = 128;\\n\\nSHA384.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h.slice(0, 12), 'big');\\n else\\n return utils.split32(this.h.slice(0, 12), 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/384.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/512.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/512.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nvar rotr64_hi = utils.rotr64_hi;\\nvar rotr64_lo = utils.rotr64_lo;\\nvar shr64_hi = utils.shr64_hi;\\nvar shr64_lo = utils.shr64_lo;\\nvar sum64 = utils.sum64;\\nvar sum64_hi = utils.sum64_hi;\\nvar sum64_lo = utils.sum64_lo;\\nvar sum64_4_hi = utils.sum64_4_hi;\\nvar sum64_4_lo = utils.sum64_4_lo;\\nvar sum64_5_hi = utils.sum64_5_hi;\\nvar sum64_5_lo = utils.sum64_5_lo;\\n\\nvar BlockHash = common.BlockHash;\\n\\nvar sha512_K = [\\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\\n];\\n\\nfunction SHA512() {\\n if (!(this instanceof SHA512))\\n return new SHA512();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x6a09e667, 0xf3bcc908,\\n 0xbb67ae85, 0x84caa73b,\\n 0x3c6ef372, 0xfe94f82b,\\n 0xa54ff53a, 0x5f1d36f1,\\n 0x510e527f, 0xade682d1,\\n 0x9b05688c, 0x2b3e6c1f,\\n 0x1f83d9ab, 0xfb41bd6b,\\n 0x5be0cd19, 0x137e2179 ];\\n this.k = sha512_K;\\n this.W = new Array(160);\\n}\\nutils.inherits(SHA512, BlockHash);\\nmodule.exports = SHA512;\\n\\nSHA512.blockSize = 1024;\\nSHA512.outSize = 512;\\nSHA512.hmacStrength = 192;\\nSHA512.padLength = 128;\\n\\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\\n var W = this.W;\\n\\n // 32 x 32bit words\\n for (var i = 0; i < 32; i++)\\n W[i] = msg[start + i];\\n for (; i < W.length; i += 2) {\\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\\n var c1_hi = W[i - 14]; // i - 7\\n var c1_lo = W[i - 13];\\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\\n var c3_hi = W[i - 32]; // i - 16\\n var c3_lo = W[i - 31];\\n\\n W[i] = sum64_4_hi(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo);\\n W[i + 1] = sum64_4_lo(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo);\\n }\\n};\\n\\nSHA512.prototype._update = function _update(msg, start) {\\n this._prepareBlock(msg, start);\\n\\n var W = this.W;\\n\\n var ah = this.h[0];\\n var al = this.h[1];\\n var bh = this.h[2];\\n var bl = this.h[3];\\n var ch = this.h[4];\\n var cl = this.h[5];\\n var dh = this.h[6];\\n var dl = this.h[7];\\n var eh = this.h[8];\\n var el = this.h[9];\\n var fh = this.h[10];\\n var fl = this.h[11];\\n var gh = this.h[12];\\n var gl = this.h[13];\\n var hh = this.h[14];\\n var hl = this.h[15];\\n\\n assert(this.k.length === W.length);\\n for (var i = 0; i < W.length; i += 2) {\\n var c0_hi = hh;\\n var c0_lo = hl;\\n var c1_hi = s1_512_hi(eh, el);\\n var c1_lo = s1_512_lo(eh, el);\\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\\n var c3_hi = this.k[i];\\n var c3_lo = this.k[i + 1];\\n var c4_hi = W[i];\\n var c4_lo = W[i + 1];\\n\\n var T1_hi = sum64_5_hi(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo,\\n c4_hi, c4_lo);\\n var T1_lo = sum64_5_lo(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo,\\n c4_hi, c4_lo);\\n\\n c0_hi = s0_512_hi(ah, al);\\n c0_lo = s0_512_lo(ah, al);\\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\\n\\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\\n\\n hh = gh;\\n hl = gl;\\n\\n gh = fh;\\n gl = fl;\\n\\n fh = eh;\\n fl = el;\\n\\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\\n\\n dh = ch;\\n dl = cl;\\n\\n ch = bh;\\n cl = bl;\\n\\n bh = ah;\\n bl = al;\\n\\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\\n }\\n\\n sum64(this.h, 0, ah, al);\\n sum64(this.h, 2, bh, bl);\\n sum64(this.h, 4, ch, cl);\\n sum64(this.h, 6, dh, dl);\\n sum64(this.h, 8, eh, el);\\n sum64(this.h, 10, fh, fl);\\n sum64(this.h, 12, gh, gl);\\n sum64(this.h, 14, hh, hl);\\n};\\n\\nSHA512.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\nfunction ch64_hi(xh, xl, yh, yl, zh) {\\n var r = (xh & yh) ^ ((~xh) & zh);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\\n var r = (xl & yl) ^ ((~xl) & zl);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction maj64_hi(xh, xl, yh, yl, zh) {\\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s0_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 28);\\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s0_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 28);\\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s1_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 14);\\n var c1_hi = rotr64_hi(xh, xl, 18);\\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s1_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 14);\\n var c1_lo = rotr64_lo(xh, xl, 18);\\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g0_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 1);\\n var c1_hi = rotr64_hi(xh, xl, 8);\\n var c2_hi = shr64_hi(xh, xl, 7);\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g0_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 1);\\n var c1_lo = rotr64_lo(xh, xl, 8);\\n var c2_lo = shr64_lo(xh, xl, 7);\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g1_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 19);\\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\\n var c2_hi = shr64_hi(xh, xl, 6);\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g1_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 19);\\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\\n var c2_lo = shr64_lo(xh, xl, 6);\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/512.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/common.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/common.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar rotr32 = utils.rotr32;\\n\\nfunction ft_1(s, x, y, z) {\\n if (s === 0)\\n return ch32(x, y, z);\\n if (s === 1 || s === 3)\\n return p32(x, y, z);\\n if (s === 2)\\n return maj32(x, y, z);\\n}\\nexports.ft_1 = ft_1;\\n\\nfunction ch32(x, y, z) {\\n return (x & y) ^ ((~x) & z);\\n}\\nexports.ch32 = ch32;\\n\\nfunction maj32(x, y, z) {\\n return (x & y) ^ (x & z) ^ (y & z);\\n}\\nexports.maj32 = maj32;\\n\\nfunction p32(x, y, z) {\\n return x ^ y ^ z;\\n}\\nexports.p32 = p32;\\n\\nfunction s0_256(x) {\\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\\n}\\nexports.s0_256 = s0_256;\\n\\nfunction s1_256(x) {\\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\\n}\\nexports.s1_256 = s1_256;\\n\\nfunction g0_256(x) {\\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\\n}\\nexports.g0_256 = g0_256;\\n\\nfunction g1_256(x) {\\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\\n}\\nexports.g1_256 = g1_256;\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/common.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/utils.js\":\n/*!************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/utils.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\n\\nexports.inherits = inherits;\\n\\nfunction isSurrogatePair(msg, i) {\\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\\n return false;\\n }\\n if (i < 0 || i + 1 >= msg.length) {\\n return false;\\n }\\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\\n}\\n\\nfunction toArray(msg, enc) {\\n if (Array.isArray(msg))\\n return msg.slice();\\n if (!msg)\\n return [];\\n var res = [];\\n if (typeof msg === 'string') {\\n if (!enc) {\\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\\n // Apache License 2.0\\n // https://github.com/google/closure-library/blob/master/LICENSE\\n var p = 0;\\n for (var i = 0; i < msg.length; i++) {\\n var c = msg.charCodeAt(i);\\n if (c < 128) {\\n res[p++] = c;\\n } else if (c < 2048) {\\n res[p++] = (c >> 6) | 192;\\n res[p++] = (c & 63) | 128;\\n } else if (isSurrogatePair(msg, i)) {\\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\\n res[p++] = (c >> 18) | 240;\\n res[p++] = ((c >> 12) & 63) | 128;\\n res[p++] = ((c >> 6) & 63) | 128;\\n res[p++] = (c & 63) | 128;\\n } else {\\n res[p++] = (c >> 12) | 224;\\n res[p++] = ((c >> 6) & 63) | 128;\\n res[p++] = (c & 63) | 128;\\n }\\n }\\n } else if (enc === 'hex') {\\n msg = msg.replace(/[^a-z0-9]+/ig, '');\\n if (msg.length % 2 !== 0)\\n msg = '0' + msg;\\n for (i = 0; i < msg.length; i += 2)\\n res.push(parseInt(msg[i] + msg[i + 1], 16));\\n }\\n } else {\\n for (i = 0; i < msg.length; i++)\\n res[i] = msg[i] | 0;\\n }\\n return res;\\n}\\nexports.toArray = toArray;\\n\\nfunction toHex(msg) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++)\\n res += zero2(msg[i].toString(16));\\n return res;\\n}\\nexports.toHex = toHex;\\n\\nfunction htonl(w) {\\n var res = (w >>> 24) |\\n ((w >>> 8) & 0xff00) |\\n ((w << 8) & 0xff0000) |\\n ((w & 0xff) << 24);\\n return res >>> 0;\\n}\\nexports.htonl = htonl;\\n\\nfunction toHex32(msg, endian) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++) {\\n var w = msg[i];\\n if (endian === 'little')\\n w = htonl(w);\\n res += zero8(w.toString(16));\\n }\\n return res;\\n}\\nexports.toHex32 = toHex32;\\n\\nfunction zero2(word) {\\n if (word.length === 1)\\n return '0' + word;\\n else\\n return word;\\n}\\nexports.zero2 = zero2;\\n\\nfunction zero8(word) {\\n if (word.length === 7)\\n return '0' + word;\\n else if (word.length === 6)\\n return '00' + word;\\n else if (word.length === 5)\\n return '000' + word;\\n else if (word.length === 4)\\n return '0000' + word;\\n else if (word.length === 3)\\n return '00000' + word;\\n else if (word.length === 2)\\n return '000000' + word;\\n else if (word.length === 1)\\n return '0000000' + word;\\n else\\n return word;\\n}\\nexports.zero8 = zero8;\\n\\nfunction join32(msg, start, end, endian) {\\n var len = end - start;\\n assert(len % 4 === 0);\\n var res = new Array(len / 4);\\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\\n var w;\\n if (endian === 'big')\\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\\n else\\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\\n res[i] = w >>> 0;\\n }\\n return res;\\n}\\nexports.join32 = join32;\\n\\nfunction split32(msg, endian) {\\n var res = new Array(msg.length * 4);\\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\\n var m = msg[i];\\n if (endian === 'big') {\\n res[k] = m >>> 24;\\n res[k + 1] = (m >>> 16) & 0xff;\\n res[k + 2] = (m >>> 8) & 0xff;\\n res[k + 3] = m & 0xff;\\n } else {\\n res[k + 3] = m >>> 24;\\n res[k + 2] = (m >>> 16) & 0xff;\\n res[k + 1] = (m >>> 8) & 0xff;\\n res[k] = m & 0xff;\\n }\\n }\\n return res;\\n}\\nexports.split32 = split32;\\n\\nfunction rotr32(w, b) {\\n return (w >>> b) | (w << (32 - b));\\n}\\nexports.rotr32 = rotr32;\\n\\nfunction rotl32(w, b) {\\n return (w << b) | (w >>> (32 - b));\\n}\\nexports.rotl32 = rotl32;\\n\\nfunction sum32(a, b) {\\n return (a + b) >>> 0;\\n}\\nexports.sum32 = sum32;\\n\\nfunction sum32_3(a, b, c) {\\n return (a + b + c) >>> 0;\\n}\\nexports.sum32_3 = sum32_3;\\n\\nfunction sum32_4(a, b, c, d) {\\n return (a + b + c + d) >>> 0;\\n}\\nexports.sum32_4 = sum32_4;\\n\\nfunction sum32_5(a, b, c, d, e) {\\n return (a + b + c + d + e) >>> 0;\\n}\\nexports.sum32_5 = sum32_5;\\n\\nfunction sum64(buf, pos, ah, al) {\\n var bh = buf[pos];\\n var bl = buf[pos + 1];\\n\\n var lo = (al + bl) >>> 0;\\n var hi = (lo < al ? 1 : 0) + ah + bh;\\n buf[pos] = hi >>> 0;\\n buf[pos + 1] = lo;\\n}\\nexports.sum64 = sum64;\\n\\nfunction sum64_hi(ah, al, bh, bl) {\\n var lo = (al + bl) >>> 0;\\n var hi = (lo < al ? 1 : 0) + ah + bh;\\n return hi >>> 0;\\n}\\nexports.sum64_hi = sum64_hi;\\n\\nfunction sum64_lo(ah, al, bh, bl) {\\n var lo = al + bl;\\n return lo >>> 0;\\n}\\nexports.sum64_lo = sum64_lo;\\n\\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\\n var carry = 0;\\n var lo = al;\\n lo = (lo + bl) >>> 0;\\n carry += lo < al ? 1 : 0;\\n lo = (lo + cl) >>> 0;\\n carry += lo < cl ? 1 : 0;\\n lo = (lo + dl) >>> 0;\\n carry += lo < dl ? 1 : 0;\\n\\n var hi = ah + bh + ch + dh + carry;\\n return hi >>> 0;\\n}\\nexports.sum64_4_hi = sum64_4_hi;\\n\\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\\n var lo = al + bl + cl + dl;\\n return lo >>> 0;\\n}\\nexports.sum64_4_lo = sum64_4_lo;\\n\\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\\n var carry = 0;\\n var lo = al;\\n lo = (lo + bl) >>> 0;\\n carry += lo < al ? 1 : 0;\\n lo = (lo + cl) >>> 0;\\n carry += lo < cl ? 1 : 0;\\n lo = (lo + dl) >>> 0;\\n carry += lo < dl ? 1 : 0;\\n lo = (lo + el) >>> 0;\\n carry += lo < el ? 1 : 0;\\n\\n var hi = ah + bh + ch + dh + eh + carry;\\n return hi >>> 0;\\n}\\nexports.sum64_5_hi = sum64_5_hi;\\n\\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\\n var lo = al + bl + cl + dl + el;\\n\\n return lo >>> 0;\\n}\\nexports.sum64_5_lo = sum64_5_lo;\\n\\nfunction rotr64_hi(ah, al, num) {\\n var r = (al << (32 - num)) | (ah >>> num);\\n return r >>> 0;\\n}\\nexports.rotr64_hi = rotr64_hi;\\n\\nfunction rotr64_lo(ah, al, num) {\\n var r = (ah << (32 - num)) | (al >>> num);\\n return r >>> 0;\\n}\\nexports.rotr64_lo = rotr64_lo;\\n\\nfunction shr64_hi(ah, al, num) {\\n return ah >>> num;\\n}\\nexports.shr64_hi = shr64_hi;\\n\\nfunction shr64_lo(ah, al, num) {\\n var r = (ah << (32 - num)) | (al >>> num);\\n return r >>> 0;\\n}\\nexports.shr64_lo = shr64_lo;\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hmac-drbg/lib/hmac-drbg.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/hmac-drbg/lib/hmac-drbg.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar utils = __webpack_require__(/*! minimalistic-crypto-utils */ \\\"./node_modules/minimalistic-crypto-utils/lib/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction HmacDRBG(options) {\\n if (!(this instanceof HmacDRBG))\\n return new HmacDRBG(options);\\n this.hash = options.hash;\\n this.predResist = !!options.predResist;\\n\\n this.outLen = this.hash.outSize;\\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\\n\\n this._reseed = null;\\n this.reseedInterval = null;\\n this.K = null;\\n this.V = null;\\n\\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\\n assert(entropy.length >= (this.minEntropy / 8),\\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\\n this._init(entropy, nonce, pers);\\n}\\nmodule.exports = HmacDRBG;\\n\\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\\n var seed = entropy.concat(nonce).concat(pers);\\n\\n this.K = new Array(this.outLen / 8);\\n this.V = new Array(this.outLen / 8);\\n for (var i = 0; i < this.V.length; i++) {\\n this.K[i] = 0x00;\\n this.V[i] = 0x01;\\n }\\n\\n this._update(seed);\\n this._reseed = 1;\\n this.reseedInterval = 0x1000000000000; // 2^48\\n};\\n\\nHmacDRBG.prototype._hmac = function hmac() {\\n return new hash.hmac(this.hash, this.K);\\n};\\n\\nHmacDRBG.prototype._update = function update(seed) {\\n var kmac = this._hmac()\\n .update(this.V)\\n .update([ 0x00 ]);\\n if (seed)\\n kmac = kmac.update(seed);\\n this.K = kmac.digest();\\n this.V = this._hmac().update(this.V).digest();\\n if (!seed)\\n return;\\n\\n this.K = this._hmac()\\n .update(this.V)\\n .update([ 0x01 ])\\n .update(seed)\\n .digest();\\n this.V = this._hmac().update(this.V).digest();\\n};\\n\\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\\n // Optional entropy enc\\n if (typeof entropyEnc !== 'string') {\\n addEnc = add;\\n add = entropyEnc;\\n entropyEnc = null;\\n }\\n\\n entropy = utils.toArray(entropy, entropyEnc);\\n add = utils.toArray(add, addEnc);\\n\\n assert(entropy.length >= (this.minEntropy / 8),\\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\\n\\n this._update(entropy.concat(add || []));\\n this._reseed = 1;\\n};\\n\\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\\n if (this._reseed > this.reseedInterval)\\n throw new Error('Reseed is required');\\n\\n // Optional encoding\\n if (typeof enc !== 'string') {\\n addEnc = add;\\n add = enc;\\n enc = null;\\n }\\n\\n // Optional additional data\\n if (add) {\\n add = utils.toArray(add, addEnc || 'hex');\\n this._update(add);\\n }\\n\\n var temp = [];\\n while (temp.length < len) {\\n this.V = this._hmac().update(this.V).digest();\\n temp = temp.concat(this.V);\\n }\\n\\n var res = temp.slice(0, len);\\n this._update(add);\\n this._reseed++;\\n return utils.encode(res, enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/https-did-resolver/lib/register.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/https-did-resolver/lib/register.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\nvar __generator = (this && this.__generator) || function (thisArg, body) {\\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n return g = { next: verb(0), \\\"throw\\\": verb(1), \\\"return\\\": verb(2) }, typeof Symbol === \\\"function\\\" && (g[Symbol.iterator] = function() { return this; }), g;\\n function verb(n) { return function (v) { return step([n, v]); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\"Generator is already executing.\\\");\\n while (_) try {\\n if (f = 1, y && (t = op[0] & 2 ? y[\\\"return\\\"] : op[0] ? y[\\\"throw\\\"] || ((t = y[\\\"return\\\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\\n if (y = 0, t) op = [op[0] & 2, t.value];\\n switch (op[0]) {\\n case 0: case 1: t = op; break;\\n case 4: _.label++; return { value: op[1], done: false };\\n case 5: _.label++; y = op[1]; op = [0]; continue;\\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\\n if (t[2]) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op = body.call(thisArg, _);\\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\\n }\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar did_resolver_1 = __webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\");\\nvar DOC_PATH = '/.well-known/did.json';\\nfunction get(url) {\\n return new Promise(function (resolve, reject) {\\n // declare XMLHttpRequest in here so it can be mocked for tests\\n var XMLHttpRequest = typeof window !== 'undefined'\\n ? window.XMLHttpRequest\\n : __webpack_require__(/*! xmlhttprequest */ 3).XMLHttpRequest;\\n var request = new XMLHttpRequest();\\n request.open('GET', url);\\n request.onreadystatechange = function () {\\n if (!request || request.readyState !== 4)\\n return;\\n if (request.status === 200) {\\n resolve(request.responseText);\\n }\\n else {\\n reject(new Error((\\\"Invalid http response status \\\" + request.status + \\\" \\\" + request.responseText).trim()));\\n }\\n };\\n request.setRequestHeader('accept', 'application/json');\\n request.send();\\n });\\n}\\nfunction register() {\\n function resolve(did, parsed) {\\n return __awaiter(this, void 0, void 0, function () {\\n var url, response, error_1, data, hasContext, docIdMatchesDid, docHasPublicKey;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n url = \\\"https://\\\" + parsed.id + DOC_PATH;\\n response = null;\\n _a.label = 1;\\n case 1:\\n _a.trys.push([1, 3, , 4]);\\n return [4 /*yield*/, get(url)];\\n case 2:\\n response = _a.sent();\\n return [3 /*break*/, 4];\\n case 3:\\n error_1 = _a.sent();\\n throw new Error(\\\"DID must resolve to a valid https URL: \\\" + error_1.message);\\n case 4:\\n data = null;\\n try {\\n data = JSON.parse(response);\\n }\\n catch (error) {\\n throw new Error('DID must resolve to a JSON document');\\n }\\n hasContext = data['@context'] === 'https://w3id.org/did/v1';\\n if (!hasContext)\\n throw new Error('DID document missing context');\\n docIdMatchesDid = data.id === did;\\n if (!docIdMatchesDid)\\n throw new Error('DID document id does not match requested did');\\n docHasPublicKey = Array.isArray(data.publicKey) && data.publicKey.length > 0;\\n if (!docHasPublicKey)\\n throw new Error('DID document has no public keys');\\n return [2 /*return*/, data];\\n }\\n });\\n });\\n }\\n did_resolver_1.registerMethod('https', resolve);\\n}\\nexports.default = register;\\n//# sourceMappingURL=register.js.map\\n\\n//# sourceURL=webpack:///./node_modules/https-did-resolver/lib/register.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ieee754/index.js\":\n/*!***************************************!*\\\n !*** ./node_modules/ieee754/index.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"exports.read = function (buffer, offset, isLE, mLen, nBytes) {\\n var e, m\\n var eLen = (nBytes * 8) - mLen - 1\\n var eMax = (1 << eLen) - 1\\n var eBias = eMax >> 1\\n var nBits = -7\\n var i = isLE ? (nBytes - 1) : 0\\n var d = isLE ? -1 : 1\\n var s = buffer[offset + i]\\n\\n i += d\\n\\n e = s & ((1 << (-nBits)) - 1)\\n s >>= (-nBits)\\n nBits += eLen\\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\\n\\n m = e & ((1 << (-nBits)) - 1)\\n e >>= (-nBits)\\n nBits += mLen\\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\\n\\n if (e === 0) {\\n e = 1 - eBias\\n } else if (e === eMax) {\\n return m ? NaN : ((s ? -1 : 1) * Infinity)\\n } else {\\n m = m + Math.pow(2, mLen)\\n e = e - eBias\\n }\\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\\n}\\n\\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\\n var e, m, c\\n var eLen = (nBytes * 8) - mLen - 1\\n var eMax = (1 << eLen) - 1\\n var eBias = eMax >> 1\\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\\n var i = isLE ? 0 : (nBytes - 1)\\n var d = isLE ? 1 : -1\\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\\n\\n value = Math.abs(value)\\n\\n if (isNaN(value) || value === Infinity) {\\n m = isNaN(value) ? 1 : 0\\n e = eMax\\n } else {\\n e = Math.floor(Math.log(value) / Math.LN2)\\n if (value * (c = Math.pow(2, -e)) < 1) {\\n e--\\n c *= 2\\n }\\n if (e + eBias >= 1) {\\n value += rt / c\\n } else {\\n value += rt * Math.pow(2, 1 - eBias)\\n }\\n if (value * c >= 2) {\\n e++\\n c /= 2\\n }\\n\\n if (e + eBias >= eMax) {\\n m = 0\\n e = eMax\\n } else if (e + eBias >= 1) {\\n m = ((value * c) - 1) * Math.pow(2, mLen)\\n e = e + eBias\\n } else {\\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\\n e = 0\\n }\\n }\\n\\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\\n\\n e = (e << mLen) | m\\n eLen += mLen\\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\\n\\n buffer[offset + i - d] |= s * 128\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ieee754/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/inherits/inherits_browser.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/inherits/inherits_browser.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"if (typeof Object.create === 'function') {\\n // implementation from standard node.js 'util' module\\n module.exports = function inherits(ctor, superCtor) {\\n ctor.super_ = superCtor\\n ctor.prototype = Object.create(superCtor.prototype, {\\n constructor: {\\n value: ctor,\\n enumerable: false,\\n writable: true,\\n configurable: true\\n }\\n });\\n };\\n} else {\\n // old school shim for old browsers\\n module.exports = function inherits(ctor, superCtor) {\\n ctor.super_ = superCtor\\n var TempCtor = function () {}\\n TempCtor.prototype = superCtor.prototype\\n ctor.prototype = new TempCtor()\\n ctor.prototype.constructor = ctor\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/inherits/inherits_browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-did-document/index.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/ipfs-did-document/index.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"const DID_PLACEHOLDER = 'GENESIS'\\n\\n/**\\n * A class for creating ipfs based DID Documents.\\n * Based on the DID spec: https://w3c-ccg.github.io/did-spec/\\n */\\nclass DidDocument {\\n /**\\n * Create a new DID Document.\\n *\\n * @param {Object} ipfs An js-ipfs instance\\n * @param {String} method The name of the DID Method\\n * @return {DidDocument} self\\n */\\n constructor (ipfs, method) {\\n this._ipfs = ipfs\\n this._content = {\\n id: `did:${method}:${DID_PLACEHOLDER}`\\n }\\n }\\n\\n get DID () {\\n if (this._content.id.includes(DID_PLACEHOLDER)) {\\n throw new Error('DID is not available before commit')\\n }\\n return this._content.id\\n }\\n\\n /**\\n * Load an already existing DID Document.\\n *\\n * @param {Object} ipfs An js-ipfs instance\\n * @param {String} documentCid The CID of the document\\n * @return {Promise<DidDocument>} self\\n */\\n static async load (ipfs, documentCid) {\\n const doc = new DidDocument(ipfs)\\n doc._content = await DidDocument.cidToDocument(ipfs, documentCid)\\n doc._content.previousDocument = { '/': documentCid.toString() }\\n return doc\\n }\\n\\n /**\\n * Add a new public key\\n *\\n * @param {String} id The id of the key, e.g. \\\"key1\\\"\\n * @param {String} type The type of the key\\n * @param {String} encoding The encoding of the key\\n * @param {String} key The encoded public key\\n * @param {String} owner The owner of the key (optional)\\n */\\n addPublicKey (id, type, encoding, key, owner) {\\n if (!this._content.publicKey) {\\n this._content.publicKey = []\\n }\\n let entry = {\\n id: `${this._content.id}#${id}`,\\n type\\n }\\n entry[encoding] = key\\n if (owner) {\\n entry.owner = owner\\n }\\n this._content.publicKey.push(entry)\\n }\\n\\n /**\\n * Remove a public key\\n *\\n * @param {String} id The id of the key, e.g. \\\"key1\\\"\\n */\\n removePublicKey (id) {\\n const idx = this._content.publicKey.findIndex(e => e.id.endsWith(id))\\n this._content.publicKey.splice(idx, 1)\\n if (!this._content.publicKey.length) {\\n delete this._content.publicKey\\n }\\n }\\n\\n /**\\n * Add a new authentication\\n *\\n * @param {String} type The type of the authentication\\n * @param {String} id The id of the key to be used, e.g. \\\"key1\\\"\\n */\\n addAuthentication (type, id) {\\n if (!this._content.authentication) {\\n this._content.authentication = []\\n }\\n this._content.authentication.push({\\n type,\\n publicKey: `${this._content.id}#${id}`\\n })\\n }\\n\\n /**\\n * Remove an authentication\\n *\\n * @param {String} id The id of the key, e.g. \\\"key1\\\"\\n */\\n removeAuthentication (id) {\\n const idx = this._content.authentication.findIndex(e => e.publicKey.endsWith(id))\\n this._content.authentication.splice(idx, 1)\\n if (!this._content.authentication.length) {\\n delete this._content.authentication\\n }\\n }\\n\\n /**\\n * Add a new service\\n *\\n * @param {String} id The id of the key to be used, e.g. \\\"key1\\\"\\n * @param {String} type The type of the service\\n * @param {String} serviceEndpoint The endpoint of the service\\n * @param {Object} additionalFields Any additional fields (optional)\\n */\\n addService (id, type, serviceEndpoint, additionalFields) {\\n if (!this._content.service) {\\n this._content.service = []\\n }\\n this._content.service.push(Object.assign({\\n id: `${this._content.id};${id}`,\\n type,\\n serviceEndpoint\\n }, additionalFields))\\n }\\n\\n /**\\n * Remove a service\\n *\\n * @param {String} id The id of the key, e.g. \\\"key1\\\"\\n */\\n removeService (id) {\\n const idx = this._content.service.findIndex(e => e.id.endsWith(id))\\n this._content.service.splice(idx, 1)\\n if (!this._content.service.length) {\\n delete this._content.service\\n }\\n }\\n\\n /**\\n * Set the revocationMethod. This can be of any js object\\n * and is determined by the implementer of a revocation module.\\n *\\n * @param {Object} methodDescriptor the object that defines the revocation method\\n */\\n setRevocationMethod (methodDescriptor) {\\n this._content.revocationMethod = methodDescriptor\\n }\\n\\n /**\\n * Add a new property\\n *\\n * @param {String} propName The name of the property\\n * @param {Object} propValue The value of the property\\n */\\n addCustomProperty (propName, propValue) {\\n this._content[propName] = propValue\\n }\\n\\n /**\\n * Remove a property\\n *\\n * @param {String} propName The name of the property\\n */\\n removeCustomProperty (propName) {\\n delete this._content[propName]\\n }\\n\\n /**\\n * Commit all changes and create a new ipfs dag object.\\n *\\n * @param {Object} opts Optional parameters\\n * @param {Boolean} noTimestamp Don't use timestamps if true\\n *\\n * @return {Promise<CID>} The CID of the object\\n */\\n async commit (opts = {}) {\\n if (!this._content.created) {\\n this._content['@context'] = 'https://w3id.org/did/v1'\\n if (!opts.noTimestamp) {\\n this._content.created = (new Date(Date.now())).toISOString()\\n }\\n } else if (!opts.noTimestamp) {\\n this._content.updated = (new Date(Date.now())).toISOString()\\n }\\n const cid = await this._ipfs.dag.put(this._content, { format: 'dag-cbor', hashAlg: 'sha2-256' })\\n // set up for further changes:\\n this._content = await DidDocument.cidToDocument(this._ipfs, cid)\\n this._content.previousDocument = { '/': cid.toString() }\\n return cid\\n }\\n\\n /**\\n * Returns the DID document of a document CID\\n *\\n * @param {Object} ipfs An js-ipfs instance\\n * @param {String} documentCid The CID of the document\\n * @return {Promise<Object>} The DID document as a js object\\n */\\n static async cidToDocument (ipfs, documentCid) {\\n let doc = (await ipfs.dag.get(documentCid)).value\\n // If genesis document replace placeholder identifier with cid\\n if (doc.id.includes(DID_PLACEHOLDER)) {\\n const re = new RegExp(DID_PLACEHOLDER, 'gi')\\n doc.id = doc.id.replace(re, documentCid)\\n if (doc.publicKey) {\\n doc.publicKey = JSON.parse(JSON.stringify(doc.publicKey).replace(re, documentCid))\\n }\\n if (doc.authentication) {\\n doc.authentication = JSON.parse(JSON.stringify(doc.authentication).replace(re, documentCid))\\n }\\n if (doc.service) {\\n doc.service = JSON.parse(JSON.stringify(doc.service).replace(re, documentCid))\\n }\\n }\\n if (doc.previousDocument) {\\n // make CID human readable\\n doc.previousDocument = { '/': doc.previousDocument.toString() }\\n }\\n return doc\\n }\\n}\\n\\nmodule.exports = DidDocument\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-did-document/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/default-access-controller.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/ipfs-log/src/default-access-controller.js ***!\n \\****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nclass AccessController {\\n async canAppend (entry, identityProvider) {\\n return true\\n }\\n}\\n\\nmodule.exports = AccessController\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/default-access-controller.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/entry-index.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/ipfs-log/src/entry-index.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nclass EntryIndex {\\n constructor (entries = {}) {\\n this._cache = entries\\n }\\n\\n set (k, v) {\\n this._cache[k] = v\\n }\\n\\n get (k) {\\n return this._cache[k]\\n }\\n\\n delete (k) {\\n return delete this._cache[k]\\n }\\n\\n add (newItems) {\\n this._cache = Object.assign(this._cache, newItems)\\n }\\n\\n get length () {\\n return Object.values(this._cache).length\\n }\\n}\\n\\nmodule.exports = EntryIndex\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/entry-index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/entry-io.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/ipfs-log/src/entry-io.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst pMap = __webpack_require__(/*! p-map */ \\\"./node_modules/p-map/index.js\\\")\\nconst pDoWhilst = __webpack_require__(/*! p-do-whilst */ \\\"./node_modules/p-do-whilst/index.js\\\")\\nconst Entry = __webpack_require__(/*! ./entry */ \\\"./node_modules/ipfs-log/src/entry.js\\\")\\n\\nconst hasItems = arr => arr && arr.length > 0\\n\\nclass EntryIO {\\n // Fetch log graphs in parallel\\n static async fetchParallel (ipfs, hashes, { length, exclude = [], timeout, concurrency, onProgressCallback }) {\\n const fetchOne = async (hash) => EntryIO.fetchAll(ipfs, hash, { length, exclude, timeout, onProgressCallback, concurrency })\\n const concatArrays = (arr1, arr2) => arr1.concat(arr2)\\n const flatten = (arr) => arr.reduce(concatArrays, [])\\n const res = await pMap(hashes, fetchOne, { concurrency: Math.max(concurrency || hashes.length, 1) })\\n return flatten(res)\\n }\\n\\n /**\\n * Fetch log entries\\n *\\n * @param {IPFS} [ipfs] An IPFS instance\\n * @param {string} [hash] Multihash of the entry to fetch\\n * @param {string} [parent] Parent of the node to be fetched\\n * @param {Object} [all] Entries to skip\\n * @param {Number} [amount=-1] How many entries to fetch\\n * @param {Number} [depth=0] Current depth of the recursion\\n * @param {function(hash, entry, parent, depth)} onProgressCallback\\n * @returns {Promise<Array<Entry>>}\\n */\\n static async fetchAll (ipfs, hashes, { length = -1, exclude = [], timeout, onProgressCallback, onStartProgressCallback, concurrency = 32, delay = 0 } = {}) {\\n let result = []\\n let cache = {}\\n let loadingCache = {}\\n let loadingQueue = Array.isArray(hashes)\\n ? { 0: hashes.slice() }\\n : { 0: [hashes] }\\n let running = 0 // keep track of how many entries are being fetched at any time\\n let maxClock = 0 // keep track of the latest clock time during load\\n let minClock = 0 // keep track of the minimum clock time during load\\n\\n // Does the loading queue have more to process?\\n const loadingQueueHasMore = () => Object.values(loadingQueue).find(hasItems) !== undefined\\n\\n // Add a multihash to the loading queue\\n const addToLoadingQueue = (e, idx) => {\\n if (!loadingCache[e]) {\\n if (!loadingQueue[idx]) loadingQueue[idx] = []\\n if (!loadingQueue[idx].includes(e)) {\\n loadingQueue[idx].push(e)\\n }\\n loadingCache[e] = true\\n }\\n }\\n\\n // Get the next items to process from the loading queue\\n const getNextFromQueue = (length = 1) => {\\n const getNext = (res, key, idx) => {\\n const nextItems = loadingQueue[key]\\n while (nextItems.length > 0 && res.length < length) {\\n const hash = nextItems.shift()\\n res.push(hash)\\n }\\n if (nextItems.length === 0) {\\n delete loadingQueue[key]\\n }\\n return res\\n }\\n return Object.keys(loadingQueue).reduce(getNext, [])\\n }\\n\\n // Add entries that we don't need to fetch to the \\\"cache\\\"\\n const addToExcludeCache = e => { cache[e.hash] = true }\\n\\n // Fetch one entry and add it to the results\\n const fetchEntry = async (hash) => {\\n if (!hash || cache[hash]) {\\n return\\n }\\n\\n return new Promise(async (resolve, reject) => {\\n // Resolve the promise after a timeout (if given) in order to\\n // not get stuck loading a block that is unreachable\\n const timer = timeout && timeout > 0\\n ? setTimeout(() => {\\n console.warn(`Warning: Couldn't fetch entry '${hash}', request timed out (${timeout}ms)`)\\n resolve()\\n }, timeout)\\n : null\\n\\n const addToResults = (entry) => {\\n if (Entry.isEntry(entry)) {\\n const ts = entry.clock.time\\n\\n // Update min/max clocks\\n maxClock = Math.max(maxClock, ts)\\n minClock = result.length > 0\\n ? Math.min(result[result.length - 1].clock.time, minClock)\\n : maxClock\\n\\n const isLater = (result.length >= length && ts >= minClock)\\n const calculateIndex = (idx) => maxClock - ts + ((idx + 1) * idx)\\n\\n // Add the entry to the results if\\n // 1) we're fetching all entries\\n // 2) results is not filled yet\\n // the clock of the entry is later than current known minimum clock time\\n if (length < 0 || result.length < length || isLater) {\\n result.push(entry)\\n cache[hash] = true\\n\\n if (onProgressCallback) {\\n onProgressCallback(hash, entry, result.length, result.length)\\n }\\n }\\n\\n if (length < 0) {\\n // If we're fetching all entries (length === -1), adds nexts and refs to the queue\\n entry.next.forEach(addToLoadingQueue)\\n if (entry.refs) entry.refs.forEach(addToLoadingQueue)\\n } else {\\n // If we're fetching entries up to certain length,\\n // fetch the next if result is filled up, to make sure we \\\"check\\\"\\n // the next entry if its clock is later than what we have in the result\\n if (result.length < length || ts > minClock || (ts === minClock && !cache[entry.hash])) {\\n entry.next.forEach(e => addToLoadingQueue(e, calculateIndex(0)))\\n }\\n if (entry.refs && (result.length + entry.refs.length <= length)) {\\n entry.refs.forEach((e, i) => addToLoadingQueue(e, calculateIndex(i)))\\n }\\n }\\n }\\n }\\n\\n if (onStartProgressCallback) {\\n onStartProgressCallback(hash, null, 0, result.length)\\n }\\n\\n try {\\n // Load the entry\\n const entry = await Entry.fromMultihash(ipfs, hash)\\n\\n // Add it to the results\\n addToResults(entry)\\n\\n // Simulate network latency (for debugging purposes)\\n if (delay > 0) {\\n const sleep = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms))\\n await sleep(delay)\\n }\\n resolve()\\n } catch (e) {\\n reject(e)\\n } finally {\\n clearTimeout(timer)\\n }\\n })\\n }\\n\\n // One loop of processing the loading queue\\n const _processQueue = async () => {\\n if (running < concurrency) {\\n const nexts = getNextFromQueue(concurrency)\\n running += nexts.length\\n await pMap(nexts, fetchEntry)\\n running -= nexts.length\\n }\\n }\\n\\n // Add entries to exclude from processing to the cache before we start\\n exclude.forEach(addToExcludeCache)\\n\\n // Fetch entries\\n await pDoWhilst(_processQueue, loadingQueueHasMore)\\n\\n return result\\n }\\n}\\n\\nmodule.exports = EntryIO\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/entry-io.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/entry.js\":\n/*!********************************************!*\\\n !*** ./node_modules/ipfs-log/src/entry.js ***!\n \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst Clock = __webpack_require__(/*! ./lamport-clock */ \\\"./node_modules/ipfs-log/src/lamport-clock.js\\\")\\nconst { isDefined, io } = __webpack_require__(/*! ./utils */ \\\"./node_modules/ipfs-log/src/utils/index.js\\\")\\nconst stringify = __webpack_require__(/*! json-stringify-deterministic */ \\\"./node_modules/json-stringify-deterministic/lib/index.js\\\")\\nconst IpfsNotDefinedError = () => new Error('Ipfs instance not defined')\\nconst IPLD_LINKS = ['next', 'refs']\\nconst getWriteFormatForVersion = v => v === 0 ? 'dag-pb' : 'dag-cbor'\\nconst getWriteFormat = e => Entry.isEntry(e) ? getWriteFormatForVersion(e.v) : getWriteFormatForVersion(e)\\n\\nclass Entry {\\n /**\\n * Create an Entry\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {string} logId The unique identifier for this log\\n * @param {*} data Data of the entry to be added. Can be any JSON.stringifyable data\\n * @param {Array<string|Entry>} [next=[]] Parent hashes or entries\\n * @param {LamportClock} [clock] The lamport clock\\n * @returns {Promise<Entry>}\\n * @example\\n * const entry = await Entry.create(ipfs, identity, 'hello')\\n * console.log(entry)\\n * // { hash: null, payload: \\\"hello\\\", next: [] }\\n */\\n static async create (ipfs, identity, logId, data, next = [], clock, refs = [], pin) {\\n if (!isDefined(ipfs)) throw IpfsNotDefinedError()\\n if (!isDefined(identity)) throw new Error('Identity is required, cannot create entry')\\n if (!isDefined(logId)) throw new Error('Entry requires an id')\\n if (!isDefined(data)) throw new Error('Entry requires data')\\n if (!isDefined(next) || !Array.isArray(next)) throw new Error(\\\"'next' argument is not an array\\\")\\n\\n // Clean the next objects and convert to hashes\\n const toEntry = (e) => e.hash ? e.hash : e\\n const nexts = next.filter(isDefined).map(toEntry)\\n\\n const entry = {\\n hash: null, // \\\"zd...Foo\\\", we'll set the hash after persisting the entry\\n id: logId, // For determining a unique chain\\n payload: data, // Can be any JSON.stringifyable data\\n next: nexts, // Array of hashes\\n refs: refs,\\n v: 2, // To tag the version of this data structure\\n clock: clock || new Clock(identity.publicKey)\\n }\\n\\n const signature = await identity.provider.sign(identity, Entry.toBuffer(entry))\\n\\n entry.key = identity.publicKey\\n entry.identity = identity.toJSON()\\n entry.sig = signature\\n entry.hash = await Entry.toMultihash(ipfs, entry, pin)\\n\\n return entry\\n }\\n\\n /**\\n * Verifies an entry signature.\\n *\\n * @param {IdentityProvider} identityProvider The identity provider to use\\n * @param {Entry} entry The entry being verified\\n * @return {Promise} A promise that resolves to a boolean value indicating if the signature is valid\\n */\\n static async verify (identityProvider, entry) {\\n if (!identityProvider) throw new Error('Identity-provider is required, cannot verify entry')\\n if (!Entry.isEntry(entry)) throw new Error('Invalid Log entry')\\n if (!entry.key) throw new Error(\\\"Entry doesn't have a key\\\")\\n if (!entry.sig) throw new Error(\\\"Entry doesn't have a signature\\\")\\n\\n const e = Entry.toEntry(entry, { presigned: true })\\n const verifier = entry.v < 1 ? 'v0' : 'v1'\\n return identityProvider.verify(entry.sig, entry.key, Entry.toBuffer(e), verifier)\\n }\\n\\n /**\\n * Transforms an entry into a Buffer.\\n * @param {Entry} entry The entry\\n * @return {Buffer} The buffer\\n */\\n static toBuffer (entry) {\\n const stringifiedEntry = entry.v === 0 ? JSON.stringify(entry) : stringify(entry)\\n return Buffer.from(stringifiedEntry)\\n }\\n\\n /**\\n * Get the multihash of an Entry.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Entry} entry Entry to get a multihash for\\n * @returns {Promise<string>}\\n * @example\\n * const multihash = await Entry.toMultihash(ipfs, entry)\\n * console.log(multihash)\\n * // \\\"Qm...Foo\\\"\\n * @deprecated\\n */\\n static async toMultihash (ipfs, entry, pin = false) {\\n if (!ipfs) throw IpfsNotDefinedError()\\n if (!Entry.isEntry(entry)) throw new Error('Invalid object format, cannot generate entry hash')\\n\\n // // Ensure `entry` follows the correct format\\n const e = Entry.toEntry(entry)\\n return io.write(ipfs, getWriteFormat(e.v), e, { links: IPLD_LINKS, pin })\\n }\\n\\n static toEntry (entry, { presigned = false, includeHash = false } = {}) {\\n const e = {\\n hash: includeHash ? entry.hash : null,\\n id: entry.id,\\n payload: entry.payload,\\n next: entry.next\\n }\\n\\n const v = entry.v\\n if (v > 1) {\\n e.refs = entry.refs // added in v2\\n }\\n e.v = entry.v\\n e.clock = new Clock(entry.clock.id, entry.clock.time)\\n\\n if (presigned) {\\n return e // don't include key/sig information\\n }\\n\\n e.key = entry.key\\n if (v > 0) {\\n e.identity = entry.identity // added in v1\\n }\\n e.sig = entry.sig\\n return e\\n }\\n\\n /**\\n * Create an Entry from a hash.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {string} hash The hash to create an Entry from\\n * @returns {Promise<Entry>}\\n * @example\\n * const entry = await Entry.fromMultihash(ipfs, \\\"zd...Foo\\\")\\n * console.log(entry)\\n * // { hash: \\\"Zd...Foo\\\", payload: \\\"hello\\\", next: [] }\\n */\\n static async fromMultihash (ipfs, hash) {\\n if (!ipfs) throw IpfsNotDefinedError()\\n if (!hash) throw new Error(`Invalid hash: ${hash}`)\\n const e = await io.read(ipfs, hash, { links: IPLD_LINKS })\\n\\n const entry = Entry.toEntry(e)\\n entry.hash = hash\\n\\n return entry\\n }\\n\\n /**\\n * Check if an object is an Entry.\\n * @param {Entry} obj\\n * @returns {boolean}\\n */\\n static isEntry (obj) {\\n return obj && obj.id !== undefined &&\\n obj.next !== undefined &&\\n obj.payload !== undefined &&\\n obj.v !== undefined &&\\n obj.hash !== undefined &&\\n obj.clock !== undefined &&\\n (obj.refs !== undefined || obj.v < 2) // 'refs' added in v2\\n }\\n\\n /**\\n * Compares two entries.\\n * @param {Entry} a\\n * @param {Entry} b\\n * @returns {number} 1 if a is greater, -1 is b is greater\\n */\\n static compare (a, b) {\\n var distance = Clock.compare(a.clock, b.clock)\\n if (distance === 0) return a.clock.id < b.clock.id ? -1 : 1\\n return distance\\n }\\n\\n /**\\n * Check if an entry equals another entry.\\n * @param {Entry} a\\n * @param {Entry} b\\n * @returns {boolean}\\n */\\n static isEqual (a, b) {\\n return a.hash === b.hash\\n }\\n\\n /**\\n * Check if an entry is a parent to another entry.\\n * @param {Entry} entry1 Entry to check\\n * @param {Entry} entry2 The parent Entry\\n * @returns {boolean}\\n */\\n static isParent (entry1, entry2) {\\n return entry2.next.indexOf(entry1.hash) > -1\\n }\\n\\n /**\\n * Find entry's children from an Array of entries.\\n * Returns entry's children as an Array up to the last know child.\\n * @param {Entry} entry Entry for which to find the parents\\n * @param {Array<Entry>} values Entries to search parents from\\n * @returns {Array<Entry>}\\n */\\n static findChildren (entry, values) {\\n var stack = []\\n var parent = values.find((e) => Entry.isParent(entry, e))\\n var prev = entry\\n while (parent) {\\n stack.push(parent)\\n prev = parent\\n parent = values.find((e) => Entry.isParent(prev, e))\\n }\\n stack = stack.sort((a, b) => a.clock.time > b.clock.time)\\n return stack\\n }\\n}\\n\\nmodule.exports = Entry\\nmodule.exports.IPLD_LINKS = IPLD_LINKS\\nmodule.exports.getWriteFormat = getWriteFormat\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/entry.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/g-set.js\":\n/*!********************************************!*\\\n !*** ./node_modules/ipfs-log/src/g-set.js ***!\n \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\n/**\\n * Interface for G-Set CRDT\\n *\\n * From:\\n * \\\"A comprehensive study of Convergent and Commutative Replicated Data Types\\\"\\n * https://hal.inria.fr/inria-00555588\\n */\\nclass GSet {\\n constructor (values) {} // eslint-disable-line\\n append (value) {}\\n merge (set) {}\\n get (value) {}\\n has (value) {}\\n get values () {}\\n get length () {}\\n}\\n\\nmodule.exports = GSet\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/g-set.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/lamport-clock.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/ipfs-log/src/lamport-clock.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nclass LamportClock {\\n constructor (id, time) {\\n this.id = id\\n this.time = time || 0\\n }\\n\\n tick () {\\n return new LamportClock(this.id, ++this.time)\\n }\\n\\n merge (clock) {\\n this.time = Math.max(this.time, clock.time)\\n return new LamportClock(this.id, this.time)\\n }\\n\\n clone () {\\n return new LamportClock(this.id, this.time)\\n }\\n\\n static compare (a, b) {\\n // Calculate the \\\"distance\\\" based on the clock, ie. lower or greater\\n var dist = a.time - b.time\\n\\n // If the sequence number is the same (concurrent events),\\n // and the IDs are different, take the one with a \\\"lower\\\" id\\n if (dist === 0 && a.id !== b.id) return a.id < b.id ? -1 : 1\\n\\n return dist\\n }\\n}\\n\\nmodule.exports = LamportClock\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/lamport-clock.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/log-errors.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/ipfs-log/src/log-errors.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst IPFSNotDefinedError = () => new Error('IPFS instance not defined')\\nconst LogNotDefinedError = () => new Error('Log instance not defined')\\nconst NotALogError = () => new Error('Given argument is not an instance of Log')\\nconst CannotJoinWithDifferentId = () => new Error('Can\\\\'t join logs with different IDs')\\nconst LtOrLteMustBeStringOrArray = () => new Error('lt or lte must be a string or array of Entries')\\n\\nmodule.exports = {\\n IPFSNotDefinedError: IPFSNotDefinedError,\\n LogNotDefinedError: LogNotDefinedError,\\n NotALogError: NotALogError,\\n CannotJoinWithDifferentId: CannotJoinWithDifferentId,\\n LtOrLteMustBeStringOrArray: LtOrLteMustBeStringOrArray\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/log-errors.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/log-io.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/ipfs-log/src/log-io.js ***!\n \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst Entry = __webpack_require__(/*! ./entry */ \\\"./node_modules/ipfs-log/src/entry.js\\\")\\nconst EntryIO = __webpack_require__(/*! ./entry-io */ \\\"./node_modules/ipfs-log/src/entry-io.js\\\")\\nconst Sorting = __webpack_require__(/*! ./log-sorting */ \\\"./node_modules/ipfs-log/src/log-sorting.js\\\")\\nconst { LastWriteWins, NoZeroes } = Sorting\\nconst LogError = __webpack_require__(/*! ./log-errors */ \\\"./node_modules/ipfs-log/src/log-errors.js\\\")\\nconst { isDefined, findUniques, difference, io } = __webpack_require__(/*! ./utils */ \\\"./node_modules/ipfs-log/src/utils/index.js\\\")\\n\\nconst IPLD_LINKS = ['heads']\\nconst last = (arr, n) => arr.slice(arr.length - Math.min(arr.length, n), arr.length)\\n\\nclass LogIO {\\n //\\n /**\\n * Get the multihash of a Log.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Log} log Log to get a multihash for\\n * @returns {Promise<string>}\\n * @deprecated\\n */\\n static async toMultihash (ipfs, log, { format } = {}) {\\n if (!isDefined(ipfs)) throw LogError.IPFSNotDefinedError()\\n if (!isDefined(log)) throw LogError.LogNotDefinedError()\\n if (!isDefined(format)) format = 'dag-cbor'\\n if (log.values.length < 1) throw new Error(`Can't serialize an empty log`)\\n\\n return io.write(ipfs, format, log.toJSON(), { links: IPLD_LINKS })\\n }\\n\\n /**\\n * Create a log from a hashes.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {string} hash The hash of the log\\n * @param {Object} options\\n * @param {number} options.length How many items to include in the log\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n */\\n static async fromMultihash (ipfs, hash,\\n { length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback }) {\\n if (!isDefined(ipfs)) throw LogError.IPFSNotDefinedError()\\n if (!isDefined(hash)) throw new Error(`Invalid hash: ${hash}`)\\n\\n const logData = await io.read(ipfs, hash, { links: IPLD_LINKS })\\n\\n if (!logData.heads || !logData.id) throw LogError.NotALogError()\\n\\n // Use user provided sorting function or the default one\\n sortFn = sortFn || NoZeroes(LastWriteWins)\\n const isHead = e => logData.heads.includes(e.hash)\\n\\n const all = await EntryIO.fetchAll(ipfs, logData.heads,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n\\n const logId = logData.id\\n const entries = length > -1 ? last(all.sort(sortFn), length) : all\\n const heads = entries.filter(isHead)\\n return { logId, entries, heads }\\n }\\n\\n /**\\n * Create a log from an entry hash.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {string} hash The hash of the entry\\n * @param {Object} options\\n * @param {number} options.length How many items to include in the log\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n */\\n static async fromEntryHash (ipfs, hash,\\n { length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback }) {\\n if (!isDefined(ipfs)) throw LogError.IpfsNotDefinedError()\\n if (!isDefined(hash)) throw new Error(\\\"'hash' must be defined\\\")\\n // Convert input hash(s) to an array\\n const hashes = Array.isArray(hash) ? hash : [hash]\\n // Fetch given length, return size at least the given input entries\\n length = length > -1 ? Math.max(length, 1) : length\\n const all = await EntryIO.fetchParallel(ipfs, hashes,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n // Cap the result at the right size by taking the last n entries,\\n // or if given length is -1, then take all\\n sortFn = sortFn || NoZeroes(LastWriteWins)\\n const entries = length > -1 ? last(all.sort(sortFn), length) : all\\n return { entries }\\n }\\n\\n /**\\n * Creates a log data from a JSON object, to be passed to a Log constructor\\n *\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {json} json A json object containing valid log data\\n * @param {Object} options\\n * @param {number} options.length How many entries to include\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n **/\\n static async fromJSON (ipfs, json, { length = -1, timeout, concurrency, onProgressCallback }) {\\n if (!isDefined(ipfs)) throw LogError.IPFSNotDefinedError()\\n const { id, heads } = json\\n const headHashes = heads.map(e => e.hash)\\n const all = await EntryIO.fetchParallel(ipfs, headHashes,\\n { length, timeout, concurrency, onProgressCallback })\\n const entries = all.sort(Entry.compare)\\n return { logId: id, entries, heads }\\n }\\n\\n /**\\n * Create a new log starting from an entry.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Entry|Array<Entry>} sourceEntries An entry or an array of entries to fetch a log from\\n * @param {Object} options\\n * @param {number} options.length How many entries to include\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n */\\n static async fromEntry (ipfs, sourceEntries,\\n { length = -1, exclude = [], timeout, concurrency, onProgressCallback }) {\\n if (!isDefined(ipfs)) throw LogError.IPFSNotDefinedError()\\n if (!isDefined(sourceEntries)) throw new Error(\\\"'sourceEntries' must be defined\\\")\\n\\n // Make sure we only have Entry objects as input\\n if (!Array.isArray(sourceEntries) && !Entry.isEntry(sourceEntries)) {\\n throw new Error(`'sourceEntries' argument must be an array of Entry instances or a single Entry`)\\n }\\n\\n if (!Array.isArray(sourceEntries)) {\\n sourceEntries = [sourceEntries]\\n }\\n\\n // Fetch given length, return size at least the given input entries\\n length = length > -1 ? Math.max(length, sourceEntries.length) : length\\n\\n // Make sure we pass hashes instead of objects to the fetcher function\\n const hashes = sourceEntries.map(e => e.hash)\\n\\n // Fetch the entries\\n const all = await EntryIO.fetchParallel(ipfs, hashes,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n\\n // Combine the fetches with the source entries and take only uniques\\n const combined = sourceEntries.concat(all).concat(exclude)\\n const uniques = findUniques(combined, 'hash').sort(Entry.compare)\\n\\n // Cap the result at the right size by taking the last n entries\\n const sliced = uniques.slice(length > -1 ? -length : -uniques.length)\\n\\n // Make sure that the given input entries are present in the result\\n // in order to not lose references\\n const missingSourceEntries = difference(sliced, sourceEntries, 'hash')\\n\\n const replaceInFront = (a, withEntries) => {\\n var sliced = a.slice(withEntries.length, a.length)\\n return withEntries.concat(sliced)\\n }\\n\\n // Add the input entries at the beginning of the array and remove\\n // as many elements from the array before inserting the original entries\\n const entries = replaceInFront(sliced, missingSourceEntries)\\n const logId = entries[entries.length - 1].id\\n return { logId, entries }\\n }\\n}\\n\\nmodule.exports = LogIO\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/log-io.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/log-sorting.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/ipfs-log/src/log-sorting.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst Clock = __webpack_require__(/*! ./lamport-clock */ \\\"./node_modules/ipfs-log/src/lamport-clock.js\\\")\\n\\n/**\\n * Sort two entries as Last-Write-Wins (LWW).\\n *\\n * Last Write Wins is a conflict resolution strategy for sorting elements\\n * where the element with a greater clock (latest) is chosen as the winner.\\n *\\n * @param {Entry} a First entry\\n * @param {Entry} b Second entry\\n * @returns {number} 1 if a is latest, -1 if b is latest\\n */\\nfunction LastWriteWins (a, b) {\\n // Ultimate conflict resolution (take the first/left arg)\\n const First = (a, b) => a\\n // Sort two entries by their clock id, if the same always take the first\\n const sortById = (a, b) => SortByClockId(a, b, First)\\n // Sort two entries by their clock time, if concurrent,\\n // determine sorting using provided conflict resolution function\\n const sortByEntryClocks = (a, b) => SortByClocks(a, b, sortById)\\n // Sort entries by clock time as the primary sort criteria\\n return sortByEntryClocks(a, b)\\n}\\n\\n/**\\n * Sort two entries by their hash.\\n *\\n * @param {Entry} a First entry\\n * @param {Entry} b Second entry\\n * @returns {number} 1 if a is latest, -1 if b is latest\\n */\\nfunction SortByEntryHash (a, b) {\\n // Ultimate conflict resolution (compare hashes)\\n const compareHash = (a, b) => a.hash < b.hash ? -1 : 1\\n // Sort two entries by their clock id, if the same then compare hashes\\n const sortById = (a, b) => SortByClockId(a, b, compareHash)\\n // Sort two entries by their clock time, if concurrent,\\n // determine sorting using provided conflict resolution function\\n const sortByEntryClocks = (a, b) => SortByClocks(a, b, sortById)\\n // Sort entries by clock time as the primary sort criteria\\n return sortByEntryClocks(a, b)\\n}\\n\\n/**\\n * Sort two entries by their clock time.\\n * @param {Entry} a First entry to compare\\n * @param {Entry} b Second entry to compare\\n * @param {function(a, b)} resolveConflict A function to call if entries are concurrent (happened at the same time). The function should take in two entries and return 1 if the first entry should be chosen and -1 if the second entry should be chosen.\\n * @returns {number} 1 if a is greater, -1 if b is greater\\n */\\nfunction SortByClocks (a, b, resolveConflict) {\\n // Compare the clocks\\n const diff = Clock.compare(a.clock, b.clock)\\n // If the clocks are concurrent, use the provided\\n // conflict resolution function to determine which comes first\\n return diff === 0 ? resolveConflict(a, b) : diff\\n}\\n\\n/**\\n * Sort two entries by their clock id.\\n * @param {Entry} a First entry to compare\\n * @param {Entry} b Second entry to compare\\n * @param {function(a, b)} resolveConflict A function to call if the clocks ids are the same. The function should take in two entries and return 1 if the first entry should be chosen and -1 if the second entry should be chosen.\\n * @returns {number} 1 if a is greater, -1 if b is greater\\n */\\nfunction SortByClockId (a, b, resolveConflict) {\\n // Sort by ID if clocks are concurrent,\\n // take the entry with a \\\"greater\\\" clock id\\n return a.clock.id === b.clock.id\\n ? resolveConflict(a, b)\\n : a.clock.id < b.clock.id ? -1 : 1\\n}\\n\\n/**\\n * A wrapper function to throw an error if the results of a passed function return zero\\n * @param {function(a, b)} [tiebreaker] The tiebreaker function to validate.\\n * @returns {function(a, b)} 1 if a is greater, -1 if b is greater\\n * @throws {Error} if func ever returns 0\\n */\\nfunction NoZeroes (func) {\\n const msg = `Your log's tiebreaker function, ${func.name}, has returned zero and therefore cannot be`\\n\\n const comparator = (a, b) => {\\n // Validate by calling the function\\n const result = func(a, b)\\n if (result === 0) { throw Error(msg) }\\n return result\\n }\\n\\n return comparator\\n}\\n\\nexports.SortByClocks = SortByClocks\\nexports.SortByClockId = SortByClockId\\nexports.LastWriteWins = LastWriteWins\\nexports.SortByEntryHash = SortByEntryHash\\nexports.NoZeroes = NoZeroes\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/log-sorting.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/log.js\":\n/*!******************************************!*\\\n !*** ./node_modules/ipfs-log/src/log.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst pMap = __webpack_require__(/*! p-map */ \\\"./node_modules/p-map/index.js\\\")\\nconst GSet = __webpack_require__(/*! ./g-set */ \\\"./node_modules/ipfs-log/src/g-set.js\\\")\\nconst Entry = __webpack_require__(/*! ./entry */ \\\"./node_modules/ipfs-log/src/entry.js\\\")\\nconst LogIO = __webpack_require__(/*! ./log-io */ \\\"./node_modules/ipfs-log/src/log-io.js\\\")\\nconst LogError = __webpack_require__(/*! ./log-errors */ \\\"./node_modules/ipfs-log/src/log-errors.js\\\")\\nconst Clock = __webpack_require__(/*! ./lamport-clock */ \\\"./node_modules/ipfs-log/src/lamport-clock.js\\\")\\nconst Sorting = __webpack_require__(/*! ./log-sorting */ \\\"./node_modules/ipfs-log/src/log-sorting.js\\\")\\nconst { LastWriteWins, NoZeroes } = Sorting\\nconst AccessController = __webpack_require__(/*! ./default-access-controller */ \\\"./node_modules/ipfs-log/src/default-access-controller.js\\\")\\nconst { isDefined, findUniques } = __webpack_require__(/*! ./utils */ \\\"./node_modules/ipfs-log/src/utils/index.js\\\")\\nconst EntryIndex = __webpack_require__(/*! ./entry-index */ \\\"./node_modules/ipfs-log/src/entry-index.js\\\")\\nconst randomId = () => new Date().getTime().toString()\\nconst getHash = e => e.hash\\nconst flatMap = (res, acc) => res.concat(acc)\\nconst getNextPointers = entry => entry.next\\nconst maxClockTimeReducer = (res, acc) => Math.max(res, acc.clock.time)\\nconst uniqueEntriesReducer = (res, acc) => {\\n res[acc.hash] = acc\\n return res\\n}\\n\\n/**\\n * Log.\\n *\\n * @description\\n * Log implements a G-Set CRDT and adds ordering.\\n *\\n * From:\\n * \\\"A comprehensive study of Convergent and Commutative Replicated Data Types\\\"\\n * https://hal.inria.fr/inria-00555588\\n */\\nclass Log extends GSet {\\n /**\\n * Create a new Log instance\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Object} identity Identity (https://github.com/orbitdb/orbit-db-identity-provider/blob/master/src/identity.js)\\n * @param {Object} options\\n * @param {string} options.logId ID of the log\\n * @param {Object} options.access AccessController (./default-access-controller)\\n * @param {Array<Entry>} options.entries An Array of Entries from which to create the log\\n * @param {Array<Entry>} options.heads Set the heads of the log\\n * @param {Clock} options.clock Set the clock of the log\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @return {Log} The log instance\\n */\\n constructor (ipfs, identity, { logId, access, entries, heads, clock, sortFn, concurrency } = {}) {\\n if (!isDefined(ipfs)) {\\n throw LogError.IPFSNotDefinedError()\\n }\\n\\n if (!isDefined(identity)) {\\n throw new Error('Identity is required')\\n }\\n\\n if (!isDefined(access)) {\\n access = new AccessController()\\n }\\n\\n if (isDefined(entries) && !Array.isArray(entries)) {\\n throw new Error(`'entries' argument must be an array of Entry instances`)\\n }\\n\\n if (isDefined(heads) && !Array.isArray(heads)) {\\n throw new Error(`'heads' argument must be an array`)\\n }\\n\\n if (!isDefined(sortFn)) {\\n sortFn = LastWriteWins\\n }\\n\\n super()\\n\\n this._sortFn = NoZeroes(sortFn)\\n\\n this._storage = ipfs\\n this._id = logId || randomId()\\n\\n // Access Controller\\n this._access = access\\n // Identity\\n this._identity = identity\\n\\n // Add entries to the internal cache\\n const uniqueEntries = (entries || []).reduce(uniqueEntriesReducer, {})\\n this._entryIndex = new EntryIndex(uniqueEntries)\\n entries = Object.values(uniqueEntries) || []\\n\\n // Set heads if not passed as an argument\\n heads = heads || Log.findHeads(entries)\\n this._headsIndex = heads.reduce(uniqueEntriesReducer, {})\\n\\n // Index of all next pointers in this log\\n this._nextsIndex = {}\\n const addToNextsIndex = e => e.next.forEach(a => (this._nextsIndex[a] = e.hash))\\n entries.forEach(addToNextsIndex)\\n\\n // Set the length, we calculate the length manually internally\\n this._length = entries.length\\n\\n // Set the clock\\n const maxTime = Math.max(clock ? clock.time : 0, this.heads.reduce(maxClockTimeReducer, 0))\\n // Take the given key as the clock id is it's a Key instance,\\n // otherwise if key was given, take whatever it is,\\n // and if it was null, take the given id as the clock id\\n this._clock = new Clock(this._identity.publicKey, maxTime)\\n\\n this.joinConcurrency = concurrency || 16\\n }\\n\\n /**\\n * Returns the ID of the log.\\n * @returns {string}\\n */\\n get id () {\\n return this._id\\n }\\n\\n /**\\n * Returns the clock of the log.\\n * @returns {string}\\n */\\n get clock () {\\n return this._clock\\n }\\n\\n /**\\n * Returns the length of the log.\\n * @return {number} Length\\n */\\n get length () {\\n return this._length\\n }\\n\\n /**\\n * Returns the values in the log.\\n * @returns {Array<Entry>}\\n */\\n get values () {\\n return Object.values(this.traverse(this.heads)).reverse()\\n }\\n\\n /**\\n * Returns an array of heads as hashes.\\n * @returns {Array<string>}\\n */\\n get heads () {\\n return Object.values(this._headsIndex).sort(this._sortFn).reverse()\\n }\\n\\n /**\\n * Returns an array of Entry objects that reference entries which\\n * are not in the log currently.\\n * @returns {Array<Entry>}\\n */\\n get tails () {\\n return Log.findTails(this.values)\\n }\\n\\n /**\\n * Returns an array of hashes that are referenced by entries which\\n * are not in the log currently.\\n * @returns {Array<string>} Array of hashes\\n */\\n get tailHashes () {\\n return Log.findTailHashes(this.values)\\n }\\n\\n /**\\n * Set the identity for the log\\n * @param {Identity} [identity] The identity to be set\\n */\\n setIdentity (identity) {\\n this._identity = identity\\n // Find the latest clock from the heads\\n const time = Math.max(this.clock.time, this.heads.reduce(maxClockTimeReducer, 0))\\n this._clock = new Clock(this._identity.publicKey, time)\\n }\\n\\n /**\\n * Find an entry.\\n * @param {string} [hash] The hashes of the entry\\n * @returns {Entry|undefined}\\n */\\n get (hash) {\\n return this._entryIndex.get(hash)\\n }\\n\\n /**\\n * Checks if a entry is part of the log\\n * @param {string} hash The hash of the entry\\n * @returns {boolean}\\n */\\n has (entry) {\\n return this._entryIndex.get(entry.hash || entry) !== undefined\\n }\\n\\n traverse (rootEntries, amount = -1, endHash) {\\n // Sort the given given root entries and use as the starting stack\\n let stack = rootEntries.sort(this._sortFn).reverse()\\n\\n // Cache for checking if we've processed an entry already\\n let traversed = {}\\n // End result\\n let result = {}\\n let count = 0\\n // Named function for getting an entry from the log\\n const getEntry = e => this.get(e)\\n\\n // Add an entry to the stack and traversed nodes index\\n const addToStack = entry => {\\n // If we've already processed the entry, don't add it to the stack\\n if (!entry || traversed[entry.hash]) {\\n return\\n }\\n\\n // Add the entry in front of the stack and sort\\n stack = [entry, ...stack]\\n .sort(this._sortFn)\\n .reverse()\\n // Add to the cache of processed entries\\n traversed[entry.hash] = true\\n }\\n\\n const addEntry = rootEntry => {\\n result[rootEntry.hash] = rootEntry\\n traversed[rootEntry.hash] = true\\n count++\\n }\\n\\n // Start traversal\\n // Process stack until it's empty (traversed the full log)\\n // or when we have the requested amount of entries\\n // If requested entry amount is -1, traverse all\\n while (stack.length > 0 && (count < amount || amount < 0)) { // eslint-disable-line no-unmodified-loop-condition\\n // Get the next element from the stack\\n const entry = stack.shift()\\n // Add to the result\\n addEntry(entry)\\n // If it is the specified end hash, break out of the while loop\\n if (endHash && endHash === entry.hash) break\\n\\n // Add entry's next references to the stack\\n const entries = entry.next.map(getEntry)\\n const defined = entries.filter(isDefined)\\n defined.forEach(addToStack)\\n }\\n\\n stack = []\\n traversed = {}\\n // End result\\n return result\\n }\\n\\n /**\\n * Append an entry to the log.\\n * @param {Entry} entry Entry to add\\n * @return {Log} New Log containing the appended value\\n */\\n async append (data, pointerCount = 1, pin = false) {\\n // Update the clock (find the latest clock)\\n const newTime = Math.max(this.clock.time, this.heads.reduce(maxClockTimeReducer, 0)) + 1\\n this._clock = new Clock(this.clock.id, newTime)\\n\\n const all = Object.values(this.traverse(this.heads, Math.max(pointerCount, this.heads.length)))\\n\\n // If pointer count is 4, returns 2\\n // If pointer count is 8, returns 3 references\\n // If pointer count is 512, returns 9 references\\n // If pointer count is 2048, returns 11 references\\n const getEveryPow2 = (maxDistance) => {\\n let entries = new Set()\\n for (let i = 1; i <= maxDistance; i *= 2) {\\n const index = Math.min(i - 1, all.length - 1)\\n entries.add(all[index])\\n }\\n return entries\\n }\\n const references = getEveryPow2(Math.min(pointerCount, all.length))\\n\\n // Always include the last known reference\\n if (all.length < pointerCount && all[all.length - 1]) {\\n references.add(all[all.length - 1])\\n }\\n\\n // Create the next pointers from heads\\n const nexts = Object.keys(this.heads.reverse().reduce(uniqueEntriesReducer, {}))\\n const isNext = e => !nexts.includes(e)\\n // Delete the heads from the refs\\n const refs = Array.from(references).map(getHash).filter(isNext)\\n\\n // @TODO: Split Entry.create into creating object, checking permission, signing and then posting to IPFS\\n // Create the entry and add it to the internal cache\\n const entry = await Entry.create(\\n this._storage,\\n this._identity,\\n this.id,\\n data,\\n nexts,\\n this.clock,\\n refs,\\n pin\\n )\\n\\n const canAppend = await this._access.canAppend(entry, this._identity.provider)\\n if (!canAppend) {\\n throw new Error(`Could not append entry, key \\\"${this._identity.id}\\\" is not allowed to write to the log`)\\n }\\n\\n this._entryIndex.set(entry.hash, entry)\\n nexts.forEach(e => (this._nextsIndex[e] = entry.hash))\\n this._headsIndex = {}\\n this._headsIndex[entry.hash] = entry\\n // Update the length\\n this._length++\\n return entry\\n }\\n\\n /*\\n * Creates a javscript iterator over log entries\\n *\\n * @param {Object} options\\n * @param {string|Array} options.gt Beginning hash of the iterator, non-inclusive\\n * @param {string|Array} options.gte Beginning hash of the iterator, inclusive\\n * @param {string|Array} options.lt Ending hash of the iterator, non-inclusive\\n * @param {string|Array} options.lte Ending hash of the iterator, inclusive\\n * @param {amount} options.amount Number of entried to return to / from the gte / lte hash\\n * @returns {Symbol.Iterator} Iterator object containing log entries\\n *\\n * @examples\\n *\\n * (async () => {\\n * log1 = new Log(ipfs, testIdentity, { logId: 'X' })\\n *\\n * for (let i = 0; i <= 100; i++) {\\n * await log1.append('entry' + i)\\n * }\\n *\\n * let it = log1.iterator({\\n * lte: 'zdpuApFd5XAPkCTmSx7qWQmQzvtdJPtx2K5p9to6ytCS79bfk',\\n * amount: 10\\n * })\\n *\\n * [...it].length // 10\\n * })()\\n *\\n *\\n */\\n iterator ({ gt = undefined, gte = undefined, lt = undefined, lte = undefined, amount = -1 } =\\n {}) {\\n if (amount === 0) return (function * () {})()\\n if (typeof lte === 'string') lte = [this.get(lte)]\\n if (typeof lt === 'string') lt = [this.get(this.get(lt).next)]\\n\\n if (lte && !Array.isArray(lte)) throw LogError.LtOrLteMustBeStringOrArray()\\n if (lt && !Array.isArray(lt)) throw LogError.LtOrLteMustBeStringOrArray()\\n\\n let start = (lte || (lt || this.heads)).filter(isDefined)\\n let endHash = gte ? this.get(gte).hash : gt ? this.get(gt).hash : null\\n let count = endHash ? -1 : amount || -1\\n\\n let entries = this.traverse(start, count, endHash)\\n let entryValues = Object.values(entries)\\n\\n // Strip off last entry if gt is non-inclusive\\n if (gt) entryValues.pop()\\n\\n // Deal with the amount argument working backwards from gt/gte\\n if ((gt || gte) && amount > -1) {\\n entryValues = entryValues.slice(entryValues.length - amount, entryValues.length)\\n }\\n\\n return (function * () {\\n for (let i in entryValues) {\\n yield entryValues[i]\\n }\\n })()\\n }\\n\\n /**\\n * Join two logs.\\n *\\n * Joins another log into this one.\\n *\\n * @param {Log} log Log to join with this Log\\n * @param {number} [size=-1] Max size of the joined log\\n * @returns {Promise<Log>} This Log instance\\n * @example\\n * await log1.join(log2)\\n */\\n async join (log, size = -1) {\\n if (!isDefined(log)) throw LogError.LogNotDefinedError()\\n if (!Log.isLog(log)) throw LogError.NotALogError()\\n if (this.id !== log.id) return\\n\\n // Get the difference of the logs\\n const newItems = Log.difference(log, this)\\n\\n const identityProvider = this._identity.provider\\n // Verify if entries are allowed to be added to the log and throws if\\n // there's an invalid entry\\n const permitted = async (entry) => {\\n const canAppend = await this._access.canAppend(entry, identityProvider)\\n if (!canAppend) {\\n throw new Error(`Could not append entry, key \\\"${entry.identity.id}\\\" is not allowed to write to the log`)\\n }\\n }\\n\\n // Verify signature for each entry and throws if there's an invalid signature\\n const verify = async (entry) => {\\n const isValid = await Entry.verify(identityProvider, entry)\\n const publicKey = entry.identity ? entry.identity.publicKey : entry.key\\n if (!isValid) throw new Error(`Could not validate signature \\\"${entry.sig}\\\" for entry \\\"${entry.hash}\\\" and key \\\"${publicKey}\\\"`)\\n }\\n\\n const entriesToJoin = Object.values(newItems)\\n await pMap(entriesToJoin, async e => {\\n await permitted(e)\\n await verify(e)\\n }, { concurrency: this.joinConcurrency })\\n\\n // Update the internal next pointers index\\n const addToNextsIndex = e => {\\n const entry = this.get(e.hash)\\n if (!entry) this._length++ /* istanbul ignore else */\\n e.next.forEach(a => (this._nextsIndex[a] = e.hash))\\n }\\n Object.values(newItems).forEach(addToNextsIndex)\\n\\n // Update the internal entry index\\n this._entryIndex.add(newItems)\\n\\n // Merge the heads\\n const notReferencedByNewItems = e => !nextsFromNewItems.find(a => a === e.hash)\\n const notInCurrentNexts = e => !this._nextsIndex[e.hash]\\n const nextsFromNewItems = Object.values(newItems).map(getNextPointers).reduce(flatMap, [])\\n const mergedHeads = Log.findHeads(Object.values(Object.assign({}, this._headsIndex, log._headsIndex)))\\n .filter(notReferencedByNewItems)\\n .filter(notInCurrentNexts)\\n .reduce(uniqueEntriesReducer, {})\\n\\n this._headsIndex = mergedHeads\\n\\n // Slice to the requested size\\n if (size > -1) {\\n let tmp = this.values\\n tmp = tmp.slice(-size)\\n this._entryIndex = null\\n this._entryIndex = new EntryIndex(tmp.reduce(uniqueEntriesReducer, {}))\\n this._headsIndex = Log.findHeads(tmp).reduce(uniqueEntriesReducer, {})\\n this._length = this._entryIndex.length\\n }\\n\\n // Find the latest clock from the heads\\n const maxClock = Object.values(this._headsIndex).reduce(maxClockTimeReducer, 0)\\n this._clock = new Clock(this.clock.id, Math.max(this.clock.time, maxClock))\\n return this\\n }\\n\\n /**\\n * Get the log in JSON format.\\n * @returns {Object} An object with the id and heads properties\\n */\\n toJSON () {\\n return {\\n id: this.id,\\n heads: this.heads\\n .sort(this._sortFn) // default sorting\\n .reverse() // we want the latest as the first element\\n .map(getHash) // return only the head hashes\\n }\\n }\\n\\n /**\\n * Get the log in JSON format as a snapshot.\\n * @returns {Object} An object with the id, heads and value properties\\n */\\n toSnapshot () {\\n return {\\n id: this.id,\\n heads: this.heads,\\n values: this.values\\n }\\n }\\n\\n /**\\n * Get the log as a Buffer.\\n * @returns {Buffer}\\n */\\n toBuffer () {\\n return Buffer.from(JSON.stringify(this.toJSON()))\\n }\\n\\n /**\\n * Returns the log entries as a formatted string.\\n * @returns {string}\\n * @example\\n * two\\n * └─one\\n * └─three\\n */\\n toString (payloadMapper) {\\n return this.values\\n .slice()\\n .reverse()\\n .map((e, idx) => {\\n const parents = Entry.findChildren(e, this.values)\\n const len = parents.length\\n let padding = new Array(Math.max(len - 1, 0))\\n padding = len > 1 ? padding.fill(' ') : padding\\n padding = len > 0 ? padding.concat(['└─']) : padding\\n /* istanbul ignore next */\\n return padding.join('') + (payloadMapper ? payloadMapper(e.payload) : e.payload)\\n })\\n .join('\\\\n')\\n }\\n\\n /**\\n * Check whether an object is a Log instance.\\n * @param {Object} log An object to check\\n * @returns {boolean}\\n */\\n static isLog (log) {\\n return log.id !== undefined &&\\n log.heads !== undefined &&\\n log._entryIndex !== undefined\\n }\\n\\n /**\\n * Get the log's multihash.\\n * @returns {Promise<string>} Multihash of the Log as Base58 encoded string.\\n */\\n toMultihash ({ format } = {}) {\\n return LogIO.toMultihash(this._storage, this, { format })\\n }\\n\\n /**\\n * Create a log from a hashes.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {string} hash The log hash\\n * @param {Object} options\\n * @param {AccessController} options.access The access controller instance\\n * @param {number} options.length How many items to include in the log\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @returns {Promise<Log>}\\n */\\n static async fromMultihash (ipfs, identity, hash,\\n { access, length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback } = {}) {\\n // TODO: need to verify the entries with 'key'\\n const { logId, entries, heads } = await LogIO.fromMultihash(ipfs, hash,\\n { length, exclude, timeout, onProgressCallback, concurrency, sortFn })\\n return new Log(ipfs, identity, { logId, access, entries, heads, sortFn })\\n }\\n\\n /**\\n * Create a log from a single entry's hash.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {string} hash The entry's hash\\n * @param {Object} options\\n * @param {string} options.logId The ID of the log\\n * @param {AccessController} options.access The access controller instance\\n * @param {number} options.length How many entries to include in the log\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @return {Promise<Log>} New Log\\n */\\n static async fromEntryHash (ipfs, identity, hash,\\n { logId, access, length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback } = {}) {\\n // TODO: need to verify the entries with 'key'\\n const { entries } = await LogIO.fromEntryHash(ipfs, hash,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n return new Log(ipfs, identity, { logId, access, entries, sortFn })\\n }\\n\\n /**\\n * Create a log from a Log Snapshot JSON.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {Object} json Log snapshot as JSON object\\n * @param {Object} options\\n * @param {AccessController} options.access The access controller instance\\n * @param {number} options.length How many entries to include in the log\\n * @param {function(hash, entry, parent, depth)} [options.onProgressCallback]\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @return {Promise<Log>} New Log\\n */\\n static async fromJSON (ipfs, identity, json,\\n { access, length = -1, timeout, sortFn, onProgressCallback } = {}) {\\n // TODO: need to verify the entries with 'key'\\n const { logId, entries } = await LogIO.fromJSON(ipfs, json,\\n { length, timeout, onProgressCallback })\\n return new Log(ipfs, identity, { logId, access, entries, sortFn })\\n }\\n\\n /**\\n * Create a new log from an Entry instance.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {Entry|Array<Entry>} sourceEntries An Entry or an array of entries to fetch a log from\\n * @param {Object} options\\n * @param {AccessController} options.access The access controller instance\\n * @param {number} options.length How many entries to include. Default: infinite.\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} [options.onProgressCallback]\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @return {Promise<Log>} New Log\\n */\\n static async fromEntry (ipfs, identity, sourceEntries,\\n { access, length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback } = {}) {\\n // TODO: need to verify the entries with 'key'\\n const { logId, entries } = await LogIO.fromEntry(ipfs, sourceEntries,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n return new Log(ipfs, identity, { logId, access, entries, sortFn })\\n }\\n\\n /**\\n * Find heads from a collection of entries.\\n *\\n * Finds entries that are the heads of this collection,\\n * ie. entries that are not referenced by other entries.\\n *\\n * @param {Array<Entry>} entries Entries to search heads from\\n * @returns {Array<Entry>}\\n */\\n static findHeads (entries) {\\n var indexReducer = (res, entry, idx, arr) => {\\n var addToResult = e => (res[e] = entry.hash)\\n entry.next.forEach(addToResult)\\n return res\\n }\\n\\n var items = entries.reduce(indexReducer, {})\\n\\n var exists = e => items[e.hash] === undefined\\n var compareIds = (a, b) => a.clock.id > b.clock.id\\n\\n return entries.filter(exists).sort(compareIds)\\n }\\n\\n // Find entries that point to another entry that is not in the\\n // input array\\n static findTails (entries) {\\n // Reverse index { next -> entry }\\n var reverseIndex = {}\\n // Null index containing entries that have no parents (nexts)\\n var nullIndex = []\\n // Hashes for all entries for quick lookups\\n var hashes = {}\\n // Hashes of all next entries\\n var nexts = []\\n\\n var addToIndex = (e) => {\\n if (e.next.length === 0) {\\n nullIndex.push(e)\\n }\\n var addToReverseIndex = (a) => {\\n /* istanbul ignore else */\\n if (!reverseIndex[a]) reverseIndex[a] = []\\n reverseIndex[a].push(e)\\n }\\n\\n // Add all entries and their parents to the reverse index\\n e.next.forEach(addToReverseIndex)\\n // Get all next references\\n nexts = nexts.concat(e.next)\\n // Get the hashes of input entries\\n hashes[e.hash] = true\\n }\\n\\n // Create our indices\\n entries.forEach(addToIndex)\\n\\n var addUniques = (res, entries, idx, arr) => res.concat(findUniques(entries, 'hash'))\\n var exists = e => hashes[e] === undefined\\n var findFromReverseIndex = e => reverseIndex[e]\\n\\n // Drop hashes that are not in the input entries\\n const tails = nexts // For every hash in nexts:\\n .filter(exists) // Remove undefineds and nulls\\n .map(findFromReverseIndex) // Get the Entry from the reverse index\\n .reduce(addUniques, []) // Flatten the result and take only uniques\\n .concat(nullIndex) // Combine with tails the have no next refs (ie. first-in-their-chain)\\n\\n return findUniques(tails, 'hash').sort(Entry.compare)\\n }\\n\\n // Find the hashes to entries that are not in a collection\\n // but referenced by other entries\\n static findTailHashes (entries) {\\n var hashes = {}\\n var addToIndex = e => (hashes[e.hash] = true)\\n var reduceTailHashes = (res, entry, idx, arr) => {\\n var addToResult = (e) => {\\n /* istanbul ignore else */\\n if (hashes[e] === undefined) {\\n res.splice(0, 0, e)\\n }\\n }\\n entry.next.reverse().forEach(addToResult)\\n return res\\n }\\n\\n entries.forEach(addToIndex)\\n return entries.reduce(reduceTailHashes, [])\\n }\\n\\n static difference (a, b) {\\n let stack = Object.keys(a._headsIndex)\\n let traversed = {}\\n let res = {}\\n\\n const pushToStack = hash => {\\n if (!traversed[hash] && !b.get(hash)) {\\n stack.push(hash)\\n traversed[hash] = true\\n }\\n }\\n\\n while (stack.length > 0) {\\n const hash = stack.shift()\\n const entry = a.get(hash)\\n if (entry && !b.get(hash) && entry.id === b.id) {\\n res[entry.hash] = entry\\n traversed[entry.hash] = true\\n entry.next.forEach(pushToStack)\\n }\\n }\\n return res\\n }\\n}\\n\\nmodule.exports = Log\\nmodule.exports.Sorting = Sorting\\nmodule.exports.Entry = Entry\\nmodule.exports.AccessController = AccessController\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/log.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/utils/difference.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/ipfs-log/src/utils/difference.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nfunction difference (a, b, key) {\\n // Indices for quick lookups\\n var processed = {}\\n var existing = {}\\n\\n // Create an index of the first collection\\n var addToIndex = e => (existing[key ? e[key] : e] = true)\\n a.forEach(addToIndex)\\n\\n // Reduce to entries that are not in the first collection\\n var reducer = (res, entry) => {\\n var isInFirst = existing[key ? entry[key] : entry] !== undefined\\n var hasBeenProcessed = processed[key ? entry[key] : entry] !== undefined\\n if (!isInFirst && !hasBeenProcessed) {\\n res.push(entry)\\n processed[key ? entry[key] : entry] = true\\n }\\n return res\\n }\\n\\n return b.reduce(reducer, [])\\n}\\n\\nmodule.exports = difference\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/utils/difference.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/utils/find-uniques.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/ipfs-log/src/utils/find-uniques.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nfunction findUniques (value, key) {\\n // Create an index of the collection\\n let uniques = {}\\n var get = e => uniques[e]\\n var addToIndex = e => (uniques[key ? e[key] : e] = e)\\n value.forEach(addToIndex)\\n return Object.keys(uniques).map(get)\\n}\\n\\nmodule.exports = findUniques\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/utils/find-uniques.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/utils/index.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/ipfs-log/src/utils/index.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst difference = __webpack_require__(/*! ./difference */ \\\"./node_modules/ipfs-log/src/utils/difference.js\\\")\\nconst findUniques = __webpack_require__(/*! ./find-uniques */ \\\"./node_modules/ipfs-log/src/utils/find-uniques.js\\\")\\nconst isDefined = __webpack_require__(/*! ./is-defined */ \\\"./node_modules/ipfs-log/src/utils/is-defined.js\\\")\\nconst io = __webpack_require__(/*! orbit-db-io */ \\\"./node_modules/orbit-db-io/index.js\\\")\\n\\nmodule.exports = {\\n difference,\\n findUniques,\\n isDefined,\\n io\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/utils/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/utils/is-defined.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/ipfs-log/src/utils/is-defined.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst isDefined = (arg) => arg !== undefined && arg !== null\\n\\nmodule.exports = isDefined\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/utils/is-defined.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/cids/src/cid-util.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/cids/src/cid-util.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst mh = __webpack_require__(/*! multihashes */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js\\\")\\n\\nvar CIDUtil = {\\n /**\\n * Test if the given input is a valid CID object.\\n * Returns an error message if it is not.\\n * Returns undefined if it is a valid CID.\\n *\\n * @param {any} other\\n * @returns {string}\\n */\\n checkCIDComponents: function (other) {\\n if (other == null) {\\n return 'null values are not valid CIDs'\\n }\\n\\n if (!(other.version === 0 || other.version === 1)) {\\n return 'Invalid version, must be a number equal to 1 or 0'\\n }\\n\\n if (typeof other.codec !== 'string') {\\n return 'codec must be string'\\n }\\n\\n if (other.version === 0) {\\n if (other.codec !== 'dag-pb') {\\n return \\\"codec must be 'dag-pb' for CIDv0\\\"\\n }\\n if (other.multibaseName !== 'base58btc') {\\n return \\\"multibaseName must be 'base58btc' for CIDv0\\\"\\n }\\n }\\n\\n if (!Buffer.isBuffer(other.multihash)) {\\n return 'multihash must be a Buffer'\\n }\\n\\n try {\\n mh.validate(other.multihash)\\n } catch (err) {\\n let errorMsg = err.message\\n if (!errorMsg) { // Just in case mh.validate() throws an error with empty error message\\n errorMsg = 'Multihash validation failed'\\n }\\n return errorMsg\\n }\\n }\\n}\\n\\nmodule.exports = CIDUtil\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/cids/src/cid-util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/cids/src/index.js ***!\n \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst mh = __webpack_require__(/*! multihashes */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js\\\")\\nconst multibase = __webpack_require__(/*! multibase */ \\\"./node_modules/multibase/src/index.js\\\")\\nconst multicodec = __webpack_require__(/*! multicodec */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js\\\")\\nconst codecs = __webpack_require__(/*! multicodec/src/base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\nconst CIDUtil = __webpack_require__(/*! ./cid-util */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/cid-util.js\\\")\\nconst withIs = __webpack_require__(/*! class-is */ \\\"./node_modules/class-is/index.js\\\")\\n\\n/**\\n * @typedef {Object} SerializedCID\\n * @param {string} codec\\n * @param {number} version\\n * @param {Buffer} multihash\\n */\\n\\n/**\\n * Test if the given input is a CID.\\n * @function isCID\\n * @memberof CID\\n * @static\\n * @param {any} other\\n * @returns {bool}\\n */\\n\\n/**\\n * Class representing a CID `<mbase><version><mcodec><mhash>`\\n * , as defined in [ipld/cid](https://github.com/multiformats/cid).\\n * @class CID\\n */\\nclass CID {\\n /**\\n * Create a new CID.\\n *\\n * The algorithm for argument input is roughly:\\n * ```\\n * if (cid)\\n * -> create a copy\\n * else if (str)\\n * if (1st char is on multibase table) -> CID String\\n * else -> bs58 encoded multihash\\n * else if (Buffer)\\n * if (1st byte is 0 or 1) -> CID\\n * else -> multihash\\n * else if (Number)\\n * -> construct CID by parts\\n * ```\\n *\\n * @param {string|Buffer|CID} version\\n * @param {string} [codec]\\n * @param {Buffer} [multihash]\\n * @param {string} [multibaseName]\\n *\\n * @example\\n * new CID(<version>, <codec>, <multihash>, <multibaseName>)\\n * new CID(<cidStr>)\\n * new CID(<cid.buffer>)\\n * new CID(<multihash>)\\n * new CID(<bs58 encoded multihash>)\\n * new CID(<cid>)\\n */\\n constructor (version, codec, multihash, multibaseName) {\\n if (_CID.isCID(version)) {\\n // version is an exising CID instance\\n const cid = version\\n this.version = cid.version\\n this.codec = cid.codec\\n this.multihash = Buffer.from(cid.multihash)\\n // Default guard for when a CID < 0.7 is passed with no multibaseName\\n this.multibaseName = cid.multibaseName || (cid.version === 0 ? 'base58btc' : 'base32')\\n return\\n }\\n\\n if (typeof version === 'string') {\\n // e.g. 'base32' or false\\n const baseName = multibase.isEncoded(version)\\n if (baseName) {\\n // version is a CID String encoded with multibase, so v1\\n const cid = multibase.decode(version)\\n this.version = parseInt(cid.slice(0, 1).toString('hex'), 16)\\n this.codec = multicodec.getCodec(cid.slice(1))\\n this.multihash = multicodec.rmPrefix(cid.slice(1))\\n this.multibaseName = baseName\\n } else {\\n // version is a base58btc string multihash, so v0\\n this.version = 0\\n this.codec = 'dag-pb'\\n this.multihash = mh.fromB58String(version)\\n this.multibaseName = 'base58btc'\\n }\\n CID.validateCID(this)\\n Object.defineProperty(this, 'string', { value: version })\\n return\\n }\\n\\n if (Buffer.isBuffer(version)) {\\n const firstByte = version.slice(0, 1)\\n const v = parseInt(firstByte.toString('hex'), 16)\\n if (v === 1) {\\n // version is a CID buffer\\n const cid = version\\n this.version = v\\n this.codec = multicodec.getCodec(cid.slice(1))\\n this.multihash = multicodec.rmPrefix(cid.slice(1))\\n this.multibaseName = 'base32'\\n } else {\\n // version is a raw multihash buffer, so v0\\n this.version = 0\\n this.codec = 'dag-pb'\\n this.multihash = version\\n this.multibaseName = 'base58btc'\\n }\\n CID.validateCID(this)\\n return\\n }\\n\\n // otherwise, assemble the CID from the parameters\\n\\n /**\\n * @type {number}\\n */\\n this.version = version\\n\\n /**\\n * @type {string}\\n */\\n this.codec = codec\\n\\n /**\\n * @type {Buffer}\\n */\\n this.multihash = multihash\\n\\n /**\\n * @type {string}\\n */\\n this.multibaseName = multibaseName || (version === 0 ? 'base58btc' : 'base32')\\n\\n CID.validateCID(this)\\n }\\n\\n /**\\n * The CID as a `Buffer`\\n *\\n * @return {Buffer}\\n * @readonly\\n *\\n * @memberOf CID\\n */\\n get buffer () {\\n let buffer = this._buffer\\n\\n if (!buffer) {\\n if (this.version === 0) {\\n buffer = this.multihash\\n } else if (this.version === 1) {\\n buffer = Buffer.concat([\\n Buffer.from('01', 'hex'),\\n multicodec.getCodeVarint(this.codec),\\n this.multihash\\n ])\\n } else {\\n throw new Error('unsupported version')\\n }\\n\\n // Cache this buffer so it doesn't have to be recreated\\n Object.defineProperty(this, '_buffer', { value: buffer })\\n }\\n\\n return buffer\\n }\\n\\n /**\\n * Get the prefix of the CID.\\n *\\n * @returns {Buffer}\\n * @readonly\\n */\\n get prefix () {\\n return Buffer.concat([\\n Buffer.from(`0${this.version}`, 'hex'),\\n multicodec.getCodeVarint(this.codec),\\n mh.prefix(this.multihash)\\n ])\\n }\\n\\n /**\\n * Convert to a CID of version `0`.\\n *\\n * @returns {CID}\\n */\\n toV0 () {\\n if (this.codec !== 'dag-pb') {\\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\\n }\\n\\n const { name, length } = mh.decode(this.multihash)\\n\\n if (name !== 'sha2-256') {\\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\\n }\\n\\n if (length !== 32) {\\n throw new Error('Cannot convert non 32 byte multihash CID to CIDv0')\\n }\\n\\n return new _CID(0, this.codec, this.multihash)\\n }\\n\\n /**\\n * Convert to a CID of version `1`.\\n *\\n * @returns {CID}\\n */\\n toV1 () {\\n return new _CID(1, this.codec, this.multihash)\\n }\\n\\n /**\\n * Encode the CID into a string.\\n *\\n * @param {string} [base=this.multibaseName] - Base encoding to use.\\n * @returns {string}\\n */\\n toBaseEncodedString (base = this.multibaseName) {\\n if (this.string && base === this.multibaseName) {\\n return this.string\\n }\\n let str = null\\n if (this.version === 0) {\\n if (base !== 'base58btc') {\\n throw new Error('not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()')\\n }\\n str = mh.toB58String(this.multihash)\\n } else if (this.version === 1) {\\n str = multibase.encode(base, this.buffer).toString()\\n } else {\\n throw new Error('unsupported version')\\n }\\n if (base === this.multibaseName) {\\n // cache the string value\\n Object.defineProperty(this, 'string', { value: str })\\n }\\n return str\\n }\\n\\n toString (base) {\\n return this.toBaseEncodedString(base)\\n }\\n\\n /**\\n * Serialize to a plain object.\\n *\\n * @returns {SerializedCID}\\n */\\n toJSON () {\\n return {\\n codec: this.codec,\\n version: this.version,\\n hash: this.multihash\\n }\\n }\\n\\n /**\\n * Compare equality with another CID.\\n *\\n * @param {CID} other\\n * @returns {bool}\\n */\\n equals (other) {\\n return this.codec === other.codec &&\\n this.version === other.version &&\\n this.multihash.equals(other.multihash)\\n }\\n\\n /**\\n * Test if the given input is a valid CID object.\\n * Throws if it is not.\\n *\\n * @param {any} other\\n * @returns {void}\\n */\\n static validateCID (other) {\\n const errorMsg = CIDUtil.checkCIDComponents(other)\\n if (errorMsg) {\\n throw new Error(errorMsg)\\n }\\n }\\n}\\n\\nconst _CID = withIs(CID, {\\n className: 'CID',\\n symbolName: '@ipld/js-cid/CID'\\n})\\n\\n_CID.codecs = codecs\\n\\nmodule.exports = _CID\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/cids/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/err-code/index.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/err-code/index.js ***!\n \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nfunction createError(err, code, props) {\\n var key;\\n\\n if (!(err instanceof Error)) {\\n throw new TypeError('Please pass an Error to err-code');\\n }\\n\\n if (typeof code === 'object') {\\n props = code;\\n } else if (code != null) {\\n err.code = code;\\n }\\n\\n if (props) {\\n for (key in props) {\\n err[key] = props[key];\\n }\\n }\\n\\n return err;\\n}\\n\\nmodule.exports = createError;\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/err-code/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/js-sha3/src/sha3.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/js-sha3/src/sha3.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\\n *\\n * @version 0.8.0\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\n * @copyright Chen, Yi-Cyuan 2015-2018\\n * @license MIT\\n */\\n/*jslint bitwise: true */\\n(function () {\\n 'use strict';\\n\\n var INPUT_ERROR = 'input is invalid type';\\n var FINALIZE_ERROR = 'finalize already called';\\n var WINDOW = typeof window === 'object';\\n var root = WINDOW ? window : {};\\n if (root.JS_SHA3_NO_WINDOW) {\\n WINDOW = false;\\n }\\n var WEB_WORKER = !WINDOW && typeof self === 'object';\\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\n if (NODE_JS) {\\n root = global;\\n } else if (WEB_WORKER) {\\n root = self;\\n }\\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\\n var AMD = true && __webpack_require__(/*! !webpack amd options */ \\\"./node_modules/webpack/buildin/amd-options.js\\\");\\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\\n var HEX_CHARS = '0123456789abcdef'.split('');\\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\\n var PADDING = [6, 1536, 393216, 100663296];\\n var SHIFT = [0, 8, 16, 24];\\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\\n var BITS = [224, 256, 384, 512];\\n var SHAKE_BITS = [128, 256];\\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\\n var CSHAKE_BYTEPAD = {\\n '128': 168,\\n '256': 136\\n };\\n\\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\\n Array.isArray = function (obj) {\\n return Object.prototype.toString.call(obj) === '[object Array]';\\n };\\n }\\n\\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\\n ArrayBuffer.isView = function (obj) {\\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\\n };\\n }\\n\\n var createOutputMethod = function (bits, padding, outputType) {\\n return function (message) {\\n return new Keccak(bits, padding, bits).update(message)[outputType]();\\n };\\n };\\n\\n var createShakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits) {\\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\\n };\\n };\\n\\n var createCshakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits, n, s) {\\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\\n };\\n };\\n\\n var createKmacOutputMethod = function (bits, padding, outputType) {\\n return function (key, message, outputBits, s) {\\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\\n };\\n };\\n\\n var createOutputMethods = function (method, createMethod, bits, padding) {\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createMethod(bits, padding, type);\\n }\\n return method;\\n };\\n\\n var createMethod = function (bits, padding) {\\n var method = createOutputMethod(bits, padding, 'hex');\\n method.create = function () {\\n return new Keccak(bits, padding, bits);\\n };\\n method.update = function (message) {\\n return method.create().update(message);\\n };\\n return createOutputMethods(method, createOutputMethod, bits, padding);\\n };\\n\\n var createShakeMethod = function (bits, padding) {\\n var method = createShakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits) {\\n return new Keccak(bits, padding, outputBits);\\n };\\n method.update = function (message, outputBits) {\\n return method.create(outputBits).update(message);\\n };\\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\\n };\\n\\n var createCshakeMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createCshakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits, n, s) {\\n if (!n && !s) {\\n return methods['shake' + bits].create(outputBits);\\n } else {\\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\\n }\\n };\\n method.update = function (message, outputBits, n, s) {\\n return method.create(outputBits, n, s).update(message);\\n };\\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\\n };\\n\\n var createKmacMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createKmacOutputMethod(bits, padding, 'hex');\\n method.create = function (key, outputBits, s) {\\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\\n };\\n method.update = function (key, message, outputBits, s) {\\n return method.create(key, outputBits, s).update(message);\\n };\\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\\n };\\n\\n var algorithms = [\\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\\n ];\\n\\n var methods = {}, methodNames = [];\\n\\n for (var i = 0; i < algorithms.length; ++i) {\\n var algorithm = algorithms[i];\\n var bits = algorithm.bits;\\n for (var j = 0; j < bits.length; ++j) {\\n var methodName = algorithm.name + '_' + bits[j];\\n methodNames.push(methodName);\\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\\n if (algorithm.name !== 'sha3') {\\n var newMethodName = algorithm.name + bits[j];\\n methodNames.push(newMethodName);\\n methods[newMethodName] = methods[methodName];\\n }\\n }\\n }\\n\\n function Keccak(bits, padding, outputBits) {\\n this.blocks = [];\\n this.s = [];\\n this.padding = padding;\\n this.outputBits = outputBits;\\n this.reset = true;\\n this.finalized = false;\\n this.block = 0;\\n this.start = 0;\\n this.blockCount = (1600 - (bits << 1)) >> 5;\\n this.byteCount = this.blockCount << 2;\\n this.outputBlocks = outputBits >> 5;\\n this.extraBytes = (outputBits & 31) >> 3;\\n\\n for (var i = 0; i < 50; ++i) {\\n this.s[i] = 0;\\n }\\n }\\n\\n Keccak.prototype.update = function (message) {\\n if (this.finalized) {\\n throw new Error(FINALIZE_ERROR);\\n }\\n var notString, type = typeof message;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (message === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n } else if (!Array.isArray(message)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\\n\\n while (index < length) {\\n if (this.reset) {\\n this.reset = false;\\n blocks[0] = this.block;\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n if (notString) {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\n }\\n } else {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n code = message.charCodeAt(index);\\n if (code < 0x80) {\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\n } else if (code < 0x800) {\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else if (code < 0xd800 || code >= 0xe000) {\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n }\\n }\\n }\\n this.lastByteIndex = i;\\n if (i >= byteCount) {\\n this.start = i - byteCount;\\n this.block = blocks[blockCount];\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n this.reset = true;\\n } else {\\n this.start = i;\\n }\\n }\\n return this;\\n };\\n\\n Keccak.prototype.encode = function (x, right) {\\n var o = x & 255, n = 1;\\n var bytes = [o];\\n x = x >> 8;\\n o = x & 255;\\n while (o > 0) {\\n bytes.unshift(o);\\n x = x >> 8;\\n o = x & 255;\\n ++n;\\n }\\n if (right) {\\n bytes.push(n);\\n } else {\\n bytes.unshift(n);\\n }\\n this.update(bytes);\\n return bytes.length;\\n };\\n\\n Keccak.prototype.encodeString = function (str) {\\n var notString, type = typeof str;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (str === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\\n str = new Uint8Array(str);\\n } else if (!Array.isArray(str)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var bytes = 0, length = str.length;\\n if (notString) {\\n bytes = length;\\n } else {\\n for (var i = 0; i < str.length; ++i) {\\n var code = str.charCodeAt(i);\\n if (code < 0x80) {\\n bytes += 1;\\n } else if (code < 0x800) {\\n bytes += 2;\\n } else if (code < 0xd800 || code >= 0xe000) {\\n bytes += 3;\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\\n bytes += 4;\\n }\\n }\\n }\\n bytes += this.encode(bytes * 8);\\n this.update(str);\\n return bytes;\\n };\\n\\n Keccak.prototype.bytepad = function (strs, w) {\\n var bytes = this.encode(w);\\n for (var i = 0; i < strs.length; ++i) {\\n bytes += this.encodeString(strs[i]);\\n }\\n var paddingBytes = w - bytes % w;\\n var zeros = [];\\n zeros.length = paddingBytes;\\n this.update(zeros);\\n return this;\\n };\\n\\n Keccak.prototype.finalize = function () {\\n if (this.finalized) {\\n return;\\n }\\n this.finalized = true;\\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\\n blocks[i >> 2] |= this.padding[i & 3];\\n if (this.lastByteIndex === this.byteCount) {\\n blocks[0] = blocks[blockCount];\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n blocks[blockCount - 1] |= 0x80000000;\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n };\\n\\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var hex = '', block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n i = 0;\\n }\\n }\\n if (extraBytes) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\\n if (extraBytes > 1) {\\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\\n }\\n if (extraBytes > 2) {\\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\\n }\\n }\\n return hex;\\n };\\n\\n Keccak.prototype.arrayBuffer = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var bytes = this.outputBits >> 3;\\n var buffer;\\n if (extraBytes) {\\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\\n } else {\\n buffer = new ArrayBuffer(bytes);\\n }\\n var array = new Uint32Array(buffer);\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n array[j] = s[i];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n array[i] = s[i];\\n buffer = buffer.slice(0, bytes);\\n }\\n return buffer;\\n };\\n\\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\\n\\n Keccak.prototype.digest = Keccak.prototype.array = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var array = [], offset, block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n array[offset + 1] = (block >> 8) & 0xFF;\\n array[offset + 2] = (block >> 16) & 0xFF;\\n array[offset + 3] = (block >> 24) & 0xFF;\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n if (extraBytes > 1) {\\n array[offset + 1] = (block >> 8) & 0xFF;\\n }\\n if (extraBytes > 2) {\\n array[offset + 2] = (block >> 16) & 0xFF;\\n }\\n }\\n return array;\\n };\\n\\n function Kmac(bits, padding, outputBits) {\\n Keccak.call(this, bits, padding, outputBits);\\n }\\n\\n Kmac.prototype = new Keccak();\\n\\n Kmac.prototype.finalize = function () {\\n this.encode(this.outputBits, true);\\n return Keccak.prototype.finalize.call(this);\\n };\\n\\n var f = function (s) {\\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\\n for (n = 0; n < 48; n += 2) {\\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\\n\\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\\n s[0] ^= h;\\n s[1] ^= l;\\n s[10] ^= h;\\n s[11] ^= l;\\n s[20] ^= h;\\n s[21] ^= l;\\n s[30] ^= h;\\n s[31] ^= l;\\n s[40] ^= h;\\n s[41] ^= l;\\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\\n s[2] ^= h;\\n s[3] ^= l;\\n s[12] ^= h;\\n s[13] ^= l;\\n s[22] ^= h;\\n s[23] ^= l;\\n s[32] ^= h;\\n s[33] ^= l;\\n s[42] ^= h;\\n s[43] ^= l;\\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\\n s[4] ^= h;\\n s[5] ^= l;\\n s[14] ^= h;\\n s[15] ^= l;\\n s[24] ^= h;\\n s[25] ^= l;\\n s[34] ^= h;\\n s[35] ^= l;\\n s[44] ^= h;\\n s[45] ^= l;\\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\\n s[6] ^= h;\\n s[7] ^= l;\\n s[16] ^= h;\\n s[17] ^= l;\\n s[26] ^= h;\\n s[27] ^= l;\\n s[36] ^= h;\\n s[37] ^= l;\\n s[46] ^= h;\\n s[47] ^= l;\\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\\n s[8] ^= h;\\n s[9] ^= l;\\n s[18] ^= h;\\n s[19] ^= l;\\n s[28] ^= h;\\n s[29] ^= l;\\n s[38] ^= h;\\n s[39] ^= l;\\n s[48] ^= h;\\n s[49] ^= l;\\n\\n b0 = s[0];\\n b1 = s[1];\\n b32 = (s[11] << 4) | (s[10] >>> 28);\\n b33 = (s[10] << 4) | (s[11] >>> 28);\\n b14 = (s[20] << 3) | (s[21] >>> 29);\\n b15 = (s[21] << 3) | (s[20] >>> 29);\\n b46 = (s[31] << 9) | (s[30] >>> 23);\\n b47 = (s[30] << 9) | (s[31] >>> 23);\\n b28 = (s[40] << 18) | (s[41] >>> 14);\\n b29 = (s[41] << 18) | (s[40] >>> 14);\\n b20 = (s[2] << 1) | (s[3] >>> 31);\\n b21 = (s[3] << 1) | (s[2] >>> 31);\\n b2 = (s[13] << 12) | (s[12] >>> 20);\\n b3 = (s[12] << 12) | (s[13] >>> 20);\\n b34 = (s[22] << 10) | (s[23] >>> 22);\\n b35 = (s[23] << 10) | (s[22] >>> 22);\\n b16 = (s[33] << 13) | (s[32] >>> 19);\\n b17 = (s[32] << 13) | (s[33] >>> 19);\\n b48 = (s[42] << 2) | (s[43] >>> 30);\\n b49 = (s[43] << 2) | (s[42] >>> 30);\\n b40 = (s[5] << 30) | (s[4] >>> 2);\\n b41 = (s[4] << 30) | (s[5] >>> 2);\\n b22 = (s[14] << 6) | (s[15] >>> 26);\\n b23 = (s[15] << 6) | (s[14] >>> 26);\\n b4 = (s[25] << 11) | (s[24] >>> 21);\\n b5 = (s[24] << 11) | (s[25] >>> 21);\\n b36 = (s[34] << 15) | (s[35] >>> 17);\\n b37 = (s[35] << 15) | (s[34] >>> 17);\\n b18 = (s[45] << 29) | (s[44] >>> 3);\\n b19 = (s[44] << 29) | (s[45] >>> 3);\\n b10 = (s[6] << 28) | (s[7] >>> 4);\\n b11 = (s[7] << 28) | (s[6] >>> 4);\\n b42 = (s[17] << 23) | (s[16] >>> 9);\\n b43 = (s[16] << 23) | (s[17] >>> 9);\\n b24 = (s[26] << 25) | (s[27] >>> 7);\\n b25 = (s[27] << 25) | (s[26] >>> 7);\\n b6 = (s[36] << 21) | (s[37] >>> 11);\\n b7 = (s[37] << 21) | (s[36] >>> 11);\\n b38 = (s[47] << 24) | (s[46] >>> 8);\\n b39 = (s[46] << 24) | (s[47] >>> 8);\\n b30 = (s[8] << 27) | (s[9] >>> 5);\\n b31 = (s[9] << 27) | (s[8] >>> 5);\\n b12 = (s[18] << 20) | (s[19] >>> 12);\\n b13 = (s[19] << 20) | (s[18] >>> 12);\\n b44 = (s[29] << 7) | (s[28] >>> 25);\\n b45 = (s[28] << 7) | (s[29] >>> 25);\\n b26 = (s[38] << 8) | (s[39] >>> 24);\\n b27 = (s[39] << 8) | (s[38] >>> 24);\\n b8 = (s[48] << 14) | (s[49] >>> 18);\\n b9 = (s[49] << 14) | (s[48] >>> 18);\\n\\n s[0] = b0 ^ (~b2 & b4);\\n s[1] = b1 ^ (~b3 & b5);\\n s[10] = b10 ^ (~b12 & b14);\\n s[11] = b11 ^ (~b13 & b15);\\n s[20] = b20 ^ (~b22 & b24);\\n s[21] = b21 ^ (~b23 & b25);\\n s[30] = b30 ^ (~b32 & b34);\\n s[31] = b31 ^ (~b33 & b35);\\n s[40] = b40 ^ (~b42 & b44);\\n s[41] = b41 ^ (~b43 & b45);\\n s[2] = b2 ^ (~b4 & b6);\\n s[3] = b3 ^ (~b5 & b7);\\n s[12] = b12 ^ (~b14 & b16);\\n s[13] = b13 ^ (~b15 & b17);\\n s[22] = b22 ^ (~b24 & b26);\\n s[23] = b23 ^ (~b25 & b27);\\n s[32] = b32 ^ (~b34 & b36);\\n s[33] = b33 ^ (~b35 & b37);\\n s[42] = b42 ^ (~b44 & b46);\\n s[43] = b43 ^ (~b45 & b47);\\n s[4] = b4 ^ (~b6 & b8);\\n s[5] = b5 ^ (~b7 & b9);\\n s[14] = b14 ^ (~b16 & b18);\\n s[15] = b15 ^ (~b17 & b19);\\n s[24] = b24 ^ (~b26 & b28);\\n s[25] = b25 ^ (~b27 & b29);\\n s[34] = b34 ^ (~b36 & b38);\\n s[35] = b35 ^ (~b37 & b39);\\n s[44] = b44 ^ (~b46 & b48);\\n s[45] = b45 ^ (~b47 & b49);\\n s[6] = b6 ^ (~b8 & b0);\\n s[7] = b7 ^ (~b9 & b1);\\n s[16] = b16 ^ (~b18 & b10);\\n s[17] = b17 ^ (~b19 & b11);\\n s[26] = b26 ^ (~b28 & b20);\\n s[27] = b27 ^ (~b29 & b21);\\n s[36] = b36 ^ (~b38 & b30);\\n s[37] = b37 ^ (~b39 & b31);\\n s[46] = b46 ^ (~b48 & b40);\\n s[47] = b47 ^ (~b49 & b41);\\n s[8] = b8 ^ (~b0 & b2);\\n s[9] = b9 ^ (~b1 & b3);\\n s[18] = b18 ^ (~b10 & b12);\\n s[19] = b19 ^ (~b11 & b13);\\n s[28] = b28 ^ (~b20 & b22);\\n s[29] = b29 ^ (~b21 & b23);\\n s[38] = b38 ^ (~b30 & b32);\\n s[39] = b39 ^ (~b31 & b33);\\n s[48] = b48 ^ (~b40 & b42);\\n s[49] = b49 ^ (~b41 & b43);\\n\\n s[0] ^= RC[n];\\n s[1] ^= RC[n + 1];\\n }\\n };\\n\\n if (COMMON_JS) {\\n module.exports = methods;\\n } else {\\n for (i = 0; i < methodNames.length; ++i) {\\n root[methodNames[i]] = methods[methodNames[i]];\\n }\\n if (AMD) {\\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\\n return methods;\\n }).call(exports, __webpack_require__, exports, module),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n }\\n }\\n})();\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/js-sha3/src/sha3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json ***!\n \\******************************************************************************/\n/*! exports provided: identity, ip4, tcp, sha1, sha2-256, sha2-512, sha3-512, sha3-384, sha3-256, sha3-224, shake-128, shake-256, keccak-224, keccak-256, keccak-384, keccak-512, dccp, murmur3-128, murmur3-32, ip6, ip6zone, path, multicodec, multihash, multiaddr, multibase, dns, dns4, dns6, dnsaddr, protobuf, cbor, raw, dbl-sha2-256, rlp, bencode, dag-pb, dag-cbor, libp2p-key, git-raw, torrent-info, torrent-file, leofcoin-block, leofcoin-tx, leofcoin-pr, sctp, eth-block, eth-block-list, eth-tx-trie, eth-tx, eth-tx-receipt-trie, eth-tx-receipt, eth-state-trie, eth-account-snapshot, eth-storage-trie, bitcoin-block, bitcoin-tx, zcash-block, zcash-tx, stellar-block, stellar-tx, md4, md5, bmt, decred-block, decred-tx, ipld-ns, ipfs-ns, swarm-ns, ipns-ns, zeronet, ed25519-pub, dash-block, dash-tx, swarm-manifest, swarm-feed, udp, p2p-webrtc-star, p2p-webrtc-direct, p2p-stardust, p2p-circuit, dag-json, udt, utp, unix, p2p, ipfs, https, onion, onion3, garlic64, garlic32, tls, quic, ws, wss, p2p-websocket-star, http, json, messagepack, x11, blake2b-8, blake2b-16, blake2b-24, blake2b-32, blake2b-40, blake2b-48, blake2b-56, blake2b-64, blake2b-72, blake2b-80, blake2b-88, blake2b-96, blake2b-104, blake2b-112, blake2b-120, blake2b-128, blake2b-136, blake2b-144, blake2b-152, blake2b-160, blake2b-168, blake2b-176, blake2b-184, blake2b-192, blake2b-200, blake2b-208, blake2b-216, blake2b-224, blake2b-232, blake2b-240, blake2b-248, blake2b-256, blake2b-264, blake2b-272, blake2b-280, blake2b-288, blake2b-296, blake2b-304, blake2b-312, blake2b-320, blake2b-328, blake2b-336, blake2b-344, blake2b-352, blake2b-360, blake2b-368, blake2b-376, blake2b-384, blake2b-392, blake2b-400, blake2b-408, blake2b-416, blake2b-424, blake2b-432, blake2b-440, blake2b-448, blake2b-456, blake2b-464, blake2b-472, blake2b-480, blake2b-488, blake2b-496, blake2b-504, blake2b-512, blake2s-8, blake2s-16, blake2s-24, blake2s-32, blake2s-40, blake2s-48, blake2s-56, blake2s-64, blake2s-72, blake2s-80, blake2s-88, blake2s-96, blake2s-104, blake2s-112, blake2s-120, blake2s-128, blake2s-136, blake2s-144, blake2s-152, blake2s-160, blake2s-168, blake2s-176, blake2s-184, blake2s-192, blake2s-200, blake2s-208, blake2s-216, blake2s-224, blake2s-232, blake2s-240, blake2s-248, blake2s-256, skein256-8, skein256-16, skein256-24, skein256-32, skein256-40, skein256-48, skein256-56, skein256-64, skein256-72, skein256-80, skein256-88, skein256-96, skein256-104, skein256-112, skein256-120, skein256-128, skein256-136, skein256-144, skein256-152, skein256-160, skein256-168, skein256-176, skein256-184, skein256-192, skein256-200, skein256-208, skein256-216, skein256-224, skein256-232, skein256-240, skein256-248, skein256-256, skein512-8, skein512-16, skein512-24, skein512-32, skein512-40, skein512-48, skein512-56, skein512-64, skein512-72, skein512-80, skein512-88, skein512-96, skein512-104, skein512-112, skein512-120, skein512-128, skein512-136, skein512-144, skein512-152, skein512-160, skein512-168, skein512-176, skein512-184, skein512-192, skein512-200, skein512-208, skein512-216, skein512-224, skein512-232, skein512-240, skein512-248, skein512-256, skein512-264, skein512-272, skein512-280, skein512-288, skein512-296, skein512-304, skein512-312, skein512-320, skein512-328, skein512-336, skein512-344, skein512-352, skein512-360, skein512-368, skein512-376, skein512-384, skein512-392, skein512-400, skein512-408, skein512-416, skein512-424, skein512-432, skein512-440, skein512-448, skein512-456, skein512-464, skein512-472, skein512-480, skein512-488, skein512-496, skein512-504, skein512-512, skein1024-8, skein1024-16, skein1024-24, skein1024-32, skein1024-40, skein1024-48, skein1024-56, skein1024-64, skein1024-72, skein1024-80, skein1024-88, skein1024-96, skein1024-104, skein1024-112, skein1024-120, skein1024-128, skein1024-136, skein1024-144, skein1024-152, skein1024-160, skein1024-168, skein1024-176, skein1024-184, skein1024-192, skein1024-200, skein1024-208, skein1024-216, skein1024-224, skein1024-232, skein1024-240, skein1024-248, skein1024-256, skein1024-264, skein1024-272, skein1024-280, skein1024-288, skein1024-296, skein1024-304, skein1024-312, skein1024-320, skein1024-328, skein1024-336, skein1024-344, skein1024-352, skein1024-360, skein1024-368, skein1024-376, skein1024-384, skein1024-392, skein1024-400, skein1024-408, skein1024-416, skein1024-424, skein1024-432, skein1024-440, skein1024-448, skein1024-456, skein1024-464, skein1024-472, skein1024-480, skein1024-488, skein1024-496, skein1024-504, skein1024-512, skein1024-520, skein1024-528, skein1024-536, skein1024-544, skein1024-552, skein1024-560, skein1024-568, skein1024-576, skein1024-584, skein1024-592, skein1024-600, skein1024-608, skein1024-616, skein1024-624, skein1024-632, skein1024-640, skein1024-648, skein1024-656, skein1024-664, skein1024-672, skein1024-680, skein1024-688, skein1024-696, skein1024-704, skein1024-712, skein1024-720, skein1024-728, skein1024-736, skein1024-744, skein1024-752, skein1024-760, skein1024-768, skein1024-776, skein1024-784, skein1024-792, skein1024-800, skein1024-808, skein1024-816, skein1024-824, skein1024-832, skein1024-840, skein1024-848, skein1024-856, skein1024-864, skein1024-872, skein1024-880, skein1024-888, skein1024-896, skein1024-904, skein1024-912, skein1024-920, skein1024-928, skein1024-936, skein1024-944, skein1024-952, skein1024-960, skein1024-968, skein1024-976, skein1024-984, skein1024-992, skein1024-1000, skein1024-1008, skein1024-1016, skein1024-1024, holochain-adr-v0, holochain-adr-v1, holochain-key-v0, holochain-key-v1, holochain-sig-v0, holochain-sig-v1, default */\n/***/ (function(module) {\n\neval(\"module.exports = {\\\"identity\\\":0,\\\"ip4\\\":4,\\\"tcp\\\":6,\\\"sha1\\\":17,\\\"sha2-256\\\":18,\\\"sha2-512\\\":19,\\\"sha3-512\\\":20,\\\"sha3-384\\\":21,\\\"sha3-256\\\":22,\\\"sha3-224\\\":23,\\\"shake-128\\\":24,\\\"shake-256\\\":25,\\\"keccak-224\\\":26,\\\"keccak-256\\\":27,\\\"keccak-384\\\":28,\\\"keccak-512\\\":29,\\\"dccp\\\":33,\\\"murmur3-128\\\":34,\\\"murmur3-32\\\":35,\\\"ip6\\\":41,\\\"ip6zone\\\":42,\\\"path\\\":47,\\\"multicodec\\\":48,\\\"multihash\\\":49,\\\"multiaddr\\\":50,\\\"multibase\\\":51,\\\"dns\\\":53,\\\"dns4\\\":54,\\\"dns6\\\":55,\\\"dnsaddr\\\":56,\\\"protobuf\\\":80,\\\"cbor\\\":81,\\\"raw\\\":85,\\\"dbl-sha2-256\\\":86,\\\"rlp\\\":96,\\\"bencode\\\":99,\\\"dag-pb\\\":112,\\\"dag-cbor\\\":113,\\\"libp2p-key\\\":114,\\\"git-raw\\\":120,\\\"torrent-info\\\":123,\\\"torrent-file\\\":124,\\\"leofcoin-block\\\":129,\\\"leofcoin-tx\\\":130,\\\"leofcoin-pr\\\":131,\\\"sctp\\\":132,\\\"eth-block\\\":144,\\\"eth-block-list\\\":145,\\\"eth-tx-trie\\\":146,\\\"eth-tx\\\":147,\\\"eth-tx-receipt-trie\\\":148,\\\"eth-tx-receipt\\\":149,\\\"eth-state-trie\\\":150,\\\"eth-account-snapshot\\\":151,\\\"eth-storage-trie\\\":152,\\\"bitcoin-block\\\":176,\\\"bitcoin-tx\\\":177,\\\"zcash-block\\\":192,\\\"zcash-tx\\\":193,\\\"stellar-block\\\":208,\\\"stellar-tx\\\":209,\\\"md4\\\":212,\\\"md5\\\":213,\\\"bmt\\\":214,\\\"decred-block\\\":224,\\\"decred-tx\\\":225,\\\"ipld-ns\\\":226,\\\"ipfs-ns\\\":227,\\\"swarm-ns\\\":228,\\\"ipns-ns\\\":229,\\\"zeronet\\\":230,\\\"ed25519-pub\\\":237,\\\"dash-block\\\":240,\\\"dash-tx\\\":241,\\\"swarm-manifest\\\":250,\\\"swarm-feed\\\":251,\\\"udp\\\":273,\\\"p2p-webrtc-star\\\":275,\\\"p2p-webrtc-direct\\\":276,\\\"p2p-stardust\\\":277,\\\"p2p-circuit\\\":290,\\\"dag-json\\\":297,\\\"udt\\\":301,\\\"utp\\\":302,\\\"unix\\\":400,\\\"p2p\\\":421,\\\"ipfs\\\":421,\\\"https\\\":443,\\\"onion\\\":444,\\\"onion3\\\":445,\\\"garlic64\\\":446,\\\"garlic32\\\":447,\\\"tls\\\":448,\\\"quic\\\":460,\\\"ws\\\":477,\\\"wss\\\":478,\\\"p2p-websocket-star\\\":479,\\\"http\\\":480,\\\"json\\\":512,\\\"messagepack\\\":513,\\\"x11\\\":4352,\\\"blake2b-8\\\":45569,\\\"blake2b-16\\\":45570,\\\"blake2b-24\\\":45571,\\\"blake2b-32\\\":45572,\\\"blake2b-40\\\":45573,\\\"blake2b-48\\\":45574,\\\"blake2b-56\\\":45575,\\\"blake2b-64\\\":45576,\\\"blake2b-72\\\":45577,\\\"blake2b-80\\\":45578,\\\"blake2b-88\\\":45579,\\\"blake2b-96\\\":45580,\\\"blake2b-104\\\":45581,\\\"blake2b-112\\\":45582,\\\"blake2b-120\\\":45583,\\\"blake2b-128\\\":45584,\\\"blake2b-136\\\":45585,\\\"blake2b-144\\\":45586,\\\"blake2b-152\\\":45587,\\\"blake2b-160\\\":45588,\\\"blake2b-168\\\":45589,\\\"blake2b-176\\\":45590,\\\"blake2b-184\\\":45591,\\\"blake2b-192\\\":45592,\\\"blake2b-200\\\":45593,\\\"blake2b-208\\\":45594,\\\"blake2b-216\\\":45595,\\\"blake2b-224\\\":45596,\\\"blake2b-232\\\":45597,\\\"blake2b-240\\\":45598,\\\"blake2b-248\\\":45599,\\\"blake2b-256\\\":45600,\\\"blake2b-264\\\":45601,\\\"blake2b-272\\\":45602,\\\"blake2b-280\\\":45603,\\\"blake2b-288\\\":45604,\\\"blake2b-296\\\":45605,\\\"blake2b-304\\\":45606,\\\"blake2b-312\\\":45607,\\\"blake2b-320\\\":45608,\\\"blake2b-328\\\":45609,\\\"blake2b-336\\\":45610,\\\"blake2b-344\\\":45611,\\\"blake2b-352\\\":45612,\\\"blake2b-360\\\":45613,\\\"blake2b-368\\\":45614,\\\"blake2b-376\\\":45615,\\\"blake2b-384\\\":45616,\\\"blake2b-392\\\":45617,\\\"blake2b-400\\\":45618,\\\"blake2b-408\\\":45619,\\\"blake2b-416\\\":45620,\\\"blake2b-424\\\":45621,\\\"blake2b-432\\\":45622,\\\"blake2b-440\\\":45623,\\\"blake2b-448\\\":45624,\\\"blake2b-456\\\":45625,\\\"blake2b-464\\\":45626,\\\"blake2b-472\\\":45627,\\\"blake2b-480\\\":45628,\\\"blake2b-488\\\":45629,\\\"blake2b-496\\\":45630,\\\"blake2b-504\\\":45631,\\\"blake2b-512\\\":45632,\\\"blake2s-8\\\":45633,\\\"blake2s-16\\\":45634,\\\"blake2s-24\\\":45635,\\\"blake2s-32\\\":45636,\\\"blake2s-40\\\":45637,\\\"blake2s-48\\\":45638,\\\"blake2s-56\\\":45639,\\\"blake2s-64\\\":45640,\\\"blake2s-72\\\":45641,\\\"blake2s-80\\\":45642,\\\"blake2s-88\\\":45643,\\\"blake2s-96\\\":45644,\\\"blake2s-104\\\":45645,\\\"blake2s-112\\\":45646,\\\"blake2s-120\\\":45647,\\\"blake2s-128\\\":45648,\\\"blake2s-136\\\":45649,\\\"blake2s-144\\\":45650,\\\"blake2s-152\\\":45651,\\\"blake2s-160\\\":45652,\\\"blake2s-168\\\":45653,\\\"blake2s-176\\\":45654,\\\"blake2s-184\\\":45655,\\\"blake2s-192\\\":45656,\\\"blake2s-200\\\":45657,\\\"blake2s-208\\\":45658,\\\"blake2s-216\\\":45659,\\\"blake2s-224\\\":45660,\\\"blake2s-232\\\":45661,\\\"blake2s-240\\\":45662,\\\"blake2s-248\\\":45663,\\\"blake2s-256\\\":45664,\\\"skein256-8\\\":45825,\\\"skein256-16\\\":45826,\\\"skein256-24\\\":45827,\\\"skein256-32\\\":45828,\\\"skein256-40\\\":45829,\\\"skein256-48\\\":45830,\\\"skein256-56\\\":45831,\\\"skein256-64\\\":45832,\\\"skein256-72\\\":45833,\\\"skein256-80\\\":45834,\\\"skein256-88\\\":45835,\\\"skein256-96\\\":45836,\\\"skein256-104\\\":45837,\\\"skein256-112\\\":45838,\\\"skein256-120\\\":45839,\\\"skein256-128\\\":45840,\\\"skein256-136\\\":45841,\\\"skein256-144\\\":45842,\\\"skein256-152\\\":45843,\\\"skein256-160\\\":45844,\\\"skein256-168\\\":45845,\\\"skein256-176\\\":45846,\\\"skein256-184\\\":45847,\\\"skein256-192\\\":45848,\\\"skein256-200\\\":45849,\\\"skein256-208\\\":45850,\\\"skein256-216\\\":45851,\\\"skein256-224\\\":45852,\\\"skein256-232\\\":45853,\\\"skein256-240\\\":45854,\\\"skein256-248\\\":45855,\\\"skein256-256\\\":45856,\\\"skein512-8\\\":45857,\\\"skein512-16\\\":45858,\\\"skein512-24\\\":45859,\\\"skein512-32\\\":45860,\\\"skein512-40\\\":45861,\\\"skein512-48\\\":45862,\\\"skein512-56\\\":45863,\\\"skein512-64\\\":45864,\\\"skein512-72\\\":45865,\\\"skein512-80\\\":45866,\\\"skein512-88\\\":45867,\\\"skein512-96\\\":45868,\\\"skein512-104\\\":45869,\\\"skein512-112\\\":45870,\\\"skein512-120\\\":45871,\\\"skein512-128\\\":45872,\\\"skein512-136\\\":45873,\\\"skein512-144\\\":45874,\\\"skein512-152\\\":45875,\\\"skein512-160\\\":45876,\\\"skein512-168\\\":45877,\\\"skein512-176\\\":45878,\\\"skein512-184\\\":45879,\\\"skein512-192\\\":45880,\\\"skein512-200\\\":45881,\\\"skein512-208\\\":45882,\\\"skein512-216\\\":45883,\\\"skein512-224\\\":45884,\\\"skein512-232\\\":45885,\\\"skein512-240\\\":45886,\\\"skein512-248\\\":45887,\\\"skein512-256\\\":45888,\\\"skein512-264\\\":45889,\\\"skein512-272\\\":45890,\\\"skein512-280\\\":45891,\\\"skein512-288\\\":45892,\\\"skein512-296\\\":45893,\\\"skein512-304\\\":45894,\\\"skein512-312\\\":45895,\\\"skein512-320\\\":45896,\\\"skein512-328\\\":45897,\\\"skein512-336\\\":45898,\\\"skein512-344\\\":45899,\\\"skein512-352\\\":45900,\\\"skein512-360\\\":45901,\\\"skein512-368\\\":45902,\\\"skein512-376\\\":45903,\\\"skein512-384\\\":45904,\\\"skein512-392\\\":45905,\\\"skein512-400\\\":45906,\\\"skein512-408\\\":45907,\\\"skein512-416\\\":45908,\\\"skein512-424\\\":45909,\\\"skein512-432\\\":45910,\\\"skein512-440\\\":45911,\\\"skein512-448\\\":45912,\\\"skein512-456\\\":45913,\\\"skein512-464\\\":45914,\\\"skein512-472\\\":45915,\\\"skein512-480\\\":45916,\\\"skein512-488\\\":45917,\\\"skein512-496\\\":45918,\\\"skein512-504\\\":45919,\\\"skein512-512\\\":45920,\\\"skein1024-8\\\":45921,\\\"skein1024-16\\\":45922,\\\"skein1024-24\\\":45923,\\\"skein1024-32\\\":45924,\\\"skein1024-40\\\":45925,\\\"skein1024-48\\\":45926,\\\"skein1024-56\\\":45927,\\\"skein1024-64\\\":45928,\\\"skein1024-72\\\":45929,\\\"skein1024-80\\\":45930,\\\"skein1024-88\\\":45931,\\\"skein1024-96\\\":45932,\\\"skein1024-104\\\":45933,\\\"skein1024-112\\\":45934,\\\"skein1024-120\\\":45935,\\\"skein1024-128\\\":45936,\\\"skein1024-136\\\":45937,\\\"skein1024-144\\\":45938,\\\"skein1024-152\\\":45939,\\\"skein1024-160\\\":45940,\\\"skein1024-168\\\":45941,\\\"skein1024-176\\\":45942,\\\"skein1024-184\\\":45943,\\\"skein1024-192\\\":45944,\\\"skein1024-200\\\":45945,\\\"skein1024-208\\\":45946,\\\"skein1024-216\\\":45947,\\\"skein1024-224\\\":45948,\\\"skein1024-232\\\":45949,\\\"skein1024-240\\\":45950,\\\"skein1024-248\\\":45951,\\\"skein1024-256\\\":45952,\\\"skein1024-264\\\":45953,\\\"skein1024-272\\\":45954,\\\"skein1024-280\\\":45955,\\\"skein1024-288\\\":45956,\\\"skein1024-296\\\":45957,\\\"skein1024-304\\\":45958,\\\"skein1024-312\\\":45959,\\\"skein1024-320\\\":45960,\\\"skein1024-328\\\":45961,\\\"skein1024-336\\\":45962,\\\"skein1024-344\\\":45963,\\\"skein1024-352\\\":45964,\\\"skein1024-360\\\":45965,\\\"skein1024-368\\\":45966,\\\"skein1024-376\\\":45967,\\\"skein1024-384\\\":45968,\\\"skein1024-392\\\":45969,\\\"skein1024-400\\\":45970,\\\"skein1024-408\\\":45971,\\\"skein1024-416\\\":45972,\\\"skein1024-424\\\":45973,\\\"skein1024-432\\\":45974,\\\"skein1024-440\\\":45975,\\\"skein1024-448\\\":45976,\\\"skein1024-456\\\":45977,\\\"skein1024-464\\\":45978,\\\"skein1024-472\\\":45979,\\\"skein1024-480\\\":45980,\\\"skein1024-488\\\":45981,\\\"skein1024-496\\\":45982,\\\"skein1024-504\\\":45983,\\\"skein1024-512\\\":45984,\\\"skein1024-520\\\":45985,\\\"skein1024-528\\\":45986,\\\"skein1024-536\\\":45987,\\\"skein1024-544\\\":45988,\\\"skein1024-552\\\":45989,\\\"skein1024-560\\\":45990,\\\"skein1024-568\\\":45991,\\\"skein1024-576\\\":45992,\\\"skein1024-584\\\":45993,\\\"skein1024-592\\\":45994,\\\"skein1024-600\\\":45995,\\\"skein1024-608\\\":45996,\\\"skein1024-616\\\":45997,\\\"skein1024-624\\\":45998,\\\"skein1024-632\\\":45999,\\\"skein1024-640\\\":46000,\\\"skein1024-648\\\":46001,\\\"skein1024-656\\\":46002,\\\"skein1024-664\\\":46003,\\\"skein1024-672\\\":46004,\\\"skein1024-680\\\":46005,\\\"skein1024-688\\\":46006,\\\"skein1024-696\\\":46007,\\\"skein1024-704\\\":46008,\\\"skein1024-712\\\":46009,\\\"skein1024-720\\\":46010,\\\"skein1024-728\\\":46011,\\\"skein1024-736\\\":46012,\\\"skein1024-744\\\":46013,\\\"skein1024-752\\\":46014,\\\"skein1024-760\\\":46015,\\\"skein1024-768\\\":46016,\\\"skein1024-776\\\":46017,\\\"skein1024-784\\\":46018,\\\"skein1024-792\\\":46019,\\\"skein1024-800\\\":46020,\\\"skein1024-808\\\":46021,\\\"skein1024-816\\\":46022,\\\"skein1024-824\\\":46023,\\\"skein1024-832\\\":46024,\\\"skein1024-840\\\":46025,\\\"skein1024-848\\\":46026,\\\"skein1024-856\\\":46027,\\\"skein1024-864\\\":46028,\\\"skein1024-872\\\":46029,\\\"skein1024-880\\\":46030,\\\"skein1024-888\\\":46031,\\\"skein1024-896\\\":46032,\\\"skein1024-904\\\":46033,\\\"skein1024-912\\\":46034,\\\"skein1024-920\\\":46035,\\\"skein1024-928\\\":46036,\\\"skein1024-936\\\":46037,\\\"skein1024-944\\\":46038,\\\"skein1024-952\\\":46039,\\\"skein1024-960\\\":46040,\\\"skein1024-968\\\":46041,\\\"skein1024-976\\\":46042,\\\"skein1024-984\\\":46043,\\\"skein1024-992\\\":46044,\\\"skein1024-1000\\\":46045,\\\"skein1024-1008\\\":46046,\\\"skein1024-1016\\\":46047,\\\"skein1024-1024\\\":46048,\\\"holochain-adr-v0\\\":8417572,\\\"holochain-adr-v1\\\":8483108,\\\"holochain-key-v0\\\":9728292,\\\"holochain-key-v1\\\":9793828,\\\"holochain-sig-v0\\\":10645796,\\\"holochain-sig-v1\\\":10711332};\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/constants.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/constants.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst table = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for codecConstant -> code\\nconst constants = {}\\n\\nfor (const [name, code] of Object.entries(table)) {\\n constants[name.toUpperCase().replace(/-/g, '_')] = code\\n}\\n\\nmodule.exports = Object.freeze(constants)\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Implementation of the multicodec specification.\\n *\\n * @module multicodec\\n * @example\\n * const multicodec = require('multicodec')\\n *\\n * const prefixedProtobuf = multicodec.addPrefix('protobuf', protobufBuffer)\\n * // prefixedProtobuf 0x50...\\n *\\n */\\n\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nconst intTable = __webpack_require__(/*! ./int-table */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/int-table.js\\\")\\nconst codecNameToCodeVarint = __webpack_require__(/*! ./varint-table */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/varint-table.js\\\")\\nconst util = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js\\\")\\n\\nexports = module.exports\\n\\n/**\\n * Prefix a buffer with a multicodec-packed.\\n *\\n * @param {string|number} multicodecStrOrCode\\n * @param {Buffer} data\\n * @returns {Buffer}\\n */\\nexports.addPrefix = (multicodecStrOrCode, data) => {\\n let prefix\\n\\n if (Buffer.isBuffer(multicodecStrOrCode)) {\\n prefix = util.varintBufferEncode(multicodecStrOrCode)\\n } else {\\n if (codecNameToCodeVarint[multicodecStrOrCode]) {\\n prefix = codecNameToCodeVarint[multicodecStrOrCode]\\n } else {\\n throw new Error('multicodec not recognized')\\n }\\n }\\n return Buffer.concat([prefix, data])\\n}\\n\\n/**\\n * Decapsulate the multicodec-packed prefix from the data.\\n *\\n * @param {Buffer} data\\n * @returns {Buffer}\\n */\\nexports.rmPrefix = (data) => {\\n varint.decode(data)\\n return data.slice(varint.decode.bytes)\\n}\\n\\n/**\\n * Get the codec of the prefixed data.\\n * @param {Buffer} prefixedData\\n * @returns {string}\\n */\\nexports.getCodec = (prefixedData) => {\\n const code = varint.decode(prefixedData)\\n const codecName = intTable.get(code)\\n if (codecName === undefined) {\\n throw new Error(`Code ${code} not found`)\\n }\\n return codecName\\n}\\n\\n/**\\n * Get the name of the codec.\\n * @param {number} codec\\n * @returns {string}\\n */\\nexports.getName = (codec) => {\\n return intTable.get(codec)\\n}\\n\\n/**\\n * Get the code of the codec\\n * @param {string} name\\n * @returns {number}\\n */\\nexports.getNumber = (name) => {\\n const code = codecNameToCodeVarint[name]\\n if (code === undefined) {\\n throw new Error('Codec `' + name + '` not found')\\n }\\n return util.varintBufferDecode(code)[0]\\n}\\n\\n/**\\n * Get the code of the prefixed data.\\n * @param {Buffer} prefixedData\\n * @returns {number}\\n */\\nexports.getCode = (prefixedData) => {\\n return varint.decode(prefixedData)\\n}\\n\\n/**\\n * Get the code as varint of a codec name.\\n * @param {string} codecName\\n * @returns {Buffer}\\n */\\nexports.getCodeVarint = (codecName) => {\\n const code = codecNameToCodeVarint[codecName]\\n if (code === undefined) {\\n throw new Error('Codec `' + codecName + '` not found')\\n }\\n return code\\n}\\n\\n/**\\n * Get the varint of a code.\\n * @param {Number} code\\n * @returns {Array.<number>}\\n */\\nexports.getVarint = (code) => {\\n return varint.encode(code)\\n}\\n\\n// Make the constants top-level constants\\nconst constants = __webpack_require__(/*! ./constants */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/constants.js\\\")\\nObject.assign(exports, constants)\\n\\n// Human friendly names for printing, e.g. in error messages\\nexports.print = __webpack_require__(/*! ./print */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/print.js\\\")\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/int-table.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/int-table.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nconst baseTable = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for hexString -> codecName\\nconst nameTable = new Map()\\n\\nfor (const encodingName in baseTable) {\\n const code = baseTable[encodingName]\\n nameTable.set(code, encodingName)\\n}\\n\\nmodule.exports = Object.freeze(nameTable)\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/int-table.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/print.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/print.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst table = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for code -> print friendly name\\nconst tableByCode = {}\\n\\nfor (const [name, code] of Object.entries(table)) {\\n if (tableByCode[code] === undefined) tableByCode[code] = name\\n}\\n\\nmodule.exports = Object.freeze(tableByCode)\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/print.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nmodule.exports = {\\n numberToBuffer,\\n bufferToNumber,\\n varintBufferEncode,\\n varintBufferDecode,\\n varintEncode\\n}\\n\\nfunction bufferToNumber (buf) {\\n return parseInt(buf.toString('hex'), 16)\\n}\\n\\nfunction numberToBuffer (num) {\\n let hexString = num.toString(16)\\n if (hexString.length % 2 === 1) {\\n hexString = '0' + hexString\\n }\\n return Buffer.from(hexString, 'hex')\\n}\\n\\nfunction varintBufferEncode (input) {\\n return Buffer.from(varint.encode(bufferToNumber(input)))\\n}\\n\\nfunction varintBufferDecode (input) {\\n return numberToBuffer(varint.decode(input))\\n}\\n\\nfunction varintEncode (num) {\\n return Buffer.from(varint.encode(num))\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/varint-table.js\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/varint-table.js ***!\n \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst baseTable = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\nconst varintEncode = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js\\\").varintEncode\\n\\n// map for codecName -> codeVarintBuffer\\nconst varintTable = {}\\n\\nfor (const encodingName in baseTable) {\\n const code = baseTable[encodingName]\\n varintTable[encodingName] = varintEncode(code)\\n}\\n\\nmodule.exports = Object.freeze(varintTable)\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/varint-table.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashes/src/constants.js\":\n/*!****************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashes/src/constants.js ***!\n \\****************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* eslint quote-props: off */\\n/* eslint key-spacing: off */\\n\\n\\nexports.names = Object.freeze({\\n 'identity': 0x0,\\n 'sha1': 0x11,\\n 'sha2-256': 0x12,\\n 'sha2-512': 0x13,\\n 'dbl-sha2-256': 0x56,\\n 'sha3-224': 0x17,\\n 'sha3-256': 0x16,\\n 'sha3-384': 0x15,\\n 'sha3-512': 0x14,\\n 'shake-128': 0x18,\\n 'shake-256': 0x19,\\n 'keccak-224': 0x1A,\\n 'keccak-256': 0x1B,\\n 'keccak-384': 0x1C,\\n 'keccak-512': 0x1D,\\n 'murmur3-128': 0x22,\\n 'murmur3-32': 0x23,\\n 'blake2b-8': 0xb201,\\n 'blake2b-16': 0xb202,\\n 'blake2b-24': 0xb203,\\n 'blake2b-32': 0xb204,\\n 'blake2b-40': 0xb205,\\n 'blake2b-48': 0xb206,\\n 'blake2b-56': 0xb207,\\n 'blake2b-64': 0xb208,\\n 'blake2b-72': 0xb209,\\n 'blake2b-80': 0xb20a,\\n 'blake2b-88': 0xb20b,\\n 'blake2b-96': 0xb20c,\\n 'blake2b-104': 0xb20d,\\n 'blake2b-112': 0xb20e,\\n 'blake2b-120': 0xb20f,\\n 'blake2b-128': 0xb210,\\n 'blake2b-136': 0xb211,\\n 'blake2b-144': 0xb212,\\n 'blake2b-152': 0xb213,\\n 'blake2b-160': 0xb214,\\n 'blake2b-168': 0xb215,\\n 'blake2b-176': 0xb216,\\n 'blake2b-184': 0xb217,\\n 'blake2b-192': 0xb218,\\n 'blake2b-200': 0xb219,\\n 'blake2b-208': 0xb21a,\\n 'blake2b-216': 0xb21b,\\n 'blake2b-224': 0xb21c,\\n 'blake2b-232': 0xb21d,\\n 'blake2b-240': 0xb21e,\\n 'blake2b-248': 0xb21f,\\n 'blake2b-256': 0xb220,\\n 'blake2b-264': 0xb221,\\n 'blake2b-272': 0xb222,\\n 'blake2b-280': 0xb223,\\n 'blake2b-288': 0xb224,\\n 'blake2b-296': 0xb225,\\n 'blake2b-304': 0xb226,\\n 'blake2b-312': 0xb227,\\n 'blake2b-320': 0xb228,\\n 'blake2b-328': 0xb229,\\n 'blake2b-336': 0xb22a,\\n 'blake2b-344': 0xb22b,\\n 'blake2b-352': 0xb22c,\\n 'blake2b-360': 0xb22d,\\n 'blake2b-368': 0xb22e,\\n 'blake2b-376': 0xb22f,\\n 'blake2b-384': 0xb230,\\n 'blake2b-392': 0xb231,\\n 'blake2b-400': 0xb232,\\n 'blake2b-408': 0xb233,\\n 'blake2b-416': 0xb234,\\n 'blake2b-424': 0xb235,\\n 'blake2b-432': 0xb236,\\n 'blake2b-440': 0xb237,\\n 'blake2b-448': 0xb238,\\n 'blake2b-456': 0xb239,\\n 'blake2b-464': 0xb23a,\\n 'blake2b-472': 0xb23b,\\n 'blake2b-480': 0xb23c,\\n 'blake2b-488': 0xb23d,\\n 'blake2b-496': 0xb23e,\\n 'blake2b-504': 0xb23f,\\n 'blake2b-512': 0xb240,\\n 'blake2s-8': 0xb241,\\n 'blake2s-16': 0xb242,\\n 'blake2s-24': 0xb243,\\n 'blake2s-32': 0xb244,\\n 'blake2s-40': 0xb245,\\n 'blake2s-48': 0xb246,\\n 'blake2s-56': 0xb247,\\n 'blake2s-64': 0xb248,\\n 'blake2s-72': 0xb249,\\n 'blake2s-80': 0xb24a,\\n 'blake2s-88': 0xb24b,\\n 'blake2s-96': 0xb24c,\\n 'blake2s-104': 0xb24d,\\n 'blake2s-112': 0xb24e,\\n 'blake2s-120': 0xb24f,\\n 'blake2s-128': 0xb250,\\n 'blake2s-136': 0xb251,\\n 'blake2s-144': 0xb252,\\n 'blake2s-152': 0xb253,\\n 'blake2s-160': 0xb254,\\n 'blake2s-168': 0xb255,\\n 'blake2s-176': 0xb256,\\n 'blake2s-184': 0xb257,\\n 'blake2s-192': 0xb258,\\n 'blake2s-200': 0xb259,\\n 'blake2s-208': 0xb25a,\\n 'blake2s-216': 0xb25b,\\n 'blake2s-224': 0xb25c,\\n 'blake2s-232': 0xb25d,\\n 'blake2s-240': 0xb25e,\\n 'blake2s-248': 0xb25f,\\n 'blake2s-256': 0xb260,\\n 'Skein256-8': 0xb301,\\n 'Skein256-16': 0xb302,\\n 'Skein256-24': 0xb303,\\n 'Skein256-32': 0xb304,\\n 'Skein256-40': 0xb305,\\n 'Skein256-48': 0xb306,\\n 'Skein256-56': 0xb307,\\n 'Skein256-64': 0xb308,\\n 'Skein256-72': 0xb309,\\n 'Skein256-80': 0xb30a,\\n 'Skein256-88': 0xb30b,\\n 'Skein256-96': 0xb30c,\\n 'Skein256-104': 0xb30d,\\n 'Skein256-112': 0xb30e,\\n 'Skein256-120': 0xb30f,\\n 'Skein256-128': 0xb310,\\n 'Skein256-136': 0xb311,\\n 'Skein256-144': 0xb312,\\n 'Skein256-152': 0xb313,\\n 'Skein256-160': 0xb314,\\n 'Skein256-168': 0xb315,\\n 'Skein256-176': 0xb316,\\n 'Skein256-184': 0xb317,\\n 'Skein256-192': 0xb318,\\n 'Skein256-200': 0xb319,\\n 'Skein256-208': 0xb31a,\\n 'Skein256-216': 0xb31b,\\n 'Skein256-224': 0xb31c,\\n 'Skein256-232': 0xb31d,\\n 'Skein256-240': 0xb31e,\\n 'Skein256-248': 0xb31f,\\n 'Skein256-256': 0xb320,\\n 'Skein512-8': 0xb321,\\n 'Skein512-16': 0xb322,\\n 'Skein512-24': 0xb323,\\n 'Skein512-32': 0xb324,\\n 'Skein512-40': 0xb325,\\n 'Skein512-48': 0xb326,\\n 'Skein512-56': 0xb327,\\n 'Skein512-64': 0xb328,\\n 'Skein512-72': 0xb329,\\n 'Skein512-80': 0xb32a,\\n 'Skein512-88': 0xb32b,\\n 'Skein512-96': 0xb32c,\\n 'Skein512-104': 0xb32d,\\n 'Skein512-112': 0xb32e,\\n 'Skein512-120': 0xb32f,\\n 'Skein512-128': 0xb330,\\n 'Skein512-136': 0xb331,\\n 'Skein512-144': 0xb332,\\n 'Skein512-152': 0xb333,\\n 'Skein512-160': 0xb334,\\n 'Skein512-168': 0xb335,\\n 'Skein512-176': 0xb336,\\n 'Skein512-184': 0xb337,\\n 'Skein512-192': 0xb338,\\n 'Skein512-200': 0xb339,\\n 'Skein512-208': 0xb33a,\\n 'Skein512-216': 0xb33b,\\n 'Skein512-224': 0xb33c,\\n 'Skein512-232': 0xb33d,\\n 'Skein512-240': 0xb33e,\\n 'Skein512-248': 0xb33f,\\n 'Skein512-256': 0xb340,\\n 'Skein512-264': 0xb341,\\n 'Skein512-272': 0xb342,\\n 'Skein512-280': 0xb343,\\n 'Skein512-288': 0xb344,\\n 'Skein512-296': 0xb345,\\n 'Skein512-304': 0xb346,\\n 'Skein512-312': 0xb347,\\n 'Skein512-320': 0xb348,\\n 'Skein512-328': 0xb349,\\n 'Skein512-336': 0xb34a,\\n 'Skein512-344': 0xb34b,\\n 'Skein512-352': 0xb34c,\\n 'Skein512-360': 0xb34d,\\n 'Skein512-368': 0xb34e,\\n 'Skein512-376': 0xb34f,\\n 'Skein512-384': 0xb350,\\n 'Skein512-392': 0xb351,\\n 'Skein512-400': 0xb352,\\n 'Skein512-408': 0xb353,\\n 'Skein512-416': 0xb354,\\n 'Skein512-424': 0xb355,\\n 'Skein512-432': 0xb356,\\n 'Skein512-440': 0xb357,\\n 'Skein512-448': 0xb358,\\n 'Skein512-456': 0xb359,\\n 'Skein512-464': 0xb35a,\\n 'Skein512-472': 0xb35b,\\n 'Skein512-480': 0xb35c,\\n 'Skein512-488': 0xb35d,\\n 'Skein512-496': 0xb35e,\\n 'Skein512-504': 0xb35f,\\n 'Skein512-512': 0xb360,\\n 'Skein1024-8': 0xb361,\\n 'Skein1024-16': 0xb362,\\n 'Skein1024-24': 0xb363,\\n 'Skein1024-32': 0xb364,\\n 'Skein1024-40': 0xb365,\\n 'Skein1024-48': 0xb366,\\n 'Skein1024-56': 0xb367,\\n 'Skein1024-64': 0xb368,\\n 'Skein1024-72': 0xb369,\\n 'Skein1024-80': 0xb36a,\\n 'Skein1024-88': 0xb36b,\\n 'Skein1024-96': 0xb36c,\\n 'Skein1024-104': 0xb36d,\\n 'Skein1024-112': 0xb36e,\\n 'Skein1024-120': 0xb36f,\\n 'Skein1024-128': 0xb370,\\n 'Skein1024-136': 0xb371,\\n 'Skein1024-144': 0xb372,\\n 'Skein1024-152': 0xb373,\\n 'Skein1024-160': 0xb374,\\n 'Skein1024-168': 0xb375,\\n 'Skein1024-176': 0xb376,\\n 'Skein1024-184': 0xb377,\\n 'Skein1024-192': 0xb378,\\n 'Skein1024-200': 0xb379,\\n 'Skein1024-208': 0xb37a,\\n 'Skein1024-216': 0xb37b,\\n 'Skein1024-224': 0xb37c,\\n 'Skein1024-232': 0xb37d,\\n 'Skein1024-240': 0xb37e,\\n 'Skein1024-248': 0xb37f,\\n 'Skein1024-256': 0xb380,\\n 'Skein1024-264': 0xb381,\\n 'Skein1024-272': 0xb382,\\n 'Skein1024-280': 0xb383,\\n 'Skein1024-288': 0xb384,\\n 'Skein1024-296': 0xb385,\\n 'Skein1024-304': 0xb386,\\n 'Skein1024-312': 0xb387,\\n 'Skein1024-320': 0xb388,\\n 'Skein1024-328': 0xb389,\\n 'Skein1024-336': 0xb38a,\\n 'Skein1024-344': 0xb38b,\\n 'Skein1024-352': 0xb38c,\\n 'Skein1024-360': 0xb38d,\\n 'Skein1024-368': 0xb38e,\\n 'Skein1024-376': 0xb38f,\\n 'Skein1024-384': 0xb390,\\n 'Skein1024-392': 0xb391,\\n 'Skein1024-400': 0xb392,\\n 'Skein1024-408': 0xb393,\\n 'Skein1024-416': 0xb394,\\n 'Skein1024-424': 0xb395,\\n 'Skein1024-432': 0xb396,\\n 'Skein1024-440': 0xb397,\\n 'Skein1024-448': 0xb398,\\n 'Skein1024-456': 0xb399,\\n 'Skein1024-464': 0xb39a,\\n 'Skein1024-472': 0xb39b,\\n 'Skein1024-480': 0xb39c,\\n 'Skein1024-488': 0xb39d,\\n 'Skein1024-496': 0xb39e,\\n 'Skein1024-504': 0xb39f,\\n 'Skein1024-512': 0xb3a0,\\n 'Skein1024-520': 0xb3a1,\\n 'Skein1024-528': 0xb3a2,\\n 'Skein1024-536': 0xb3a3,\\n 'Skein1024-544': 0xb3a4,\\n 'Skein1024-552': 0xb3a5,\\n 'Skein1024-560': 0xb3a6,\\n 'Skein1024-568': 0xb3a7,\\n 'Skein1024-576': 0xb3a8,\\n 'Skein1024-584': 0xb3a9,\\n 'Skein1024-592': 0xb3aa,\\n 'Skein1024-600': 0xb3ab,\\n 'Skein1024-608': 0xb3ac,\\n 'Skein1024-616': 0xb3ad,\\n 'Skein1024-624': 0xb3ae,\\n 'Skein1024-632': 0xb3af,\\n 'Skein1024-640': 0xb3b0,\\n 'Skein1024-648': 0xb3b1,\\n 'Skein1024-656': 0xb3b2,\\n 'Skein1024-664': 0xb3b3,\\n 'Skein1024-672': 0xb3b4,\\n 'Skein1024-680': 0xb3b5,\\n 'Skein1024-688': 0xb3b6,\\n 'Skein1024-696': 0xb3b7,\\n 'Skein1024-704': 0xb3b8,\\n 'Skein1024-712': 0xb3b9,\\n 'Skein1024-720': 0xb3ba,\\n 'Skein1024-728': 0xb3bb,\\n 'Skein1024-736': 0xb3bc,\\n 'Skein1024-744': 0xb3bd,\\n 'Skein1024-752': 0xb3be,\\n 'Skein1024-760': 0xb3bf,\\n 'Skein1024-768': 0xb3c0,\\n 'Skein1024-776': 0xb3c1,\\n 'Skein1024-784': 0xb3c2,\\n 'Skein1024-792': 0xb3c3,\\n 'Skein1024-800': 0xb3c4,\\n 'Skein1024-808': 0xb3c5,\\n 'Skein1024-816': 0xb3c6,\\n 'Skein1024-824': 0xb3c7,\\n 'Skein1024-832': 0xb3c8,\\n 'Skein1024-840': 0xb3c9,\\n 'Skein1024-848': 0xb3ca,\\n 'Skein1024-856': 0xb3cb,\\n 'Skein1024-864': 0xb3cc,\\n 'Skein1024-872': 0xb3cd,\\n 'Skein1024-880': 0xb3ce,\\n 'Skein1024-888': 0xb3cf,\\n 'Skein1024-896': 0xb3d0,\\n 'Skein1024-904': 0xb3d1,\\n 'Skein1024-912': 0xb3d2,\\n 'Skein1024-920': 0xb3d3,\\n 'Skein1024-928': 0xb3d4,\\n 'Skein1024-936': 0xb3d5,\\n 'Skein1024-944': 0xb3d6,\\n 'Skein1024-952': 0xb3d7,\\n 'Skein1024-960': 0xb3d8,\\n 'Skein1024-968': 0xb3d9,\\n 'Skein1024-976': 0xb3da,\\n 'Skein1024-984': 0xb3db,\\n 'Skein1024-992': 0xb3dc,\\n 'Skein1024-1000': 0xb3dd,\\n 'Skein1024-1008': 0xb3de,\\n 'Skein1024-1016': 0xb3df,\\n 'Skein1024-1024': 0xb3e0\\n})\\n\\nexports.codes = Object.freeze({\\n 0x0: 'identity',\\n\\n // sha family\\n 0x11: 'sha1',\\n 0x12: 'sha2-256',\\n 0x13: 'sha2-512',\\n 0x56: 'dbl-sha2-256',\\n 0x17: 'sha3-224',\\n 0x16: 'sha3-256',\\n 0x15: 'sha3-384',\\n 0x14: 'sha3-512',\\n 0x18: 'shake-128',\\n 0x19: 'shake-256',\\n 0x1A: 'keccak-224',\\n 0x1B: 'keccak-256',\\n 0x1C: 'keccak-384',\\n 0x1D: 'keccak-512',\\n\\n 0x22: 'murmur3-128',\\n 0x23: 'murmur3-32',\\n\\n // blake2\\n 0xb201: 'blake2b-8',\\n 0xb202: 'blake2b-16',\\n 0xb203: 'blake2b-24',\\n 0xb204: 'blake2b-32',\\n 0xb205: 'blake2b-40',\\n 0xb206: 'blake2b-48',\\n 0xb207: 'blake2b-56',\\n 0xb208: 'blake2b-64',\\n 0xb209: 'blake2b-72',\\n 0xb20a: 'blake2b-80',\\n 0xb20b: 'blake2b-88',\\n 0xb20c: 'blake2b-96',\\n 0xb20d: 'blake2b-104',\\n 0xb20e: 'blake2b-112',\\n 0xb20f: 'blake2b-120',\\n 0xb210: 'blake2b-128',\\n 0xb211: 'blake2b-136',\\n 0xb212: 'blake2b-144',\\n 0xb213: 'blake2b-152',\\n 0xb214: 'blake2b-160',\\n 0xb215: 'blake2b-168',\\n 0xb216: 'blake2b-176',\\n 0xb217: 'blake2b-184',\\n 0xb218: 'blake2b-192',\\n 0xb219: 'blake2b-200',\\n 0xb21a: 'blake2b-208',\\n 0xb21b: 'blake2b-216',\\n 0xb21c: 'blake2b-224',\\n 0xb21d: 'blake2b-232',\\n 0xb21e: 'blake2b-240',\\n 0xb21f: 'blake2b-248',\\n 0xb220: 'blake2b-256',\\n 0xb221: 'blake2b-264',\\n 0xb222: 'blake2b-272',\\n 0xb223: 'blake2b-280',\\n 0xb224: 'blake2b-288',\\n 0xb225: 'blake2b-296',\\n 0xb226: 'blake2b-304',\\n 0xb227: 'blake2b-312',\\n 0xb228: 'blake2b-320',\\n 0xb229: 'blake2b-328',\\n 0xb22a: 'blake2b-336',\\n 0xb22b: 'blake2b-344',\\n 0xb22c: 'blake2b-352',\\n 0xb22d: 'blake2b-360',\\n 0xb22e: 'blake2b-368',\\n 0xb22f: 'blake2b-376',\\n 0xb230: 'blake2b-384',\\n 0xb231: 'blake2b-392',\\n 0xb232: 'blake2b-400',\\n 0xb233: 'blake2b-408',\\n 0xb234: 'blake2b-416',\\n 0xb235: 'blake2b-424',\\n 0xb236: 'blake2b-432',\\n 0xb237: 'blake2b-440',\\n 0xb238: 'blake2b-448',\\n 0xb239: 'blake2b-456',\\n 0xb23a: 'blake2b-464',\\n 0xb23b: 'blake2b-472',\\n 0xb23c: 'blake2b-480',\\n 0xb23d: 'blake2b-488',\\n 0xb23e: 'blake2b-496',\\n 0xb23f: 'blake2b-504',\\n 0xb240: 'blake2b-512',\\n 0xb241: 'blake2s-8',\\n 0xb242: 'blake2s-16',\\n 0xb243: 'blake2s-24',\\n 0xb244: 'blake2s-32',\\n 0xb245: 'blake2s-40',\\n 0xb246: 'blake2s-48',\\n 0xb247: 'blake2s-56',\\n 0xb248: 'blake2s-64',\\n 0xb249: 'blake2s-72',\\n 0xb24a: 'blake2s-80',\\n 0xb24b: 'blake2s-88',\\n 0xb24c: 'blake2s-96',\\n 0xb24d: 'blake2s-104',\\n 0xb24e: 'blake2s-112',\\n 0xb24f: 'blake2s-120',\\n 0xb250: 'blake2s-128',\\n 0xb251: 'blake2s-136',\\n 0xb252: 'blake2s-144',\\n 0xb253: 'blake2s-152',\\n 0xb254: 'blake2s-160',\\n 0xb255: 'blake2s-168',\\n 0xb256: 'blake2s-176',\\n 0xb257: 'blake2s-184',\\n 0xb258: 'blake2s-192',\\n 0xb259: 'blake2s-200',\\n 0xb25a: 'blake2s-208',\\n 0xb25b: 'blake2s-216',\\n 0xb25c: 'blake2s-224',\\n 0xb25d: 'blake2s-232',\\n 0xb25e: 'blake2s-240',\\n 0xb25f: 'blake2s-248',\\n 0xb260: 'blake2s-256',\\n\\n // skein\\n 0xb301: 'Skein256-8',\\n 0xb302: 'Skein256-16',\\n 0xb303: 'Skein256-24',\\n 0xb304: 'Skein256-32',\\n 0xb305: 'Skein256-40',\\n 0xb306: 'Skein256-48',\\n 0xb307: 'Skein256-56',\\n 0xb308: 'Skein256-64',\\n 0xb309: 'Skein256-72',\\n 0xb30a: 'Skein256-80',\\n 0xb30b: 'Skein256-88',\\n 0xb30c: 'Skein256-96',\\n 0xb30d: 'Skein256-104',\\n 0xb30e: 'Skein256-112',\\n 0xb30f: 'Skein256-120',\\n 0xb310: 'Skein256-128',\\n 0xb311: 'Skein256-136',\\n 0xb312: 'Skein256-144',\\n 0xb313: 'Skein256-152',\\n 0xb314: 'Skein256-160',\\n 0xb315: 'Skein256-168',\\n 0xb316: 'Skein256-176',\\n 0xb317: 'Skein256-184',\\n 0xb318: 'Skein256-192',\\n 0xb319: 'Skein256-200',\\n 0xb31a: 'Skein256-208',\\n 0xb31b: 'Skein256-216',\\n 0xb31c: 'Skein256-224',\\n 0xb31d: 'Skein256-232',\\n 0xb31e: 'Skein256-240',\\n 0xb31f: 'Skein256-248',\\n 0xb320: 'Skein256-256',\\n 0xb321: 'Skein512-8',\\n 0xb322: 'Skein512-16',\\n 0xb323: 'Skein512-24',\\n 0xb324: 'Skein512-32',\\n 0xb325: 'Skein512-40',\\n 0xb326: 'Skein512-48',\\n 0xb327: 'Skein512-56',\\n 0xb328: 'Skein512-64',\\n 0xb329: 'Skein512-72',\\n 0xb32a: 'Skein512-80',\\n 0xb32b: 'Skein512-88',\\n 0xb32c: 'Skein512-96',\\n 0xb32d: 'Skein512-104',\\n 0xb32e: 'Skein512-112',\\n 0xb32f: 'Skein512-120',\\n 0xb330: 'Skein512-128',\\n 0xb331: 'Skein512-136',\\n 0xb332: 'Skein512-144',\\n 0xb333: 'Skein512-152',\\n 0xb334: 'Skein512-160',\\n 0xb335: 'Skein512-168',\\n 0xb336: 'Skein512-176',\\n 0xb337: 'Skein512-184',\\n 0xb338: 'Skein512-192',\\n 0xb339: 'Skein512-200',\\n 0xb33a: 'Skein512-208',\\n 0xb33b: 'Skein512-216',\\n 0xb33c: 'Skein512-224',\\n 0xb33d: 'Skein512-232',\\n 0xb33e: 'Skein512-240',\\n 0xb33f: 'Skein512-248',\\n 0xb340: 'Skein512-256',\\n 0xb341: 'Skein512-264',\\n 0xb342: 'Skein512-272',\\n 0xb343: 'Skein512-280',\\n 0xb344: 'Skein512-288',\\n 0xb345: 'Skein512-296',\\n 0xb346: 'Skein512-304',\\n 0xb347: 'Skein512-312',\\n 0xb348: 'Skein512-320',\\n 0xb349: 'Skein512-328',\\n 0xb34a: 'Skein512-336',\\n 0xb34b: 'Skein512-344',\\n 0xb34c: 'Skein512-352',\\n 0xb34d: 'Skein512-360',\\n 0xb34e: 'Skein512-368',\\n 0xb34f: 'Skein512-376',\\n 0xb350: 'Skein512-384',\\n 0xb351: 'Skein512-392',\\n 0xb352: 'Skein512-400',\\n 0xb353: 'Skein512-408',\\n 0xb354: 'Skein512-416',\\n 0xb355: 'Skein512-424',\\n 0xb356: 'Skein512-432',\\n 0xb357: 'Skein512-440',\\n 0xb358: 'Skein512-448',\\n 0xb359: 'Skein512-456',\\n 0xb35a: 'Skein512-464',\\n 0xb35b: 'Skein512-472',\\n 0xb35c: 'Skein512-480',\\n 0xb35d: 'Skein512-488',\\n 0xb35e: 'Skein512-496',\\n 0xb35f: 'Skein512-504',\\n 0xb360: 'Skein512-512',\\n 0xb361: 'Skein1024-8',\\n 0xb362: 'Skein1024-16',\\n 0xb363: 'Skein1024-24',\\n 0xb364: 'Skein1024-32',\\n 0xb365: 'Skein1024-40',\\n 0xb366: 'Skein1024-48',\\n 0xb367: 'Skein1024-56',\\n 0xb368: 'Skein1024-64',\\n 0xb369: 'Skein1024-72',\\n 0xb36a: 'Skein1024-80',\\n 0xb36b: 'Skein1024-88',\\n 0xb36c: 'Skein1024-96',\\n 0xb36d: 'Skein1024-104',\\n 0xb36e: 'Skein1024-112',\\n 0xb36f: 'Skein1024-120',\\n 0xb370: 'Skein1024-128',\\n 0xb371: 'Skein1024-136',\\n 0xb372: 'Skein1024-144',\\n 0xb373: 'Skein1024-152',\\n 0xb374: 'Skein1024-160',\\n 0xb375: 'Skein1024-168',\\n 0xb376: 'Skein1024-176',\\n 0xb377: 'Skein1024-184',\\n 0xb378: 'Skein1024-192',\\n 0xb379: 'Skein1024-200',\\n 0xb37a: 'Skein1024-208',\\n 0xb37b: 'Skein1024-216',\\n 0xb37c: 'Skein1024-224',\\n 0xb37d: 'Skein1024-232',\\n 0xb37e: 'Skein1024-240',\\n 0xb37f: 'Skein1024-248',\\n 0xb380: 'Skein1024-256',\\n 0xb381: 'Skein1024-264',\\n 0xb382: 'Skein1024-272',\\n 0xb383: 'Skein1024-280',\\n 0xb384: 'Skein1024-288',\\n 0xb385: 'Skein1024-296',\\n 0xb386: 'Skein1024-304',\\n 0xb387: 'Skein1024-312',\\n 0xb388: 'Skein1024-320',\\n 0xb389: 'Skein1024-328',\\n 0xb38a: 'Skein1024-336',\\n 0xb38b: 'Skein1024-344',\\n 0xb38c: 'Skein1024-352',\\n 0xb38d: 'Skein1024-360',\\n 0xb38e: 'Skein1024-368',\\n 0xb38f: 'Skein1024-376',\\n 0xb390: 'Skein1024-384',\\n 0xb391: 'Skein1024-392',\\n 0xb392: 'Skein1024-400',\\n 0xb393: 'Skein1024-408',\\n 0xb394: 'Skein1024-416',\\n 0xb395: 'Skein1024-424',\\n 0xb396: 'Skein1024-432',\\n 0xb397: 'Skein1024-440',\\n 0xb398: 'Skein1024-448',\\n 0xb399: 'Skein1024-456',\\n 0xb39a: 'Skein1024-464',\\n 0xb39b: 'Skein1024-472',\\n 0xb39c: 'Skein1024-480',\\n 0xb39d: 'Skein1024-488',\\n 0xb39e: 'Skein1024-496',\\n 0xb39f: 'Skein1024-504',\\n 0xb3a0: 'Skein1024-512',\\n 0xb3a1: 'Skein1024-520',\\n 0xb3a2: 'Skein1024-528',\\n 0xb3a3: 'Skein1024-536',\\n 0xb3a4: 'Skein1024-544',\\n 0xb3a5: 'Skein1024-552',\\n 0xb3a6: 'Skein1024-560',\\n 0xb3a7: 'Skein1024-568',\\n 0xb3a8: 'Skein1024-576',\\n 0xb3a9: 'Skein1024-584',\\n 0xb3aa: 'Skein1024-592',\\n 0xb3ab: 'Skein1024-600',\\n 0xb3ac: 'Skein1024-608',\\n 0xb3ad: 'Skein1024-616',\\n 0xb3ae: 'Skein1024-624',\\n 0xb3af: 'Skein1024-632',\\n 0xb3b0: 'Skein1024-640',\\n 0xb3b1: 'Skein1024-648',\\n 0xb3b2: 'Skein1024-656',\\n 0xb3b3: 'Skein1024-664',\\n 0xb3b4: 'Skein1024-672',\\n 0xb3b5: 'Skein1024-680',\\n 0xb3b6: 'Skein1024-688',\\n 0xb3b7: 'Skein1024-696',\\n 0xb3b8: 'Skein1024-704',\\n 0xb3b9: 'Skein1024-712',\\n 0xb3ba: 'Skein1024-720',\\n 0xb3bb: 'Skein1024-728',\\n 0xb3bc: 'Skein1024-736',\\n 0xb3bd: 'Skein1024-744',\\n 0xb3be: 'Skein1024-752',\\n 0xb3bf: 'Skein1024-760',\\n 0xb3c0: 'Skein1024-768',\\n 0xb3c1: 'Skein1024-776',\\n 0xb3c2: 'Skein1024-784',\\n 0xb3c3: 'Skein1024-792',\\n 0xb3c4: 'Skein1024-800',\\n 0xb3c5: 'Skein1024-808',\\n 0xb3c6: 'Skein1024-816',\\n 0xb3c7: 'Skein1024-824',\\n 0xb3c8: 'Skein1024-832',\\n 0xb3c9: 'Skein1024-840',\\n 0xb3ca: 'Skein1024-848',\\n 0xb3cb: 'Skein1024-856',\\n 0xb3cc: 'Skein1024-864',\\n 0xb3cd: 'Skein1024-872',\\n 0xb3ce: 'Skein1024-880',\\n 0xb3cf: 'Skein1024-888',\\n 0xb3d0: 'Skein1024-896',\\n 0xb3d1: 'Skein1024-904',\\n 0xb3d2: 'Skein1024-912',\\n 0xb3d3: 'Skein1024-920',\\n 0xb3d4: 'Skein1024-928',\\n 0xb3d5: 'Skein1024-936',\\n 0xb3d6: 'Skein1024-944',\\n 0xb3d7: 'Skein1024-952',\\n 0xb3d8: 'Skein1024-960',\\n 0xb3d9: 'Skein1024-968',\\n 0xb3da: 'Skein1024-976',\\n 0xb3db: 'Skein1024-984',\\n 0xb3dc: 'Skein1024-992',\\n 0xb3dd: 'Skein1024-1000',\\n 0xb3de: 'Skein1024-1008',\\n 0xb3df: 'Skein1024-1016',\\n 0xb3e0: 'Skein1024-1024'\\n})\\n\\nexports.defaultLengths = Object.freeze({\\n 0x11: 20,\\n 0x12: 32,\\n 0x13: 64,\\n 0x56: 32,\\n 0x17: 28,\\n 0x16: 32,\\n 0x15: 48,\\n 0x14: 64,\\n 0x18: 32,\\n 0x19: 64,\\n 0x1A: 28,\\n 0x1B: 32,\\n 0x1C: 48,\\n 0x1D: 64,\\n 0x22: 32,\\n\\n 0xb201: 0x01,\\n 0xb202: 0x02,\\n 0xb203: 0x03,\\n 0xb204: 0x04,\\n 0xb205: 0x05,\\n 0xb206: 0x06,\\n 0xb207: 0x07,\\n 0xb208: 0x08,\\n 0xb209: 0x09,\\n 0xb20a: 0x0a,\\n 0xb20b: 0x0b,\\n 0xb20c: 0x0c,\\n 0xb20d: 0x0d,\\n 0xb20e: 0x0e,\\n 0xb20f: 0x0f,\\n 0xb210: 0x10,\\n 0xb211: 0x11,\\n 0xb212: 0x12,\\n 0xb213: 0x13,\\n 0xb214: 0x14,\\n 0xb215: 0x15,\\n 0xb216: 0x16,\\n 0xb217: 0x17,\\n 0xb218: 0x18,\\n 0xb219: 0x19,\\n 0xb21a: 0x1a,\\n 0xb21b: 0x1b,\\n 0xb21c: 0x1c,\\n 0xb21d: 0x1d,\\n 0xb21e: 0x1e,\\n 0xb21f: 0x1f,\\n 0xb220: 0x20,\\n 0xb221: 0x21,\\n 0xb222: 0x22,\\n 0xb223: 0x23,\\n 0xb224: 0x24,\\n 0xb225: 0x25,\\n 0xb226: 0x26,\\n 0xb227: 0x27,\\n 0xb228: 0x28,\\n 0xb229: 0x29,\\n 0xb22a: 0x2a,\\n 0xb22b: 0x2b,\\n 0xb22c: 0x2c,\\n 0xb22d: 0x2d,\\n 0xb22e: 0x2e,\\n 0xb22f: 0x2f,\\n 0xb230: 0x30,\\n 0xb231: 0x31,\\n 0xb232: 0x32,\\n 0xb233: 0x33,\\n 0xb234: 0x34,\\n 0xb235: 0x35,\\n 0xb236: 0x36,\\n 0xb237: 0x37,\\n 0xb238: 0x38,\\n 0xb239: 0x39,\\n 0xb23a: 0x3a,\\n 0xb23b: 0x3b,\\n 0xb23c: 0x3c,\\n 0xb23d: 0x3d,\\n 0xb23e: 0x3e,\\n 0xb23f: 0x3f,\\n 0xb240: 0x40,\\n 0xb241: 0x01,\\n 0xb242: 0x02,\\n 0xb243: 0x03,\\n 0xb244: 0x04,\\n 0xb245: 0x05,\\n 0xb246: 0x06,\\n 0xb247: 0x07,\\n 0xb248: 0x08,\\n 0xb249: 0x09,\\n 0xb24a: 0x0a,\\n 0xb24b: 0x0b,\\n 0xb24c: 0x0c,\\n 0xb24d: 0x0d,\\n 0xb24e: 0x0e,\\n 0xb24f: 0x0f,\\n 0xb250: 0x10,\\n 0xb251: 0x11,\\n 0xb252: 0x12,\\n 0xb253: 0x13,\\n 0xb254: 0x14,\\n 0xb255: 0x15,\\n 0xb256: 0x16,\\n 0xb257: 0x17,\\n 0xb258: 0x18,\\n 0xb259: 0x19,\\n 0xb25a: 0x1a,\\n 0xb25b: 0x1b,\\n 0xb25c: 0x1c,\\n 0xb25d: 0x1d,\\n 0xb25e: 0x1e,\\n 0xb25f: 0x1f,\\n 0xb260: 0x20,\\n 0xb301: 0x01,\\n 0xb302: 0x02,\\n 0xb303: 0x03,\\n 0xb304: 0x04,\\n 0xb305: 0x05,\\n 0xb306: 0x06,\\n 0xb307: 0x07,\\n 0xb308: 0x08,\\n 0xb309: 0x09,\\n 0xb30a: 0x0a,\\n 0xb30b: 0x0b,\\n 0xb30c: 0x0c,\\n 0xb30d: 0x0d,\\n 0xb30e: 0x0e,\\n 0xb30f: 0x0f,\\n 0xb310: 0x10,\\n 0xb311: 0x11,\\n 0xb312: 0x12,\\n 0xb313: 0x13,\\n 0xb314: 0x14,\\n 0xb315: 0x15,\\n 0xb316: 0x16,\\n 0xb317: 0x17,\\n 0xb318: 0x18,\\n 0xb319: 0x19,\\n 0xb31a: 0x1a,\\n 0xb31b: 0x1b,\\n 0xb31c: 0x1c,\\n 0xb31d: 0x1d,\\n 0xb31e: 0x1e,\\n 0xb31f: 0x1f,\\n 0xb320: 0x20,\\n 0xb321: 0x01,\\n 0xb322: 0x02,\\n 0xb323: 0x03,\\n 0xb324: 0x04,\\n 0xb325: 0x05,\\n 0xb326: 0x06,\\n 0xb327: 0x07,\\n 0xb328: 0x08,\\n 0xb329: 0x09,\\n 0xb32a: 0x0a,\\n 0xb32b: 0x0b,\\n 0xb32c: 0x0c,\\n 0xb32d: 0x0d,\\n 0xb32e: 0x0e,\\n 0xb32f: 0x0f,\\n 0xb330: 0x10,\\n 0xb331: 0x11,\\n 0xb332: 0x12,\\n 0xb333: 0x13,\\n 0xb334: 0x14,\\n 0xb335: 0x15,\\n 0xb336: 0x16,\\n 0xb337: 0x17,\\n 0xb338: 0x18,\\n 0xb339: 0x19,\\n 0xb33a: 0x1a,\\n 0xb33b: 0x1b,\\n 0xb33c: 0x1c,\\n 0xb33d: 0x1d,\\n 0xb33e: 0x1e,\\n 0xb33f: 0x1f,\\n 0xb340: 0x20,\\n 0xb341: 0x21,\\n 0xb342: 0x22,\\n 0xb343: 0x23,\\n 0xb344: 0x24,\\n 0xb345: 0x25,\\n 0xb346: 0x26,\\n 0xb347: 0x27,\\n 0xb348: 0x28,\\n 0xb349: 0x29,\\n 0xb34a: 0x2a,\\n 0xb34b: 0x2b,\\n 0xb34c: 0x2c,\\n 0xb34d: 0x2d,\\n 0xb34e: 0x2e,\\n 0xb34f: 0x2f,\\n 0xb350: 0x30,\\n 0xb351: 0x31,\\n 0xb352: 0x32,\\n 0xb353: 0x33,\\n 0xb354: 0x34,\\n 0xb355: 0x35,\\n 0xb356: 0x36,\\n 0xb357: 0x37,\\n 0xb358: 0x38,\\n 0xb359: 0x39,\\n 0xb35a: 0x3a,\\n 0xb35b: 0x3b,\\n 0xb35c: 0x3c,\\n 0xb35d: 0x3d,\\n 0xb35e: 0x3e,\\n 0xb35f: 0x3f,\\n 0xb360: 0x40,\\n 0xb361: 0x01,\\n 0xb362: 0x02,\\n 0xb363: 0x03,\\n 0xb364: 0x04,\\n 0xb365: 0x05,\\n 0xb366: 0x06,\\n 0xb367: 0x07,\\n 0xb368: 0x08,\\n 0xb369: 0x09,\\n 0xb36a: 0x0a,\\n 0xb36b: 0x0b,\\n 0xb36c: 0x0c,\\n 0xb36d: 0x0d,\\n 0xb36e: 0x0e,\\n 0xb36f: 0x0f,\\n 0xb370: 0x10,\\n 0xb371: 0x11,\\n 0xb372: 0x12,\\n 0xb373: 0x13,\\n 0xb374: 0x14,\\n 0xb375: 0x15,\\n 0xb376: 0x16,\\n 0xb377: 0x17,\\n 0xb378: 0x18,\\n 0xb379: 0x19,\\n 0xb37a: 0x1a,\\n 0xb37b: 0x1b,\\n 0xb37c: 0x1c,\\n 0xb37d: 0x1d,\\n 0xb37e: 0x1e,\\n 0xb37f: 0x1f,\\n 0xb380: 0x20,\\n 0xb381: 0x21,\\n 0xb382: 0x22,\\n 0xb383: 0x23,\\n 0xb384: 0x24,\\n 0xb385: 0x25,\\n 0xb386: 0x26,\\n 0xb387: 0x27,\\n 0xb388: 0x28,\\n 0xb389: 0x29,\\n 0xb38a: 0x2a,\\n 0xb38b: 0x2b,\\n 0xb38c: 0x2c,\\n 0xb38d: 0x2d,\\n 0xb38e: 0x2e,\\n 0xb38f: 0x2f,\\n 0xb390: 0x30,\\n 0xb391: 0x31,\\n 0xb392: 0x32,\\n 0xb393: 0x33,\\n 0xb394: 0x34,\\n 0xb395: 0x35,\\n 0xb396: 0x36,\\n 0xb397: 0x37,\\n 0xb398: 0x38,\\n 0xb399: 0x39,\\n 0xb39a: 0x3a,\\n 0xb39b: 0x3b,\\n 0xb39c: 0x3c,\\n 0xb39d: 0x3d,\\n 0xb39e: 0x3e,\\n 0xb39f: 0x3f,\\n 0xb3a0: 0x40,\\n 0xb3a1: 0x41,\\n 0xb3a2: 0x42,\\n 0xb3a3: 0x43,\\n 0xb3a4: 0x44,\\n 0xb3a5: 0x45,\\n 0xb3a6: 0x46,\\n 0xb3a7: 0x47,\\n 0xb3a8: 0x48,\\n 0xb3a9: 0x49,\\n 0xb3aa: 0x4a,\\n 0xb3ab: 0x4b,\\n 0xb3ac: 0x4c,\\n 0xb3ad: 0x4d,\\n 0xb3ae: 0x4e,\\n 0xb3af: 0x4f,\\n 0xb3b0: 0x50,\\n 0xb3b1: 0x51,\\n 0xb3b2: 0x52,\\n 0xb3b3: 0x53,\\n 0xb3b4: 0x54,\\n 0xb3b5: 0x55,\\n 0xb3b6: 0x56,\\n 0xb3b7: 0x57,\\n 0xb3b8: 0x58,\\n 0xb3b9: 0x59,\\n 0xb3ba: 0x5a,\\n 0xb3bb: 0x5b,\\n 0xb3bc: 0x5c,\\n 0xb3bd: 0x5d,\\n 0xb3be: 0x5e,\\n 0xb3bf: 0x5f,\\n 0xb3c0: 0x60,\\n 0xb3c1: 0x61,\\n 0xb3c2: 0x62,\\n 0xb3c3: 0x63,\\n 0xb3c4: 0x64,\\n 0xb3c5: 0x65,\\n 0xb3c6: 0x66,\\n 0xb3c7: 0x67,\\n 0xb3c8: 0x68,\\n 0xb3c9: 0x69,\\n 0xb3ca: 0x6a,\\n 0xb3cb: 0x6b,\\n 0xb3cc: 0x6c,\\n 0xb3cd: 0x6d,\\n 0xb3ce: 0x6e,\\n 0xb3cf: 0x6f,\\n 0xb3d0: 0x70,\\n 0xb3d1: 0x71,\\n 0xb3d2: 0x72,\\n 0xb3d3: 0x73,\\n 0xb3d4: 0x74,\\n 0xb3d5: 0x75,\\n 0xb3d6: 0x76,\\n 0xb3d7: 0x77,\\n 0xb3d8: 0x78,\\n 0xb3d9: 0x79,\\n 0xb3da: 0x7a,\\n 0xb3db: 0x7b,\\n 0xb3dc: 0x7c,\\n 0xb3dd: 0x7d,\\n 0xb3de: 0x7e,\\n 0xb3df: 0x7f,\\n 0xb3e0: 0x80\\n})\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashes/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js ***!\n \\************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Multihash implementation in JavaScript.\\n *\\n * @module multihash\\n */\\n\\n\\nconst bs58 = __webpack_require__(/*! bs58 */ \\\"./node_modules/bs58/index.js\\\")\\n\\nconst cs = __webpack_require__(/*! ./constants */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashes/src/constants.js\\\")\\n\\nexports.names = cs.names\\nexports.codes = cs.codes\\nexports.defaultLengths = cs.defaultLengths\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\n/**\\n * Convert the given multihash to a hex encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toHexString = function toHexString (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return hash.toString('hex')\\n}\\n\\n/**\\n * Convert the given hex encoded string to a multihash.\\n *\\n * @param {string} hash\\n * @returns {Buffer}\\n */\\nexports.fromHexString = function fromHexString (hash) {\\n return Buffer.from(hash, 'hex')\\n}\\n\\n/**\\n * Convert the given multihash to a base58 encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toB58String = function toB58String (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return bs58.encode(hash)\\n}\\n\\n/**\\n * Convert the given base58 encoded string to a multihash.\\n *\\n * @param {string|Buffer} hash\\n * @returns {Buffer}\\n */\\nexports.fromB58String = function fromB58String (hash) {\\n let encoded = hash\\n if (Buffer.isBuffer(hash)) {\\n encoded = hash.toString()\\n }\\n\\n return Buffer.from(bs58.decode(encoded))\\n}\\n\\n/**\\n * Decode a hash from the given multihash.\\n *\\n * @param {Buffer} buf\\n * @returns {{code: number, name: string, length: number, digest: Buffer}} result\\n */\\nexports.decode = function decode (buf) {\\n if (!(Buffer.isBuffer(buf))) {\\n throw new Error('multihash must be a Buffer')\\n }\\n\\n if (buf.length < 3) {\\n throw new Error('multihash too short. must be > 3 bytes.')\\n }\\n\\n const code = varint.decode(buf)\\n if (!exports.isValidCode(code)) {\\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n const len = varint.decode(buf)\\n if (len < 1) {\\n throw new Error(`multihash invalid length: 0x${len.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n if (buf.length !== len) {\\n throw new Error(`multihash length inconsistent: 0x${buf.toString('hex')}`)\\n }\\n\\n return {\\n code: code,\\n name: cs.codes[code],\\n length: len,\\n digest: buf\\n }\\n}\\n\\n/**\\n * Encode a hash digest along with the specified function code.\\n *\\n * > **Note:** the length is derived from the length of the digest itself.\\n *\\n * @param {Buffer} digest\\n * @param {string|number} code\\n * @param {number} [length]\\n * @returns {Buffer}\\n */\\nexports.encode = function encode (digest, code, length) {\\n if (!digest || code === undefined) {\\n throw new Error('multihash encode requires at least two args: digest, code')\\n }\\n\\n // ensure it's a hashfunction code.\\n const hashfn = exports.coerceCode(code)\\n\\n if (!(Buffer.isBuffer(digest))) {\\n throw new Error('digest should be a Buffer')\\n }\\n\\n if (length == null) {\\n length = digest.length\\n }\\n\\n if (length && digest.length !== length) {\\n throw new Error('digest length should be equal to specified length.')\\n }\\n\\n return Buffer.concat([\\n Buffer.from(varint.encode(hashfn)),\\n Buffer.from(varint.encode(length)),\\n digest\\n ])\\n}\\n\\n/**\\n * Converts a hash function name into the matching code.\\n * If passed a number it will return the number if it's a valid code.\\n * @param {string|number} name\\n * @returns {number}\\n */\\nexports.coerceCode = function coerceCode (name) {\\n let code = name\\n\\n if (typeof name === 'string') {\\n if (cs.names[name] === undefined) {\\n throw new Error(`Unrecognized hash function named: ${name}`)\\n }\\n code = cs.names[name]\\n }\\n\\n if (typeof code !== 'number') {\\n throw new Error(`Hash function code should be a number. Got: ${code}`)\\n }\\n\\n if (cs.codes[code] === undefined && !exports.isAppCode(code)) {\\n throw new Error(`Unrecognized function code: ${code}`)\\n }\\n\\n return code\\n}\\n\\n/**\\n * Checks wether a code is part of the app range\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isAppCode = function appCode (code) {\\n return code > 0 && code < 0x10\\n}\\n\\n/**\\n * Checks whether a multihash code is valid.\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isValidCode = function validCode (code) {\\n if (exports.isAppCode(code)) {\\n return true\\n }\\n\\n if (cs.codes[code]) {\\n return true\\n }\\n\\n return false\\n}\\n\\n/**\\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nfunction validate (multihash) {\\n exports.decode(multihash) // throws if bad.\\n}\\nexports.validate = validate\\n\\n/**\\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nexports.prefix = function prefix (multihash) {\\n validate(multihash)\\n\\n return multihash.slice(0, 2)\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/blake.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/blake.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\nconst blake = __webpack_require__(/*! blakejs */ \\\"./node_modules/blakejs/index.js\\\")\\n\\nconst minB = 0xb201\\nconst minS = 0xb241\\n\\nconst blake2b = {\\n init: blake.blake2bInit,\\n update: blake.blake2bUpdate,\\n digest: blake.blake2bFinal\\n}\\n\\nconst blake2s = {\\n init: blake.blake2sInit,\\n update: blake.blake2sUpdate,\\n digest: blake.blake2sFinal\\n}\\n\\n// Note that although this function doesn't do any asynchronous work, we mark\\n// the function as async because it must return a Promise to match the API\\n// for other functions that do perform asynchronous work (see sha.browser.js)\\n// eslint-disable-next-line\\nconst makeB2Hash = (size, hf) => async (data) => {\\n const ctx = hf.init(size, null)\\n hf.update(ctx, data)\\n return Buffer.from(hf.digest(ctx))\\n}\\n\\nmodule.exports = (table) => {\\n for (let i = 0; i < 64; i++) {\\n table[minB + i] = makeB2Hash(i + 1, blake2b)\\n }\\n for (let i = 0; i < 32; i++) {\\n table[minS + i] = makeB2Hash(i + 1, blake2s)\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/blake.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/crypto.js\":\n/*!********************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/crypto.js ***!\n \\********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\nconst sha3 = __webpack_require__(/*! js-sha3 */ \\\"./node_modules/ipld-dag-pb/node_modules/js-sha3/src/sha3.js\\\")\\nconst mur = __webpack_require__(/*! murmurhash3js-revisited */ \\\"./node_modules/murmurhash3js-revisited/index.js\\\")\\nconst sha = __webpack_require__(/*! ./sha */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/sha.browser.js\\\")\\nconst { fromNumberTo32BitBuf } = __webpack_require__(/*! ./utils */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/utils.js\\\")\\n\\n// Note that although this function doesn't do any asynchronous work, we mark\\n// the function as async because it must return a Promise to match the API\\n// for other functions that do perform asynchronous work (see sha.browser.js)\\n// eslint-disable-next-line\\nconst hash = (algorithm) => async (data) => {\\n switch (algorithm) {\\n case 'sha3-224':\\n return Buffer.from(sha3.sha3_224.arrayBuffer(data))\\n case 'sha3-256':\\n return Buffer.from(sha3.sha3_256.arrayBuffer(data))\\n case 'sha3-384':\\n return Buffer.from(sha3.sha3_384.arrayBuffer(data))\\n case 'sha3-512':\\n return Buffer.from(sha3.sha3_512.arrayBuffer(data))\\n case 'shake-128':\\n return Buffer.from(sha3.shake128.create(128).update(data).arrayBuffer())\\n case 'shake-256':\\n return Buffer.from(sha3.shake256.create(256).update(data).arrayBuffer())\\n case 'keccak-224':\\n return Buffer.from(sha3.keccak224.arrayBuffer(data))\\n case 'keccak-256':\\n return Buffer.from(sha3.keccak256.arrayBuffer(data))\\n case 'keccak-384':\\n return Buffer.from(sha3.keccak384.arrayBuffer(data))\\n case 'keccak-512':\\n return Buffer.from(sha3.keccak512.arrayBuffer(data))\\n case 'murmur3-128':\\n return Buffer.from(mur.x64.hash128(data), 'hex')\\n case 'murmur3-32':\\n return fromNumberTo32BitBuf(mur.x86.hash32(data))\\n\\n default:\\n throw new TypeError(`${algorithm} is not a supported algorithm`)\\n }\\n}\\n\\nconst identity = data => Buffer.from(data)\\n\\nmodule.exports = {\\n identity,\\n sha1: sha('sha1'),\\n sha2256: sha('sha2-256'),\\n sha2512: sha('sha2-512'),\\n dblSha2256: sha('dbl-sha2-256'),\\n sha3224: hash('sha3-224'),\\n sha3256: hash('sha3-256'),\\n sha3384: hash('sha3-384'),\\n sha3512: hash('sha3-512'),\\n shake128: hash('shake-128'),\\n shake256: hash('shake-256'),\\n keccak224: hash('keccak-224'),\\n keccak256: hash('keccak-256'),\\n keccak384: hash('keccak-384'),\\n keccak512: hash('keccak-512'),\\n murmur3128: hash('murmur3-128'),\\n murmur332: hash('murmur3-32'),\\n addBlake: __webpack_require__(/*! ./blake */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/blake.js\\\")\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/crypto.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/index.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/index.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\nconst errcode = __webpack_require__(/*! err-code */ \\\"./node_modules/ipld-dag-pb/node_modules/err-code/index.js\\\")\\nconst multihash = __webpack_require__(/*! multihashes */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js\\\")\\nconst crypto = __webpack_require__(/*! ./crypto */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/crypto.js\\\")\\n\\n/**\\n * Hash the given `buf` using the algorithm specified by `alg`.\\n * @param {Buffer} buf - The value to hash.\\n * @param {number|string} alg - The algorithm to use eg 'sha1'\\n * @param {number} [length] - Optionally trim the result to this length.\\n * @returns {Promise<Buffer>}\\n */\\nasync function Multihashing (buf, alg, length) {\\n const digest = await Multihashing.digest(buf, alg, length)\\n return multihash.encode(digest, alg, length)\\n}\\n\\n/**\\n * The `buffer` module for easy use in the browser.\\n *\\n * @type {Buffer}\\n */\\nMultihashing.Buffer = Buffer // for browser things\\n\\n/**\\n * Expose multihash itself, to avoid silly double requires.\\n */\\nMultihashing.multihash = multihash\\n\\n/**\\n * @param {Buffer} buf - The value to hash.\\n * @param {number|string} alg - The algorithm to use eg 'sha1'\\n * @param {number} [length] - Optionally trim the result to this length.\\n * @returns {Promise<Buffer>}\\n */\\nMultihashing.digest = async (buf, alg, length) => {\\n const hash = Multihashing.createHash(alg)\\n const digest = await hash(buf)\\n return length ? digest.slice(0, length) : digest\\n}\\n\\n/**\\n * Creates a function that hashes with the given algorithm\\n *\\n * @param {string|number} alg - The algorithm to use eg 'sha1'\\n *\\n * @returns {function} - The hash function corresponding to `alg`\\n */\\nMultihashing.createHash = function (alg) {\\n if (!alg) {\\n throw errcode(new Error('hash algorithm must be specified'), 'ERR_HASH_ALGORITHM_NOT_SPECIFIED')\\n }\\n\\n alg = multihash.coerceCode(alg)\\n if (!Multihashing.functions[alg]) {\\n throw errcode(new Error(`multihash function '${alg}' not yet supported`), 'ERR_HASH_ALGORITHM_NOT_SUPPORTED')\\n }\\n\\n return Multihashing.functions[alg]\\n}\\n\\n/**\\n * Mapping of multihash codes to their hashing functions.\\n * @type {Object}\\n */\\nMultihashing.functions = {\\n // identity\\n 0x00: crypto.identity,\\n // sha1\\n 0x11: crypto.sha1,\\n // sha2-256\\n 0x12: crypto.sha2256,\\n // sha2-512\\n 0x13: crypto.sha2512,\\n // sha3-512\\n 0x14: crypto.sha3512,\\n // sha3-384\\n 0x15: crypto.sha3384,\\n // sha3-256\\n 0x16: crypto.sha3256,\\n // sha3-224\\n 0x17: crypto.sha3224,\\n // shake-128\\n 0x18: crypto.shake128,\\n // shake-256\\n 0x19: crypto.shake256,\\n // keccak-224\\n 0x1A: crypto.keccak224,\\n // keccak-256\\n 0x1B: crypto.keccak256,\\n // keccak-384\\n 0x1C: crypto.keccak384,\\n // keccak-512\\n 0x1D: crypto.keccak512,\\n // murmur3-128\\n 0x22: crypto.murmur3128,\\n // murmur3-32\\n 0x23: crypto.murmur332,\\n // dbl-sha2-256\\n 0x56: crypto.dblSha2256\\n}\\n\\n// add blake functions\\ncrypto.addBlake(Multihashing.functions)\\n\\nMultihashing.validate = async (buf, hash) => {\\n const newHash = await Multihashing(buf, multihash.decode(hash).name)\\n\\n return Buffer.compare(hash, newHash) === 0\\n}\\n\\nmodule.exports = Multihashing\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/sha.browser.js\":\n/*!*************************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/sha.browser.js ***!\n \\*************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\n\\nconst crypto = self.crypto || self.msCrypto\\n\\nmodule.exports = (algorithm) => {\\n if (typeof self === 'undefined' || (!self.crypto && !self.msCrypto)) {\\n throw new Error(\\n 'Please use a browser with webcrypto support and ensure the code has been delivered securely via HTTPS/TLS and run within a Secure Context'\\n )\\n }\\n\\n return async (data) => {\\n switch (algorithm) {\\n case 'sha1':\\n return Buffer.from(await crypto.subtle.digest({ name: 'SHA-1' }, data))\\n case 'sha2-256':\\n return Buffer.from(await crypto.subtle.digest({ name: 'SHA-256' }, data))\\n case 'sha2-512':\\n return Buffer.from(await crypto.subtle.digest({ name: 'SHA-512' }, data))\\n case 'dbl-sha2-256': {\\n const d = await crypto.subtle.digest({ name: 'SHA-256' }, data)\\n return Buffer.from(await crypto.subtle.digest({ name: 'SHA-256' }, d))\\n }\\n default:\\n throw new Error(`${algorithm} is not a supported algorithm`)\\n }\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/sha.browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/utils.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/utils.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\n\\nconst fromNumberTo32BitBuf = (number) => {\\n const bytes = new Array(4)\\n\\n for (let i = 0; i < 4; i++) {\\n bytes[i] = number & 0xff\\n number = number >> 8\\n }\\n\\n return Buffer.from(bytes)\\n}\\n\\nmodule.exports = {\\n fromNumberTo32BitBuf\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-link/dagLink.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst CID = __webpack_require__(/*! cids */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\\\")\\nconst assert = __webpack_require__(/*! assert */ \\\"./node_modules/assert/assert.js\\\")\\nconst withIs = __webpack_require__(/*! class-is */ \\\"./node_modules/class-is/index.js\\\")\\n\\n// Link represents an IPFS Merkle DAG Link between Nodes.\\nclass DAGLink {\\n constructor (name, size, cid) {\\n assert(cid, 'A link requires a cid to point to')\\n // assert(size, 'A link requires a size')\\n // note - links should include size, but this assert is disabled\\n // for now to maintain consistency with go-ipfs pinset\\n\\n this._name = name || ''\\n this._nameBuf = null\\n this._size = size\\n this._cid = new CID(cid)\\n }\\n\\n toString () {\\n return `DAGLink <${this._cid.toBaseEncodedString()} - name: \\\"${this.Name}\\\", size: ${this.Tsize}>`\\n }\\n\\n toJSON () {\\n if (!this._json) {\\n this._json = Object.freeze({\\n name: this.Name,\\n size: this.Tsize,\\n cid: this.Hash.toBaseEncodedString()\\n })\\n }\\n\\n return Object.assign({}, this._json)\\n }\\n\\n get Name () {\\n return this._name\\n }\\n\\n // Memoize the Buffer representation of name\\n // We need this to sort the links, otherwise\\n // we will reallocate new buffers every time\\n get nameAsBuffer () {\\n if (this._nameBuf !== null) {\\n return this._nameBuf\\n }\\n\\n this._nameBuf = Buffer.from(this._name)\\n return this._nameBuf\\n }\\n\\n set Name (name) {\\n throw new Error(\\\"Can't set property: 'name' is immutable\\\")\\n }\\n\\n get Tsize () {\\n return this._size\\n }\\n\\n set Tsize (size) {\\n throw new Error(\\\"Can't set property: 'size' is immutable\\\")\\n }\\n\\n get Hash () {\\n return this._cid\\n }\\n\\n set Hash (cid) {\\n throw new Error(\\\"Can't set property: 'cid' is immutable\\\")\\n }\\n}\\n\\nexports = module.exports = withIs(DAGLink, { className: 'DAGLink', symbolName: '@ipld/js-ipld-dag-pb/daglink' })\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-link/dagLink.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-link/index.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-link/index.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports = module.exports = __webpack_require__(/*! ./dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\nexports.util = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/src/dag-link/util.js\\\")\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-link/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-link/util.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-link/util.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst DAGLink = __webpack_require__(/*! ./dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\n\\nfunction createDagLinkFromB58EncodedHash (link) {\\n return new DAGLink(\\n link.Name || link.name || '',\\n link.Tsize || link.Size || link.size || 0,\\n link.Hash || link.hash || link.multihash || link.cid\\n )\\n}\\n\\nexports = module.exports\\nexports.createDagLinkFromB58EncodedHash = createDagLinkFromB58EncodedHash\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-link/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/addLink.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/addLink.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst sortLinks = __webpack_require__(/*! ./sortLinks */ \\\"./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js\\\")\\nconst DAGLink = __webpack_require__(/*! ../dag-link */ \\\"./node_modules/ipld-dag-pb/src/dag-link/index.js\\\")\\n\\nconst asDAGLink = (link) => {\\n if (DAGLink.isDAGLink(link)) {\\n // It's a DAGLink instance\\n // no need to do anything\\n return link\\n }\\n\\n // DAGNode.isDagNode() would be more appropriate here, but it can't be used\\n // as it would lead to circular dependencies as `addLink` is called from\\n // within the DAGNode object.\\n if (!('cid' in link ||\\n 'hash' in link ||\\n 'Hash' in link ||\\n 'multihash' in link)) {\\n throw new Error('Link must be a DAGLink or DAGLink-like. Convert the DAGNode into a DAGLink via `node.toDAGLink()`.')\\n }\\n\\n // It's a Object with name, multihash/hash/cid and size\\n return new DAGLink(link.Name || link.name, link.Tsize || link.size, link.Hash || link.multihash || link.hash || link.cid)\\n}\\n\\nconst addLink = (node, link) => {\\n const dagLink = asDAGLink(link)\\n node._links.push(dagLink)\\n node._links = sortLinks(node._links)\\n}\\n\\nmodule.exports = addLink\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/addLink.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/dagNode.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/dagNode.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst withIs = __webpack_require__(/*! class-is */ \\\"./node_modules/class-is/index.js\\\")\\nconst sortLinks = __webpack_require__(/*! ./sortLinks */ \\\"./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js\\\")\\nconst DAGLink = __webpack_require__(/*! ../dag-link/dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\nconst { serializeDAGNode } = __webpack_require__(/*! ../serialize.js */ \\\"./node_modules/ipld-dag-pb/src/serialize.js\\\")\\nconst toDAGLink = __webpack_require__(/*! ./toDagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-node/toDagLink.js\\\")\\nconst addLink = __webpack_require__(/*! ./addLink */ \\\"./node_modules/ipld-dag-pb/src/dag-node/addLink.js\\\")\\nconst rmLink = __webpack_require__(/*! ./rmLink */ \\\"./node_modules/ipld-dag-pb/src/dag-node/rmLink.js\\\")\\n\\nclass DAGNode {\\n constructor (data, links = [], serializedSize = null) {\\n if (!data) {\\n data = Buffer.alloc(0)\\n }\\n if (typeof data === 'string') {\\n data = Buffer.from(data)\\n }\\n if (!Buffer.isBuffer(data)) {\\n throw new Error('Passed \\\\'data\\\\' is not a buffer or a string!')\\n }\\n\\n if (serializedSize !== null && typeof serializedSize !== 'number') {\\n throw new Error('Passed \\\\'serializedSize\\\\' must be a number!')\\n }\\n\\n links = links.map((link) => {\\n return DAGLink.isDAGLink(link)\\n ? link\\n : DAGLink.util.createDagLinkFromB58EncodedHash(link)\\n })\\n links = sortLinks(links)\\n\\n this._data = data\\n this._links = links\\n this._serializedSize = serializedSize\\n this._size = null\\n }\\n\\n toJSON () {\\n if (!this._json) {\\n this._json = Object.freeze({\\n data: this.Data,\\n links: this._links.map((l) => l.toJSON()),\\n size: this.size\\n })\\n }\\n\\n return Object.assign({}, this._json)\\n }\\n\\n toString () {\\n return `DAGNode <data: \\\"${this.Data.toString('base64')}\\\", links: ${this.Links.length}, size: ${this.size}>`\\n }\\n\\n _invalidateCached () {\\n this._serializedSize = null\\n this._size = null\\n }\\n\\n addLink (link) {\\n this._invalidateCached()\\n return addLink(this, link)\\n }\\n\\n rmLink (link) {\\n this._invalidateCached()\\n return rmLink(this, link)\\n }\\n\\n // @returns {Promise.<DAGLink>}\\n toDAGLink (options) {\\n return toDAGLink(this, options)\\n }\\n\\n serialize () {\\n return serializeDAGNode({\\n Data: this._data,\\n Links: this._links\\n })\\n }\\n\\n get size () {\\n if (this._size === null) {\\n if (this._serializedSize === null) {\\n this._serializedSize = this.serialize().length\\n }\\n this._size = this._links.reduce((sum, l) => sum + l.Tsize, this._serializedSize)\\n }\\n\\n return this._size\\n }\\n\\n set size (size) {\\n throw new Error(\\\"Can't set property: 'size' is immutable\\\")\\n }\\n\\n // Getters for backwards compatible path resolving\\n get Data () {\\n return this._data\\n }\\n\\n set Data (_) {\\n throw new Error(\\\"Can't set property: 'Data' is immutable\\\")\\n }\\n\\n get Links () {\\n return this._links.map((link) => {\\n return {\\n Name: link.Name,\\n Tsize: link.Tsize,\\n Hash: link.Hash\\n }\\n })\\n }\\n\\n set Links (_) {\\n throw new Error(\\\"Can't set property: 'Links' is immutable\\\")\\n }\\n}\\n\\nexports = module.exports = withIs(DAGNode, { className: 'DAGNode', symbolName: '@ipld/js-ipld-dag-pb/dagnode' })\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/dagNode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/index.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/index.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports = module.exports = __webpack_require__(/*! ./dagNode */ \\\"./node_modules/ipld-dag-pb/src/dag-node/dagNode.js\\\")\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/rmLink.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/rmLink.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst CID = __webpack_require__(/*! cids */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\\\")\\n\\nconst rmLink = (dagNode, nameOrCid) => {\\n // It's a name\\n if (typeof nameOrCid === 'string') {\\n dagNode._links = dagNode._links.filter((link) => link.Name !== nameOrCid)\\n } else if (Buffer.isBuffer(nameOrCid) || CID.isCID(nameOrCid)) {\\n dagNode._links = dagNode._links.filter(\\n (link) => !link.Hash.equals(nameOrCid))\\n } else {\\n throw new Error('second arg needs to be a name or CID')\\n }\\n}\\n\\nmodule.exports = rmLink\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/rmLink.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst sort = __webpack_require__(/*! stable */ \\\"./node_modules/stable/stable.js\\\")\\n\\nconst linkSort = (a, b) => {\\n return Buffer.compare(a.nameAsBuffer, b.nameAsBuffer)\\n}\\n\\nconst sortLinks = (links) => {\\n return sort(links, linkSort)\\n}\\n\\nmodule.exports = sortLinks\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/toDagLink.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/toDagLink.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst DAGLink = __webpack_require__(/*! ../dag-link/dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\nconst genCid = __webpack_require__(/*! ../genCid */ \\\"./node_modules/ipld-dag-pb/src/genCid.js\\\")\\n\\n/*\\n * toDAGLink converts a DAGNode to a DAGLink\\n */\\nconst toDAGLink = async (node, options = {}) => {\\n const nodeCid = await genCid.cid(node.serialize(), options)\\n return new DAGLink(options.name || '', node.size, nodeCid)\\n}\\n\\nmodule.exports = toDAGLink\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/toDagLink.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag.proto.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag.proto.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nmodule.exports = `// An IPFS MerkleDAG Link\\nmessage PBLink {\\n\\n // multihash of the target object\\n optional bytes Hash = 1;\\n\\n // utf string name. should be unique per object\\n optional string Name = 2;\\n\\n // cumulative size of target object\\n optional uint64 Tsize = 3;\\n}\\n\\n// An IPFS MerkleDAG Node\\nmessage PBNode {\\n\\n // refs to other objects\\n repeated PBLink Links = 2;\\n\\n // opaque user data\\n optional bytes Data = 1;\\n}`\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag.proto.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/genCid.js\":\n/*!************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/genCid.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst CID = __webpack_require__(/*! cids */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\\\")\\nconst multicodec = __webpack_require__(/*! multicodec */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js\\\")\\nconst multihashing = __webpack_require__(/*! multihashing-async */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/index.js\\\")\\n\\nexports = module.exports\\n\\nexports.codec = multicodec.DAG_PB\\nexports.defaultHashAlg = multicodec.SHA2_256\\n\\n/**\\n * Calculate the CID of the binary blob.\\n *\\n * @param {Object} binaryBlob - Encoded IPLD Node\\n * @param {Object} [userOptions] - Options to create the CID\\n * @param {number} [userOptions.cidVersion=1] - CID version number\\n * @param {string} [UserOptions.hashAlg] - Defaults to the defaultHashAlg of the format\\n * @returns {Promise.<CID>}\\n */\\nconst cid = async (binaryBlob, userOptions) => {\\n const defaultOptions = { cidVersion: 1, hashAlg: exports.defaultHashAlg }\\n const options = Object.assign(defaultOptions, userOptions)\\n\\n const multihash = await multihashing(binaryBlob, options.hashAlg)\\n const codecName = multicodec.print[exports.codec]\\n const cid = new CID(options.cidVersion, codecName, multihash)\\n\\n return cid\\n}\\n\\nexports.cid = cid\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/genCid.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/index.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/index.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.DAGNode = __webpack_require__(/*! ./dag-node */ \\\"./node_modules/ipld-dag-pb/src/dag-node/index.js\\\")\\nexports.DAGLink = __webpack_require__(/*! ./dag-link */ \\\"./node_modules/ipld-dag-pb/src/dag-link/index.js\\\")\\n\\n/*\\n * Functions to fulfil IPLD Format interface\\n * https://github.com/ipld/interface-ipld-format\\n */\\nexports.resolver = __webpack_require__(/*! ./resolver */ \\\"./node_modules/ipld-dag-pb/src/resolver.js\\\")\\nexports.util = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/src/util.js\\\")\\nexports.codec = exports.util.codec\\nexports.defaultHashAlg = exports.util.defaultHashAlg\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/resolver.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/resolver.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst CID = __webpack_require__(/*! cids */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\\\")\\n\\nconst util = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/src/util.js\\\")\\n\\n/**\\n * Resolves a path within a PB block.\\n *\\n * Returns the value or a link and the partial mising path. This way the\\n * IPLD Resolver can fetch the link and continue to resolve.\\n *\\n * @param {Buffer} binaryBlob - Binary representation of a PB block\\n * @param {string} [path='/'] - Path that should be resolved\\n * @returns {Object} result - Result of the path it it was resolved successfully\\n * @returns {*} result.value - Value the path resolves to\\n * @returns {string} result.remainderPath - If the path resolves half-way to a\\n * link, then the `remainderPath` is the part after the link that can be used\\n * for further resolving\\n */\\nexports.resolve = (binaryBlob, path) => {\\n let node = util.deserialize(binaryBlob)\\n\\n const parts = path.split('/').filter(Boolean)\\n while (parts.length) {\\n const key = parts.shift()\\n if (node[key] === undefined) {\\n // There might be a matching named link\\n for (const link of node.Links) {\\n if (link.Name === key) {\\n return {\\n value: link.Hash,\\n remainderPath: parts.join('/')\\n }\\n }\\n }\\n\\n // There wasn't even a matching named link\\n throw new Error(`Object has no property '${key}'`)\\n }\\n\\n node = node[key]\\n if (CID.isCID(node)) {\\n return {\\n value: node,\\n remainderPath: parts.join('/')\\n }\\n }\\n }\\n\\n return {\\n value: node,\\n remainderPath: ''\\n }\\n}\\n\\n/**\\n * Return all available paths of a block.\\n *\\n * @generator\\n * @param {Buffer} binaryBlob - Binary representation of a PB block\\n * @yields {string} - A single path\\n */\\nexports.tree = function * (binaryBlob) {\\n const node = util.deserialize(binaryBlob)\\n\\n // There is always a `Data` and `Links` property\\n yield 'Data'\\n yield 'Links'\\n for (let ii = 0; ii < node.Links.length; ii++) {\\n yield `Links/${ii}`\\n yield `Links/${ii}/Name`\\n yield `Links/${ii}/Tsize`\\n yield `Links/${ii}/Hash`\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/resolver.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/serialize.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/serialize.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst protons = __webpack_require__(/*! protons */ \\\"./node_modules/protons/src/index.js\\\")\\nconst proto = protons(__webpack_require__(/*! ./dag.proto.js */ \\\"./node_modules/ipld-dag-pb/src/dag.proto.js\\\"))\\nconst DAGLink = __webpack_require__(/*! ./dag-link/dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\n\\nexports = module.exports\\n\\nconst toProtoBuf = (node) => {\\n const pbn = {}\\n\\n if (node.Data && node.Data.length > 0) {\\n pbn.Data = node.Data\\n } else {\\n // NOTE: this has to be null in order to match go-ipfs serialization\\n // `null !== new Buffer(0)`\\n pbn.Data = null\\n }\\n\\n if (node.Links && node.Links.length > 0) {\\n pbn.Links = node.Links\\n .map((link) => ({\\n Hash: link.Hash.buffer,\\n Name: link.Name,\\n Tsize: link.Tsize\\n }))\\n } else {\\n pbn.Links = null\\n }\\n\\n return pbn\\n}\\n\\n/**\\n * Serialize internal representation into a binary PB block.\\n *\\n * @param {Object} node - Internal representation of a PB block\\n * @returns {Buffer} - The encoded binary representation\\n */\\nconst serializeDAGNode = (node) => {\\n const data = node.Data\\n const links = node.Links || []\\n\\n const serialized = proto.PBNode.encode(toProtoBuf({\\n Data: data,\\n Links: links\\n }))\\n\\n return serialized\\n}\\n\\n// Serialize an object where the `Links` might not be a `DAGLink` instance yet\\nconst serializeDAGNodeLike = (data, links = []) => {\\n const node = { Data: data }\\n node.Links = links.map((link) => {\\n return DAGLink.isDAGLink(link)\\n ? link\\n : DAGLink.util.createDagLinkFromB58EncodedHash(link)\\n })\\n return serializeDAGNode(node)\\n}\\n\\nexports.serializeDAGNode = serializeDAGNode\\nexports.serializeDAGNodeLike = serializeDAGNodeLike\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/serialize.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/util.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/util.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst protons = __webpack_require__(/*! protons */ \\\"./node_modules/protons/src/index.js\\\")\\nconst proto = protons(__webpack_require__(/*! ./dag.proto */ \\\"./node_modules/ipld-dag-pb/src/dag.proto.js\\\"))\\nconst DAGLink = __webpack_require__(/*! ./dag-link/dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\nconst DAGNode = __webpack_require__(/*! ./dag-node/dagNode */ \\\"./node_modules/ipld-dag-pb/src/dag-node/dagNode.js\\\")\\nconst { serializeDAGNodeLike } = __webpack_require__(/*! ./serialize */ \\\"./node_modules/ipld-dag-pb/src/serialize.js\\\")\\nconst genCid = __webpack_require__(/*! ./genCid */ \\\"./node_modules/ipld-dag-pb/src/genCid.js\\\")\\n\\nexports = module.exports\\n\\nexports.codec = genCid.codec\\nexports.defaultHashAlg = genCid.defaultHashAlg\\n\\n/**\\n * Calculate the CID of the binary blob.\\n *\\n * @param {Object} binaryBlob - Encoded IPLD Node\\n * @param {Object} [userOptions] - Options to create the CID\\n * @param {number} [userOptions.cidVersion=1] - CID version number\\n * @param {string} [UserOptions.hashAlg] - Defaults to the defaultHashAlg of the format\\n * @returns {Promise.<CID>}\\n */\\nconst cid = (binaryBlob, userOptions) => {\\n return genCid.cid(binaryBlob, userOptions)\\n}\\n\\n/**\\n * Serialize internal representation into a binary PB block.\\n *\\n * @param {Object} node - Internal representation of a CBOR block\\n * @returns {Buffer} - The encoded binary representation\\n */\\nconst serialize = (node) => {\\n if (DAGNode.isDAGNode(node)) {\\n return node.serialize()\\n } else {\\n return serializeDAGNodeLike(node.Data, node.Links)\\n }\\n}\\n\\n/**\\n * Deserialize PB block into the internal representation.\\n *\\n * @param {Buffer} buffer - Binary representation of a PB block\\n * @returns {Object} - An object that conforms to the IPLD Data Model\\n */\\nconst deserialize = (buffer) => {\\n const pbn = proto.PBNode.decode(buffer)\\n\\n const links = pbn.Links.map((link) => {\\n return new DAGLink(link.Name, link.Tsize, link.Hash)\\n })\\n\\n const data = pbn.Data == null ? Buffer.alloc(0) : pbn.Data\\n\\n return new DAGNode(data, links, buffer.length)\\n}\\n\\nexports.serialize = serialize\\nexports.deserialize = deserialize\\nexports.cid = cid\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/isarray/index.js\":\n/*!***************************************!*\\\n !*** ./node_modules/isarray/index.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"var toString = {}.toString;\\n\\nmodule.exports = Array.isArray || function (arr) {\\n return toString.call(arr) == '[object Array]';\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/isarray/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/js-sha256/src/sha256.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/js-sha256/src/sha256.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\\n *\\n * @version 0.9.0\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\n * @copyright Chen, Yi-Cyuan 2014-2017\\n * @license MIT\\n */\\n/*jslint bitwise: true */\\n(function () {\\n 'use strict';\\n\\n var ERROR = 'input is invalid type';\\n var WINDOW = typeof window === 'object';\\n var root = WINDOW ? window : {};\\n if (root.JS_SHA256_NO_WINDOW) {\\n WINDOW = false;\\n }\\n var WEB_WORKER = !WINDOW && typeof self === 'object';\\n var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\n if (NODE_JS) {\\n root = global;\\n } else if (WEB_WORKER) {\\n root = self;\\n }\\n var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === 'object' && module.exports;\\n var AMD = true && __webpack_require__(/*! !webpack amd options */ \\\"./node_modules/webpack/buildin/amd-options.js\\\");\\n var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\\n var HEX_CHARS = '0123456789abcdef'.split('');\\n var EXTRA = [-2147483648, 8388608, 32768, 128];\\n var SHIFT = [24, 16, 8, 0];\\n var K = [\\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\\n ];\\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\\n\\n var blocks = [];\\n\\n if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {\\n Array.isArray = function (obj) {\\n return Object.prototype.toString.call(obj) === '[object Array]';\\n };\\n }\\n\\n if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\\n ArrayBuffer.isView = function (obj) {\\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\\n };\\n }\\n\\n var createOutputMethod = function (outputType, is224) {\\n return function (message) {\\n return new Sha256(is224, true).update(message)[outputType]();\\n };\\n };\\n\\n var createMethod = function (is224) {\\n var method = createOutputMethod('hex', is224);\\n if (NODE_JS) {\\n method = nodeWrap(method, is224);\\n }\\n method.create = function () {\\n return new Sha256(is224);\\n };\\n method.update = function (message) {\\n return method.create().update(message);\\n };\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createOutputMethod(type, is224);\\n }\\n return method;\\n };\\n\\n var nodeWrap = function (method, is224) {\\n var crypto = eval(\\\"require('crypto')\\\");\\n var Buffer = eval(\\\"require('buffer').Buffer\\\");\\n var algorithm = is224 ? 'sha224' : 'sha256';\\n var nodeMethod = function (message) {\\n if (typeof message === 'string') {\\n return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');\\n } else {\\n if (message === null || message === undefined) {\\n throw new Error(ERROR);\\n } else if (message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n }\\n }\\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\\n message.constructor === Buffer) {\\n return crypto.createHash(algorithm).update(new Buffer(message)).digest('hex');\\n } else {\\n return method(message);\\n }\\n };\\n return nodeMethod;\\n };\\n\\n var createHmacOutputMethod = function (outputType, is224) {\\n return function (key, message) {\\n return new HmacSha256(key, is224, true).update(message)[outputType]();\\n };\\n };\\n\\n var createHmacMethod = function (is224) {\\n var method = createHmacOutputMethod('hex', is224);\\n method.create = function (key) {\\n return new HmacSha256(key, is224);\\n };\\n method.update = function (key, message) {\\n return method.create(key).update(message);\\n };\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createHmacOutputMethod(type, is224);\\n }\\n return method;\\n };\\n\\n function Sha256(is224, sharedMemory) {\\n if (sharedMemory) {\\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\\n this.blocks = blocks;\\n } else {\\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\\n }\\n\\n if (is224) {\\n this.h0 = 0xc1059ed8;\\n this.h1 = 0x367cd507;\\n this.h2 = 0x3070dd17;\\n this.h3 = 0xf70e5939;\\n this.h4 = 0xffc00b31;\\n this.h5 = 0x68581511;\\n this.h6 = 0x64f98fa7;\\n this.h7 = 0xbefa4fa4;\\n } else { // 256\\n this.h0 = 0x6a09e667;\\n this.h1 = 0xbb67ae85;\\n this.h2 = 0x3c6ef372;\\n this.h3 = 0xa54ff53a;\\n this.h4 = 0x510e527f;\\n this.h5 = 0x9b05688c;\\n this.h6 = 0x1f83d9ab;\\n this.h7 = 0x5be0cd19;\\n }\\n\\n this.block = this.start = this.bytes = this.hBytes = 0;\\n this.finalized = this.hashed = false;\\n this.first = true;\\n this.is224 = is224;\\n }\\n\\n Sha256.prototype.update = function (message) {\\n if (this.finalized) {\\n return;\\n }\\n var notString, type = typeof message;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (message === null) {\\n throw new Error(ERROR);\\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n } else if (!Array.isArray(message)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\\n throw new Error(ERROR);\\n }\\n }\\n } else {\\n throw new Error(ERROR);\\n }\\n notString = true;\\n }\\n var code, index = 0, i, length = message.length, blocks = this.blocks;\\n\\n while (index < length) {\\n if (this.hashed) {\\n this.hashed = false;\\n blocks[0] = this.block;\\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\\n }\\n\\n if (notString) {\\n for (i = this.start; index < length && i < 64; ++index) {\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\n }\\n } else {\\n for (i = this.start; index < length && i < 64; ++index) {\\n code = message.charCodeAt(index);\\n if (code < 0x80) {\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\n } else if (code < 0x800) {\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else if (code < 0xd800 || code >= 0xe000) {\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n }\\n }\\n }\\n\\n this.lastByteIndex = i;\\n this.bytes += i - this.start;\\n if (i >= 64) {\\n this.block = blocks[16];\\n this.start = i - 64;\\n this.hash();\\n this.hashed = true;\\n } else {\\n this.start = i;\\n }\\n }\\n if (this.bytes > 4294967295) {\\n this.hBytes += this.bytes / 4294967296 << 0;\\n this.bytes = this.bytes % 4294967296;\\n }\\n return this;\\n };\\n\\n Sha256.prototype.finalize = function () {\\n if (this.finalized) {\\n return;\\n }\\n this.finalized = true;\\n var blocks = this.blocks, i = this.lastByteIndex;\\n blocks[16] = this.block;\\n blocks[i >> 2] |= EXTRA[i & 3];\\n this.block = blocks[16];\\n if (i >= 56) {\\n if (!this.hashed) {\\n this.hash();\\n }\\n blocks[0] = this.block;\\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\\n }\\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\\n blocks[15] = this.bytes << 3;\\n this.hash();\\n };\\n\\n Sha256.prototype.hash = function () {\\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,\\n h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;\\n\\n for (j = 16; j < 64; ++j) {\\n // rightrotate\\n t1 = blocks[j - 15];\\n s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);\\n t1 = blocks[j - 2];\\n s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);\\n blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;\\n }\\n\\n bc = b & c;\\n for (j = 0; j < 64; j += 4) {\\n if (this.first) {\\n if (this.is224) {\\n ab = 300032;\\n t1 = blocks[0] - 1413257819;\\n h = t1 - 150054599 << 0;\\n d = t1 + 24177077 << 0;\\n } else {\\n ab = 704751109;\\n t1 = blocks[0] - 210244248;\\n h = t1 - 1521486534 << 0;\\n d = t1 + 143694565 << 0;\\n }\\n this.first = false;\\n } else {\\n s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));\\n s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));\\n ab = a & b;\\n maj = ab ^ (a & c) ^ bc;\\n ch = (e & f) ^ (~e & g);\\n t1 = h + s1 + ch + K[j] + blocks[j];\\n t2 = s0 + maj;\\n h = d + t1 << 0;\\n d = t1 + t2 << 0;\\n }\\n s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));\\n s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));\\n da = d & a;\\n maj = da ^ (d & b) ^ ab;\\n ch = (h & e) ^ (~h & f);\\n t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];\\n t2 = s0 + maj;\\n g = c + t1 << 0;\\n c = t1 + t2 << 0;\\n s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));\\n s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));\\n cd = c & d;\\n maj = cd ^ (c & a) ^ da;\\n ch = (g & h) ^ (~g & e);\\n t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];\\n t2 = s0 + maj;\\n f = b + t1 << 0;\\n b = t1 + t2 << 0;\\n s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));\\n s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));\\n bc = b & c;\\n maj = bc ^ (b & d) ^ cd;\\n ch = (f & g) ^ (~f & h);\\n t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];\\n t2 = s0 + maj;\\n e = a + t1 << 0;\\n a = t1 + t2 << 0;\\n }\\n\\n this.h0 = this.h0 + a << 0;\\n this.h1 = this.h1 + b << 0;\\n this.h2 = this.h2 + c << 0;\\n this.h3 = this.h3 + d << 0;\\n this.h4 = this.h4 + e << 0;\\n this.h5 = this.h5 + f << 0;\\n this.h6 = this.h6 + g << 0;\\n this.h7 = this.h7 + h << 0;\\n };\\n\\n Sha256.prototype.hex = function () {\\n this.finalize();\\n\\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\\n h6 = this.h6, h7 = this.h7;\\n\\n var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +\\n HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +\\n HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +\\n HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +\\n HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +\\n HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +\\n HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +\\n HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +\\n HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];\\n if (!this.is224) {\\n hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +\\n HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +\\n HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +\\n HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];\\n }\\n return hex;\\n };\\n\\n Sha256.prototype.toString = Sha256.prototype.hex;\\n\\n Sha256.prototype.digest = function () {\\n this.finalize();\\n\\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\\n h6 = this.h6, h7 = this.h7;\\n\\n var arr = [\\n (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\\n (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\\n (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\\n (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\\n (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF,\\n (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF,\\n (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF\\n ];\\n if (!this.is224) {\\n arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF);\\n }\\n return arr;\\n };\\n\\n Sha256.prototype.array = Sha256.prototype.digest;\\n\\n Sha256.prototype.arrayBuffer = function () {\\n this.finalize();\\n\\n var buffer = new ArrayBuffer(this.is224 ? 28 : 32);\\n var dataView = new DataView(buffer);\\n dataView.setUint32(0, this.h0);\\n dataView.setUint32(4, this.h1);\\n dataView.setUint32(8, this.h2);\\n dataView.setUint32(12, this.h3);\\n dataView.setUint32(16, this.h4);\\n dataView.setUint32(20, this.h5);\\n dataView.setUint32(24, this.h6);\\n if (!this.is224) {\\n dataView.setUint32(28, this.h7);\\n }\\n return buffer;\\n };\\n\\n function HmacSha256(key, is224, sharedMemory) {\\n var i, type = typeof key;\\n if (type === 'string') {\\n var bytes = [], length = key.length, index = 0, code;\\n for (i = 0; i < length; ++i) {\\n code = key.charCodeAt(i);\\n if (code < 0x80) {\\n bytes[index++] = code;\\n } else if (code < 0x800) {\\n bytes[index++] = (0xc0 | (code >> 6));\\n bytes[index++] = (0x80 | (code & 0x3f));\\n } else if (code < 0xd800 || code >= 0xe000) {\\n bytes[index++] = (0xe0 | (code >> 12));\\n bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\\n bytes[index++] = (0x80 | (code & 0x3f));\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\\n bytes[index++] = (0xf0 | (code >> 18));\\n bytes[index++] = (0x80 | ((code >> 12) & 0x3f));\\n bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\\n bytes[index++] = (0x80 | (code & 0x3f));\\n }\\n }\\n key = bytes;\\n } else {\\n if (type === 'object') {\\n if (key === null) {\\n throw new Error(ERROR);\\n } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {\\n key = new Uint8Array(key);\\n } else if (!Array.isArray(key)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {\\n throw new Error(ERROR);\\n }\\n }\\n } else {\\n throw new Error(ERROR);\\n }\\n }\\n\\n if (key.length > 64) {\\n key = (new Sha256(is224, true)).update(key).array();\\n }\\n\\n var oKeyPad = [], iKeyPad = [];\\n for (i = 0; i < 64; ++i) {\\n var b = key[i] || 0;\\n oKeyPad[i] = 0x5c ^ b;\\n iKeyPad[i] = 0x36 ^ b;\\n }\\n\\n Sha256.call(this, is224, sharedMemory);\\n\\n this.update(iKeyPad);\\n this.oKeyPad = oKeyPad;\\n this.inner = true;\\n this.sharedMemory = sharedMemory;\\n }\\n HmacSha256.prototype = new Sha256();\\n\\n HmacSha256.prototype.finalize = function () {\\n Sha256.prototype.finalize.call(this);\\n if (this.inner) {\\n this.inner = false;\\n var innerHash = this.array();\\n Sha256.call(this, this.is224, this.sharedMemory);\\n this.update(this.oKeyPad);\\n this.update(innerHash);\\n Sha256.prototype.finalize.call(this);\\n }\\n };\\n\\n var exports = createMethod();\\n exports.sha256 = exports;\\n exports.sha224 = createMethod(true);\\n exports.sha256.hmac = createHmacMethod();\\n exports.sha224.hmac = createHmacMethod(true);\\n\\n if (COMMON_JS) {\\n module.exports = exports;\\n } else {\\n root.sha256 = exports.sha256;\\n root.sha224 = exports.sha224;\\n if (AMD) {\\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\\n return exports;\\n }).call(exports, __webpack_require__, exports, module),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n }\\n }\\n})();\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/js-sha256/src/sha256.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/js-sha3/src/sha3.js\":\n/*!******************************************!*\\\n !*** ./node_modules/js-sha3/src/sha3.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {/**\\r\\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\\r\\n *\\r\\n * @version 0.5.7\\r\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\r\\n * @copyright Chen, Yi-Cyuan 2015-2016\\r\\n * @license MIT\\r\\n */\\r\\n/*jslint bitwise: true */\\r\\n(function () {\\r\\n 'use strict';\\r\\n\\r\\n var root = typeof window === 'object' ? window : {};\\r\\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\r\\n if (NODE_JS) {\\r\\n root = global;\\r\\n }\\r\\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\\r\\n var HEX_CHARS = '0123456789abcdef'.split('');\\r\\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\\r\\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\\r\\n var PADDING = [6, 1536, 393216, 100663296];\\r\\n var SHIFT = [0, 8, 16, 24];\\r\\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\\r\\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\\r\\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\\r\\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\\r\\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\\r\\n var BITS = [224, 256, 384, 512];\\r\\n var SHAKE_BITS = [128, 256];\\r\\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array'];\\r\\n\\r\\n var createOutputMethod = function (bits, padding, outputType) {\\r\\n return function (message) {\\r\\n return new Keccak(bits, padding, bits).update(message)[outputType]();\\r\\n };\\r\\n };\\r\\n\\r\\n var createShakeOutputMethod = function (bits, padding, outputType) {\\r\\n return function (message, outputBits) {\\r\\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\\r\\n };\\r\\n };\\r\\n\\r\\n var createMethod = function (bits, padding) {\\r\\n var method = createOutputMethod(bits, padding, 'hex');\\r\\n method.create = function () {\\r\\n return new Keccak(bits, padding, bits);\\r\\n };\\r\\n method.update = function (message) {\\r\\n return method.create().update(message);\\r\\n };\\r\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\r\\n var type = OUTPUT_TYPES[i];\\r\\n method[type] = createOutputMethod(bits, padding, type);\\r\\n }\\r\\n return method;\\r\\n };\\r\\n\\r\\n var createShakeMethod = function (bits, padding) {\\r\\n var method = createShakeOutputMethod(bits, padding, 'hex');\\r\\n method.create = function (outputBits) {\\r\\n return new Keccak(bits, padding, outputBits);\\r\\n };\\r\\n method.update = function (message, outputBits) {\\r\\n return method.create(outputBits).update(message);\\r\\n };\\r\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\r\\n var type = OUTPUT_TYPES[i];\\r\\n method[type] = createShakeOutputMethod(bits, padding, type);\\r\\n }\\r\\n return method;\\r\\n };\\r\\n\\r\\n var algorithms = [\\r\\n {name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod},\\r\\n {name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod},\\r\\n {name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod}\\r\\n ];\\r\\n\\r\\n var methods = {}, methodNames = [];\\r\\n\\r\\n for (var i = 0; i < algorithms.length; ++i) {\\r\\n var algorithm = algorithms[i];\\r\\n var bits = algorithm.bits;\\r\\n for (var j = 0; j < bits.length; ++j) {\\r\\n var methodName = algorithm.name +'_' + bits[j];\\r\\n methodNames.push(methodName);\\r\\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\\r\\n }\\r\\n }\\r\\n\\r\\n function Keccak(bits, padding, outputBits) {\\r\\n this.blocks = [];\\r\\n this.s = [];\\r\\n this.padding = padding;\\r\\n this.outputBits = outputBits;\\r\\n this.reset = true;\\r\\n this.block = 0;\\r\\n this.start = 0;\\r\\n this.blockCount = (1600 - (bits << 1)) >> 5;\\r\\n this.byteCount = this.blockCount << 2;\\r\\n this.outputBlocks = outputBits >> 5;\\r\\n this.extraBytes = (outputBits & 31) >> 3;\\r\\n\\r\\n for (var i = 0; i < 50; ++i) {\\r\\n this.s[i] = 0;\\r\\n }\\r\\n }\\r\\n\\r\\n Keccak.prototype.update = function (message) {\\r\\n var notString = typeof message !== 'string';\\r\\n if (notString && message.constructor === ArrayBuffer) {\\r\\n message = new Uint8Array(message);\\r\\n }\\r\\n var length = message.length, blocks = this.blocks, byteCount = this.byteCount,\\r\\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\\r\\n\\r\\n while (index < length) {\\r\\n if (this.reset) {\\r\\n this.reset = false;\\r\\n blocks[0] = this.block;\\r\\n for (i = 1; i < blockCount + 1; ++i) {\\r\\n blocks[i] = 0;\\r\\n }\\r\\n }\\r\\n if (notString) {\\r\\n for (i = this.start; index < length && i < byteCount; ++index) {\\r\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\r\\n }\\r\\n } else {\\r\\n for (i = this.start; index < length && i < byteCount; ++index) {\\r\\n code = message.charCodeAt(index);\\r\\n if (code < 0x80) {\\r\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\r\\n } else if (code < 0x800) {\\r\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\r\\n } else if (code < 0xd800 || code >= 0xe000) {\\r\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\r\\n } else {\\r\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\r\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\r\\n }\\r\\n }\\r\\n }\\r\\n this.lastByteIndex = i;\\r\\n if (i >= byteCount) {\\r\\n this.start = i - byteCount;\\r\\n this.block = blocks[blockCount];\\r\\n for (i = 0; i < blockCount; ++i) {\\r\\n s[i] ^= blocks[i];\\r\\n }\\r\\n f(s);\\r\\n this.reset = true;\\r\\n } else {\\r\\n this.start = i;\\r\\n }\\r\\n }\\r\\n return this;\\r\\n };\\r\\n\\r\\n Keccak.prototype.finalize = function () {\\r\\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\\r\\n blocks[i >> 2] |= this.padding[i & 3];\\r\\n if (this.lastByteIndex === this.byteCount) {\\r\\n blocks[0] = blocks[blockCount];\\r\\n for (i = 1; i < blockCount + 1; ++i) {\\r\\n blocks[i] = 0;\\r\\n }\\r\\n }\\r\\n blocks[blockCount - 1] |= 0x80000000;\\r\\n for (i = 0; i < blockCount; ++i) {\\r\\n s[i] ^= blocks[i];\\r\\n }\\r\\n f(s);\\r\\n };\\r\\n\\r\\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\\r\\n this.finalize();\\r\\n\\r\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\r\\n extraBytes = this.extraBytes, i = 0, j = 0;\\r\\n var hex = '', block;\\r\\n while (j < outputBlocks) {\\r\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\r\\n block = s[i];\\r\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\\r\\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\\r\\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\\r\\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\\r\\n }\\r\\n if (j % blockCount === 0) {\\r\\n f(s);\\r\\n i = 0;\\r\\n }\\r\\n }\\r\\n if (extraBytes) {\\r\\n block = s[i];\\r\\n if (extraBytes > 0) {\\r\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\\r\\n }\\r\\n if (extraBytes > 1) {\\r\\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\\r\\n }\\r\\n if (extraBytes > 2) {\\r\\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\\r\\n }\\r\\n }\\r\\n return hex;\\r\\n };\\r\\n\\r\\n Keccak.prototype.arrayBuffer = function () {\\r\\n this.finalize();\\r\\n\\r\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\r\\n extraBytes = this.extraBytes, i = 0, j = 0;\\r\\n var bytes = this.outputBits >> 3;\\r\\n var buffer;\\r\\n if (extraBytes) {\\r\\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\\r\\n } else {\\r\\n buffer = new ArrayBuffer(bytes);\\r\\n }\\r\\n var array = new Uint32Array(buffer);\\r\\n while (j < outputBlocks) {\\r\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\r\\n array[j] = s[i];\\r\\n }\\r\\n if (j % blockCount === 0) {\\r\\n f(s);\\r\\n }\\r\\n }\\r\\n if (extraBytes) {\\r\\n array[i] = s[i];\\r\\n buffer = buffer.slice(0, bytes);\\r\\n }\\r\\n return buffer;\\r\\n };\\r\\n\\r\\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\\r\\n\\r\\n Keccak.prototype.digest = Keccak.prototype.array = function () {\\r\\n this.finalize();\\r\\n\\r\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\r\\n extraBytes = this.extraBytes, i = 0, j = 0;\\r\\n var array = [], offset, block;\\r\\n while (j < outputBlocks) {\\r\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\r\\n offset = j << 2;\\r\\n block = s[i];\\r\\n array[offset] = block & 0xFF;\\r\\n array[offset + 1] = (block >> 8) & 0xFF;\\r\\n array[offset + 2] = (block >> 16) & 0xFF;\\r\\n array[offset + 3] = (block >> 24) & 0xFF;\\r\\n }\\r\\n if (j % blockCount === 0) {\\r\\n f(s);\\r\\n }\\r\\n }\\r\\n if (extraBytes) {\\r\\n offset = j << 2;\\r\\n block = s[i];\\r\\n if (extraBytes > 0) {\\r\\n array[offset] = block & 0xFF;\\r\\n }\\r\\n if (extraBytes > 1) {\\r\\n array[offset + 1] = (block >> 8) & 0xFF;\\r\\n }\\r\\n if (extraBytes > 2) {\\r\\n array[offset + 2] = (block >> 16) & 0xFF;\\r\\n }\\r\\n }\\r\\n return array;\\r\\n };\\r\\n\\r\\n var f = function (s) {\\r\\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\\r\\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\\r\\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\\r\\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\\r\\n for (n = 0; n < 48; n += 2) {\\r\\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\\r\\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\\r\\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\\r\\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\\r\\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\\r\\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\\r\\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\\r\\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\\r\\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\\r\\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\\r\\n\\r\\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\\r\\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\\r\\n s[0] ^= h;\\r\\n s[1] ^= l;\\r\\n s[10] ^= h;\\r\\n s[11] ^= l;\\r\\n s[20] ^= h;\\r\\n s[21] ^= l;\\r\\n s[30] ^= h;\\r\\n s[31] ^= l;\\r\\n s[40] ^= h;\\r\\n s[41] ^= l;\\r\\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\\r\\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\\r\\n s[2] ^= h;\\r\\n s[3] ^= l;\\r\\n s[12] ^= h;\\r\\n s[13] ^= l;\\r\\n s[22] ^= h;\\r\\n s[23] ^= l;\\r\\n s[32] ^= h;\\r\\n s[33] ^= l;\\r\\n s[42] ^= h;\\r\\n s[43] ^= l;\\r\\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\\r\\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\\r\\n s[4] ^= h;\\r\\n s[5] ^= l;\\r\\n s[14] ^= h;\\r\\n s[15] ^= l;\\r\\n s[24] ^= h;\\r\\n s[25] ^= l;\\r\\n s[34] ^= h;\\r\\n s[35] ^= l;\\r\\n s[44] ^= h;\\r\\n s[45] ^= l;\\r\\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\\r\\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\\r\\n s[6] ^= h;\\r\\n s[7] ^= l;\\r\\n s[16] ^= h;\\r\\n s[17] ^= l;\\r\\n s[26] ^= h;\\r\\n s[27] ^= l;\\r\\n s[36] ^= h;\\r\\n s[37] ^= l;\\r\\n s[46] ^= h;\\r\\n s[47] ^= l;\\r\\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\\r\\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\\r\\n s[8] ^= h;\\r\\n s[9] ^= l;\\r\\n s[18] ^= h;\\r\\n s[19] ^= l;\\r\\n s[28] ^= h;\\r\\n s[29] ^= l;\\r\\n s[38] ^= h;\\r\\n s[39] ^= l;\\r\\n s[48] ^= h;\\r\\n s[49] ^= l;\\r\\n\\r\\n b0 = s[0];\\r\\n b1 = s[1];\\r\\n b32 = (s[11] << 4) | (s[10] >>> 28);\\r\\n b33 = (s[10] << 4) | (s[11] >>> 28);\\r\\n b14 = (s[20] << 3) | (s[21] >>> 29);\\r\\n b15 = (s[21] << 3) | (s[20] >>> 29);\\r\\n b46 = (s[31] << 9) | (s[30] >>> 23);\\r\\n b47 = (s[30] << 9) | (s[31] >>> 23);\\r\\n b28 = (s[40] << 18) | (s[41] >>> 14);\\r\\n b29 = (s[41] << 18) | (s[40] >>> 14);\\r\\n b20 = (s[2] << 1) | (s[3] >>> 31);\\r\\n b21 = (s[3] << 1) | (s[2] >>> 31);\\r\\n b2 = (s[13] << 12) | (s[12] >>> 20);\\r\\n b3 = (s[12] << 12) | (s[13] >>> 20);\\r\\n b34 = (s[22] << 10) | (s[23] >>> 22);\\r\\n b35 = (s[23] << 10) | (s[22] >>> 22);\\r\\n b16 = (s[33] << 13) | (s[32] >>> 19);\\r\\n b17 = (s[32] << 13) | (s[33] >>> 19);\\r\\n b48 = (s[42] << 2) | (s[43] >>> 30);\\r\\n b49 = (s[43] << 2) | (s[42] >>> 30);\\r\\n b40 = (s[5] << 30) | (s[4] >>> 2);\\r\\n b41 = (s[4] << 30) | (s[5] >>> 2);\\r\\n b22 = (s[14] << 6) | (s[15] >>> 26);\\r\\n b23 = (s[15] << 6) | (s[14] >>> 26);\\r\\n b4 = (s[25] << 11) | (s[24] >>> 21);\\r\\n b5 = (s[24] << 11) | (s[25] >>> 21);\\r\\n b36 = (s[34] << 15) | (s[35] >>> 17);\\r\\n b37 = (s[35] << 15) | (s[34] >>> 17);\\r\\n b18 = (s[45] << 29) | (s[44] >>> 3);\\r\\n b19 = (s[44] << 29) | (s[45] >>> 3);\\r\\n b10 = (s[6] << 28) | (s[7] >>> 4);\\r\\n b11 = (s[7] << 28) | (s[6] >>> 4);\\r\\n b42 = (s[17] << 23) | (s[16] >>> 9);\\r\\n b43 = (s[16] << 23) | (s[17] >>> 9);\\r\\n b24 = (s[26] << 25) | (s[27] >>> 7);\\r\\n b25 = (s[27] << 25) | (s[26] >>> 7);\\r\\n b6 = (s[36] << 21) | (s[37] >>> 11);\\r\\n b7 = (s[37] << 21) | (s[36] >>> 11);\\r\\n b38 = (s[47] << 24) | (s[46] >>> 8);\\r\\n b39 = (s[46] << 24) | (s[47] >>> 8);\\r\\n b30 = (s[8] << 27) | (s[9] >>> 5);\\r\\n b31 = (s[9] << 27) | (s[8] >>> 5);\\r\\n b12 = (s[18] << 20) | (s[19] >>> 12);\\r\\n b13 = (s[19] << 20) | (s[18] >>> 12);\\r\\n b44 = (s[29] << 7) | (s[28] >>> 25);\\r\\n b45 = (s[28] << 7) | (s[29] >>> 25);\\r\\n b26 = (s[38] << 8) | (s[39] >>> 24);\\r\\n b27 = (s[39] << 8) | (s[38] >>> 24);\\r\\n b8 = (s[48] << 14) | (s[49] >>> 18);\\r\\n b9 = (s[49] << 14) | (s[48] >>> 18);\\r\\n\\r\\n s[0] = b0 ^ (~b2 & b4);\\r\\n s[1] = b1 ^ (~b3 & b5);\\r\\n s[10] = b10 ^ (~b12 & b14);\\r\\n s[11] = b11 ^ (~b13 & b15);\\r\\n s[20] = b20 ^ (~b22 & b24);\\r\\n s[21] = b21 ^ (~b23 & b25);\\r\\n s[30] = b30 ^ (~b32 & b34);\\r\\n s[31] = b31 ^ (~b33 & b35);\\r\\n s[40] = b40 ^ (~b42 & b44);\\r\\n s[41] = b41 ^ (~b43 & b45);\\r\\n s[2] = b2 ^ (~b4 & b6);\\r\\n s[3] = b3 ^ (~b5 & b7);\\r\\n s[12] = b12 ^ (~b14 & b16);\\r\\n s[13] = b13 ^ (~b15 & b17);\\r\\n s[22] = b22 ^ (~b24 & b26);\\r\\n s[23] = b23 ^ (~b25 & b27);\\r\\n s[32] = b32 ^ (~b34 & b36);\\r\\n s[33] = b33 ^ (~b35 & b37);\\r\\n s[42] = b42 ^ (~b44 & b46);\\r\\n s[43] = b43 ^ (~b45 & b47);\\r\\n s[4] = b4 ^ (~b6 & b8);\\r\\n s[5] = b5 ^ (~b7 & b9);\\r\\n s[14] = b14 ^ (~b16 & b18);\\r\\n s[15] = b15 ^ (~b17 & b19);\\r\\n s[24] = b24 ^ (~b26 & b28);\\r\\n s[25] = b25 ^ (~b27 & b29);\\r\\n s[34] = b34 ^ (~b36 & b38);\\r\\n s[35] = b35 ^ (~b37 & b39);\\r\\n s[44] = b44 ^ (~b46 & b48);\\r\\n s[45] = b45 ^ (~b47 & b49);\\r\\n s[6] = b6 ^ (~b8 & b0);\\r\\n s[7] = b7 ^ (~b9 & b1);\\r\\n s[16] = b16 ^ (~b18 & b10);\\r\\n s[17] = b17 ^ (~b19 & b11);\\r\\n s[26] = b26 ^ (~b28 & b20);\\r\\n s[27] = b27 ^ (~b29 & b21);\\r\\n s[36] = b36 ^ (~b38 & b30);\\r\\n s[37] = b37 ^ (~b39 & b31);\\r\\n s[46] = b46 ^ (~b48 & b40);\\r\\n s[47] = b47 ^ (~b49 & b41);\\r\\n s[8] = b8 ^ (~b0 & b2);\\r\\n s[9] = b9 ^ (~b1 & b3);\\r\\n s[18] = b18 ^ (~b10 & b12);\\r\\n s[19] = b19 ^ (~b11 & b13);\\r\\n s[28] = b28 ^ (~b20 & b22);\\r\\n s[29] = b29 ^ (~b21 & b23);\\r\\n s[38] = b38 ^ (~b30 & b32);\\r\\n s[39] = b39 ^ (~b31 & b33);\\r\\n s[48] = b48 ^ (~b40 & b42);\\r\\n s[49] = b49 ^ (~b41 & b43);\\r\\n\\r\\n s[0] ^= RC[n];\\r\\n s[1] ^= RC[n + 1];\\r\\n }\\r\\n };\\r\\n\\r\\n if (COMMON_JS) {\\r\\n module.exports = methods;\\r\\n } else {\\r\\n for (var i = 0; i < methodNames.length; ++i) {\\r\\n root[methodNames[i]] = methods[methodNames[i]];\\r\\n }\\r\\n }\\r\\n})();\\r\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/js-sha3/src/sha3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/json-stringify-deterministic/lib/defaults.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/json-stringify-deterministic/lib/defaults.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = {\\n space: '',\\n cycles: false,\\n replacer: (k, v) => v,\\n stringify: JSON.stringify\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/json-stringify-deterministic/lib/defaults.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/json-stringify-deterministic/lib/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/json-stringify-deterministic/lib/index.js ***!\n \\****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst DEFAULTS = __webpack_require__(/*! ./defaults */ \\\"./node_modules/json-stringify-deterministic/lib/defaults.js\\\")\\nconst isFunction = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isFunction\\nconst isBoolean = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isBoolean\\nconst isObject = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isObject\\nconst isArray = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isArray\\nconst isRegex = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isRegex\\nconst assign = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").assign\\nconst keys = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").keys\\n\\nfunction serialize (obj) {\\n if (obj === null || obj === undefined) return obj\\n if (isRegex(obj)) return obj.toString()\\n return obj.toJSON ? obj.toJSON() : obj\\n}\\n\\nfunction stringifyDeterministic (obj, opts) {\\n opts = opts || assign({}, DEFAULTS)\\n\\n if (isFunction(opts)) opts = { compare: opts }\\n\\n const space = opts.space || DEFAULTS.space\\n const cycles = isBoolean(opts.cycles) ? opts.cycles : DEFAULTS.cycles\\n const replacer = opts.replacer || DEFAULTS.replacer\\n const stringify = opts.stringify || DEFAULTS.stringify\\n\\n const compare = opts.compare && (function (f) {\\n return function (node) {\\n return function (a, b) {\\n const aobj = {key: a, value: node[a]}\\n const bobj = {key: b, value: node[b]}\\n return f(aobj, bobj)\\n }\\n }\\n })(opts.compare)\\n\\n // Detect circular structure in obj and raise error efficiently.\\n if (!cycles) stringify(obj)\\n\\n const seen = []\\n\\n return (function _deterministic (parent, key, node, level) {\\n const indent = space ? ('\\\\n' + new Array(level + 1).join(space)) : ''\\n const colonSeparator = space ? ': ' : ':'\\n\\n node = serialize(node)\\n node = replacer.call(parent, key, node)\\n\\n if (node === undefined) return\\n\\n if (!isObject(node) || node === null) return stringify(node)\\n\\n if (isArray(node)) {\\n const out = []\\n for (let i = 0; i < node.length; i++) {\\n const item = _deterministic(node, i, node[i], level + 1) || stringify(null)\\n out.push(indent + space + item)\\n }\\n return '[' + out.join(',') + indent + ']'\\n } else {\\n if (cycles) {\\n if (seen.indexOf(node) !== -1) {\\n return stringify('[Circular]')\\n } else {\\n seen.push(node)\\n }\\n }\\n\\n const nodeKeys = keys(node).sort(compare && compare(node))\\n const out = []\\n for (let i = 0; i < nodeKeys.length; i++) {\\n const key = nodeKeys[i]\\n const value = _deterministic(node, key, node[key], level + 1)\\n\\n if (!value) continue\\n\\n const keyValue = stringify(key) + colonSeparator + value\\n out.push(indent + space + keyValue)\\n }\\n seen.splice(seen.indexOf(node), 1)\\n return '{' + out.join(',') + indent + '}'\\n }\\n })({ '': obj }, '', obj, 0)\\n}\\n\\nmodule.exports = stringifyDeterministic\\n\\n\\n//# sourceURL=webpack:///./node_modules/json-stringify-deterministic/lib/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/json-stringify-deterministic/lib/util.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/json-stringify-deterministic/lib/util.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nmodule.exports = {\\n isArray: Array.isArray,\\n assign: Object.assign,\\n isObject: v => typeof v === 'object',\\n isFunction: v => typeof v === 'function',\\n isBoolean: v => typeof v === 'boolean',\\n isRegex: v => v instanceof RegExp,\\n keys: Object.keys\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/json-stringify-deterministic/lib/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/minimalistic-assert/index.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/minimalistic-assert/index.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = assert;\\n\\nfunction assert(val, msg) {\\n if (!val)\\n throw new Error(msg || 'Assertion failed');\\n}\\n\\nassert.equal = function assertEqual(l, r, msg) {\\n if (l != r)\\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/minimalistic-assert/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/minimalistic-crypto-utils/lib/utils.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/minimalistic-crypto-utils/lib/utils.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = exports;\\n\\nfunction toArray(msg, enc) {\\n if (Array.isArray(msg))\\n return msg.slice();\\n if (!msg)\\n return [];\\n var res = [];\\n if (typeof msg !== 'string') {\\n for (var i = 0; i < msg.length; i++)\\n res[i] = msg[i] | 0;\\n return res;\\n }\\n if (enc === 'hex') {\\n msg = msg.replace(/[^a-z0-9]+/ig, '');\\n if (msg.length % 2 !== 0)\\n msg = '0' + msg;\\n for (var i = 0; i < msg.length; i += 2)\\n res.push(parseInt(msg[i] + msg[i + 1], 16));\\n } else {\\n for (var i = 0; i < msg.length; i++) {\\n var c = msg.charCodeAt(i);\\n var hi = c >> 8;\\n var lo = c & 0xff;\\n if (hi)\\n res.push(hi, lo);\\n else\\n res.push(lo);\\n }\\n }\\n return res;\\n}\\nutils.toArray = toArray;\\n\\nfunction zero2(word) {\\n if (word.length === 1)\\n return '0' + word;\\n else\\n return word;\\n}\\nutils.zero2 = zero2;\\n\\nfunction toHex(msg) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++)\\n res += zero2(msg[i].toString(16));\\n return res;\\n}\\nutils.toHex = toHex;\\n\\nutils.encode = function encode(arr, enc) {\\n if (enc === 'hex')\\n return toHex(arr);\\n else\\n return arr;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/base.js\":\n/*!********************************************!*\\\n !*** ./node_modules/multibase/src/base.js ***!\n \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nclass Base {\\n constructor (name, code, implementation, alphabet) {\\n this.name = name\\n this.code = code\\n this.alphabet = alphabet\\n if (implementation && alphabet) {\\n this.engine = implementation(alphabet)\\n }\\n }\\n\\n encode (stringOrBuffer) {\\n return this.engine.encode(stringOrBuffer)\\n }\\n\\n decode (stringOrBuffer) {\\n return this.engine.decode(stringOrBuffer)\\n }\\n\\n isImplemented () {\\n return this.engine\\n }\\n}\\n\\nmodule.exports = Base\\n\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/base.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/base16.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/multibase/src/base16.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nmodule.exports = function base16 (alphabet) {\\n return {\\n encode (input) {\\n if (typeof input === 'string') {\\n return Buffer.from(input).toString('hex')\\n }\\n return input.toString('hex')\\n },\\n decode (input) {\\n for (let char of input) {\\n if (alphabet.indexOf(char) < 0) {\\n throw new Error('invalid base16 character')\\n }\\n }\\n return Buffer.from(input, 'hex')\\n }\\n }\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/base16.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/base32.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/multibase/src/base32.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nfunction decode (input, alphabet) {\\n input = input.replace(new RegExp('=', 'g'), '')\\n let length = input.length\\n\\n let bits = 0\\n let value = 0\\n\\n let index = 0\\n let output = new Uint8Array((length * 5 / 8) | 0)\\n\\n for (let i = 0; i < length; i++) {\\n value = (value << 5) | alphabet.indexOf(input[i])\\n bits += 5\\n\\n if (bits >= 8) {\\n output[index++] = (value >>> (bits - 8)) & 255\\n bits -= 8\\n }\\n }\\n\\n return output.buffer\\n}\\n\\nfunction encode (buffer, alphabet) {\\n let length = buffer.byteLength\\n let view = new Uint8Array(buffer)\\n let padding = alphabet.indexOf('=') === alphabet.length - 1\\n\\n if (padding) {\\n alphabet = alphabet.substring(0, alphabet.length - 2)\\n }\\n\\n let bits = 0\\n let value = 0\\n let output = ''\\n\\n for (let i = 0; i < length; i++) {\\n value = (value << 8) | view[i]\\n bits += 8\\n\\n while (bits >= 5) {\\n output += alphabet[(value >>> (bits - 5)) & 31]\\n bits -= 5\\n }\\n }\\n\\n if (bits > 0) {\\n output += alphabet[(value << (5 - bits)) & 31]\\n }\\n\\n if (padding) {\\n while ((output.length % 8) !== 0) {\\n output += '='\\n }\\n }\\n\\n return output\\n}\\n\\nmodule.exports = function base32 (alphabet) {\\n return {\\n encode (input) {\\n if (typeof input === 'string') {\\n return encode(Buffer.from(input), alphabet)\\n }\\n\\n return encode(input, alphabet)\\n },\\n decode (input) {\\n for (let char of input) {\\n if (alphabet.indexOf(char) < 0) {\\n throw new Error('invalid base32 character')\\n }\\n }\\n\\n return decode(input, alphabet)\\n }\\n }\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/base32.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/base64.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/multibase/src/base64.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nmodule.exports = function base64 (alphabet) {\\n // The alphabet is only used to know:\\n // 1. If padding is enabled (must contain '=')\\n // 2. If the output must be url-safe (must contain '-' and '_')\\n // 3. If the input of the output function is valid\\n // The alphabets from RFC 4648 are always used.\\n const padding = alphabet.indexOf('=') > -1\\n const url = alphabet.indexOf('-') > -1 && alphabet.indexOf('_') > -1\\n\\n return {\\n encode (input) {\\n let output = ''\\n\\n if (typeof input === 'string') {\\n output = Buffer.from(input).toString('base64')\\n } else {\\n output = input.toString('base64')\\n }\\n\\n if (url) {\\n output = output.replace(/\\\\+/g, '-').replace(/\\\\//g, '_')\\n }\\n\\n const pad = output.indexOf('=')\\n if (pad > 0 && !padding) {\\n output = output.substring(0, pad)\\n }\\n\\n return output\\n },\\n decode (input) {\\n for (let char of input) {\\n if (alphabet.indexOf(char) < 0) {\\n throw new Error('invalid base64 character')\\n }\\n }\\n\\n return Buffer.from(input, 'base64')\\n }\\n }\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/base64.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/constants.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/multibase/src/constants.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst Base = __webpack_require__(/*! ./base.js */ \\\"./node_modules/multibase/src/base.js\\\")\\nconst baseX = __webpack_require__(/*! base-x */ \\\"./node_modules/base-x/index.js\\\")\\nconst base16 = __webpack_require__(/*! ./base16 */ \\\"./node_modules/multibase/src/base16.js\\\")\\nconst base32 = __webpack_require__(/*! ./base32 */ \\\"./node_modules/multibase/src/base32.js\\\")\\nconst base64 = __webpack_require__(/*! ./base64 */ \\\"./node_modules/multibase/src/base64.js\\\")\\n\\n// name, code, implementation, alphabet\\nconst constants = [\\n ['base1', '1', '', '1'],\\n ['base2', '0', baseX, '01'],\\n ['base8', '7', baseX, '01234567'],\\n ['base10', '9', baseX, '0123456789'],\\n ['base16', 'f', base16, '0123456789abcdef'],\\n ['base32', 'b', base32, 'abcdefghijklmnopqrstuvwxyz234567'],\\n ['base32pad', 'c', base32, 'abcdefghijklmnopqrstuvwxyz234567='],\\n ['base32hex', 'v', base32, '0123456789abcdefghijklmnopqrstuv'],\\n ['base32hexpad', 't', base32, '0123456789abcdefghijklmnopqrstuv='],\\n ['base32z', 'h', base32, 'ybndrfg8ejkmcpqxot1uwisza345h769'],\\n ['base58flickr', 'Z', baseX, '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'],\\n ['base58btc', 'z', baseX, '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'],\\n ['base64', 'm', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'],\\n ['base64pad', 'M', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='],\\n ['base64url', 'u', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'],\\n ['base64urlpad', 'U', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=']\\n]\\n\\nconst names = constants.reduce((prev, tupple) => {\\n prev[tupple[0]] = new Base(tupple[0], tupple[1], tupple[2], tupple[3])\\n return prev\\n}, {})\\n\\nconst codes = constants.reduce((prev, tupple) => {\\n prev[tupple[1]] = names[tupple[0]]\\n return prev\\n}, {})\\n\\nmodule.exports = {\\n names: names,\\n codes: codes\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/index.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/multibase/src/index.js ***!\n \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\\n * @module Multibase\\n */\\n\\n\\nconst constants = __webpack_require__(/*! ./constants */ \\\"./node_modules/multibase/src/constants.js\\\")\\n\\nexports = module.exports = multibase\\nexports.encode = encode\\nexports.decode = decode\\nexports.isEncoded = isEncoded\\nexports.names = Object.freeze(Object.keys(constants.names))\\nexports.codes = Object.freeze(Object.keys(constants.codes))\\n\\nconst errNotSupported = new Error('Unsupported encoding')\\n\\n/**\\n * Create a new buffer with the multibase varint+code.\\n *\\n * @param {string|number} nameOrCode - The multibase name or code number.\\n * @param {Buffer} buf - The data to be prefixed with multibase.\\n * @memberof Multibase\\n * @returns {Buffer}\\n */\\nfunction multibase (nameOrCode, buf) {\\n if (!buf) {\\n throw new Error('requires an encoded buffer')\\n }\\n const base = getBase(nameOrCode)\\n const codeBuf = Buffer.from(base.code)\\n\\n const name = base.name\\n validEncode(name, buf)\\n return Buffer.concat([codeBuf, buf])\\n}\\n\\n/**\\n * Encode data with the specified base and add the multibase prefix.\\n *\\n * @param {string|number} nameOrCode - The multibase name or code number.\\n * @param {Buffer} buf - The data to be encoded.\\n * @returns {Buffer}\\n * @memberof Multibase\\n */\\nfunction encode (nameOrCode, buf) {\\n const base = getBase(nameOrCode)\\n const name = base.name\\n\\n return multibase(name, Buffer.from(base.encode(buf)))\\n}\\n\\n/**\\n * Takes a buffer or string encoded with multibase header, decodes it and\\n * returns the decoded buffer\\n *\\n * @param {Buffer|string} bufOrString\\n * @returns {Buffer}\\n * @memberof Multibase\\n *\\n */\\nfunction decode (bufOrString) {\\n if (Buffer.isBuffer(bufOrString)) {\\n bufOrString = bufOrString.toString()\\n }\\n\\n const code = bufOrString.substring(0, 1)\\n bufOrString = bufOrString.substring(1, bufOrString.length)\\n\\n if (typeof bufOrString === 'string') {\\n bufOrString = Buffer.from(bufOrString)\\n }\\n\\n const base = getBase(code)\\n return Buffer.from(base.decode(bufOrString.toString()))\\n}\\n\\n/**\\n * Is the given data multibase encoded?\\n *\\n * @param {Buffer|string} bufOrString\\n * @returns {boolean}\\n * @memberof Multibase\\n */\\nfunction isEncoded (bufOrString) {\\n if (Buffer.isBuffer(bufOrString)) {\\n bufOrString = bufOrString.toString()\\n }\\n\\n // Ensure bufOrString is a string\\n if (Object.prototype.toString.call(bufOrString) !== '[object String]') {\\n return false\\n }\\n\\n const code = bufOrString.substring(0, 1)\\n try {\\n const base = getBase(code)\\n return base.name\\n } catch (err) {\\n return false\\n }\\n}\\n\\n/**\\n * @param {string} name\\n * @param {Buffer} buf\\n * @private\\n * @returns {undefined}\\n */\\nfunction validEncode (name, buf) {\\n const base = getBase(name)\\n base.decode(buf.toString())\\n}\\n\\nfunction getBase (nameOrCode) {\\n let base\\n\\n if (constants.names[nameOrCode]) {\\n base = constants.names[nameOrCode]\\n } else if (constants.codes[nameOrCode]) {\\n base = constants.codes[nameOrCode]\\n } else {\\n throw errNotSupported\\n }\\n\\n if (!base.isImplemented()) {\\n throw new Error('Base ' + nameOrCode + ' is not implemented yet')\\n }\\n\\n return base\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multihashes/src/constants.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/multihashes/src/constants.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* eslint quote-props: off */\\n/* eslint key-spacing: off */\\n\\n\\nexports.names = Object.freeze({\\n 'id': 0x0,\\n 'sha1': 0x11,\\n 'sha2-256': 0x12,\\n 'sha2-512': 0x13,\\n 'dbl-sha2-256': 0x56,\\n 'sha3-224': 0x17,\\n 'sha3-256': 0x16,\\n 'sha3-384': 0x15,\\n 'sha3-512': 0x14,\\n 'shake-128': 0x18,\\n 'shake-256': 0x19,\\n 'keccak-224': 0x1A,\\n 'keccak-256': 0x1B,\\n 'keccak-384': 0x1C,\\n 'keccak-512': 0x1D,\\n 'murmur3-128': 0x22,\\n 'murmur3-32': 0x23,\\n 'blake2b-8': 0xb201,\\n 'blake2b-16': 0xb202,\\n 'blake2b-24': 0xb203,\\n 'blake2b-32': 0xb204,\\n 'blake2b-40': 0xb205,\\n 'blake2b-48': 0xb206,\\n 'blake2b-56': 0xb207,\\n 'blake2b-64': 0xb208,\\n 'blake2b-72': 0xb209,\\n 'blake2b-80': 0xb20a,\\n 'blake2b-88': 0xb20b,\\n 'blake2b-96': 0xb20c,\\n 'blake2b-104': 0xb20d,\\n 'blake2b-112': 0xb20e,\\n 'blake2b-120': 0xb20f,\\n 'blake2b-128': 0xb210,\\n 'blake2b-136': 0xb211,\\n 'blake2b-144': 0xb212,\\n 'blake2b-152': 0xb213,\\n 'blake2b-160': 0xb214,\\n 'blake2b-168': 0xb215,\\n 'blake2b-176': 0xb216,\\n 'blake2b-184': 0xb217,\\n 'blake2b-192': 0xb218,\\n 'blake2b-200': 0xb219,\\n 'blake2b-208': 0xb21a,\\n 'blake2b-216': 0xb21b,\\n 'blake2b-224': 0xb21c,\\n 'blake2b-232': 0xb21d,\\n 'blake2b-240': 0xb21e,\\n 'blake2b-248': 0xb21f,\\n 'blake2b-256': 0xb220,\\n 'blake2b-264': 0xb221,\\n 'blake2b-272': 0xb222,\\n 'blake2b-280': 0xb223,\\n 'blake2b-288': 0xb224,\\n 'blake2b-296': 0xb225,\\n 'blake2b-304': 0xb226,\\n 'blake2b-312': 0xb227,\\n 'blake2b-320': 0xb228,\\n 'blake2b-328': 0xb229,\\n 'blake2b-336': 0xb22a,\\n 'blake2b-344': 0xb22b,\\n 'blake2b-352': 0xb22c,\\n 'blake2b-360': 0xb22d,\\n 'blake2b-368': 0xb22e,\\n 'blake2b-376': 0xb22f,\\n 'blake2b-384': 0xb230,\\n 'blake2b-392': 0xb231,\\n 'blake2b-400': 0xb232,\\n 'blake2b-408': 0xb233,\\n 'blake2b-416': 0xb234,\\n 'blake2b-424': 0xb235,\\n 'blake2b-432': 0xb236,\\n 'blake2b-440': 0xb237,\\n 'blake2b-448': 0xb238,\\n 'blake2b-456': 0xb239,\\n 'blake2b-464': 0xb23a,\\n 'blake2b-472': 0xb23b,\\n 'blake2b-480': 0xb23c,\\n 'blake2b-488': 0xb23d,\\n 'blake2b-496': 0xb23e,\\n 'blake2b-504': 0xb23f,\\n 'blake2b-512': 0xb240,\\n 'blake2s-8': 0xb241,\\n 'blake2s-16': 0xb242,\\n 'blake2s-24': 0xb243,\\n 'blake2s-32': 0xb244,\\n 'blake2s-40': 0xb245,\\n 'blake2s-48': 0xb246,\\n 'blake2s-56': 0xb247,\\n 'blake2s-64': 0xb248,\\n 'blake2s-72': 0xb249,\\n 'blake2s-80': 0xb24a,\\n 'blake2s-88': 0xb24b,\\n 'blake2s-96': 0xb24c,\\n 'blake2s-104': 0xb24d,\\n 'blake2s-112': 0xb24e,\\n 'blake2s-120': 0xb24f,\\n 'blake2s-128': 0xb250,\\n 'blake2s-136': 0xb251,\\n 'blake2s-144': 0xb252,\\n 'blake2s-152': 0xb253,\\n 'blake2s-160': 0xb254,\\n 'blake2s-168': 0xb255,\\n 'blake2s-176': 0xb256,\\n 'blake2s-184': 0xb257,\\n 'blake2s-192': 0xb258,\\n 'blake2s-200': 0xb259,\\n 'blake2s-208': 0xb25a,\\n 'blake2s-216': 0xb25b,\\n 'blake2s-224': 0xb25c,\\n 'blake2s-232': 0xb25d,\\n 'blake2s-240': 0xb25e,\\n 'blake2s-248': 0xb25f,\\n 'blake2s-256': 0xb260,\\n 'Skein256-8': 0xb301,\\n 'Skein256-16': 0xb302,\\n 'Skein256-24': 0xb303,\\n 'Skein256-32': 0xb304,\\n 'Skein256-40': 0xb305,\\n 'Skein256-48': 0xb306,\\n 'Skein256-56': 0xb307,\\n 'Skein256-64': 0xb308,\\n 'Skein256-72': 0xb309,\\n 'Skein256-80': 0xb30a,\\n 'Skein256-88': 0xb30b,\\n 'Skein256-96': 0xb30c,\\n 'Skein256-104': 0xb30d,\\n 'Skein256-112': 0xb30e,\\n 'Skein256-120': 0xb30f,\\n 'Skein256-128': 0xb310,\\n 'Skein256-136': 0xb311,\\n 'Skein256-144': 0xb312,\\n 'Skein256-152': 0xb313,\\n 'Skein256-160': 0xb314,\\n 'Skein256-168': 0xb315,\\n 'Skein256-176': 0xb316,\\n 'Skein256-184': 0xb317,\\n 'Skein256-192': 0xb318,\\n 'Skein256-200': 0xb319,\\n 'Skein256-208': 0xb31a,\\n 'Skein256-216': 0xb31b,\\n 'Skein256-224': 0xb31c,\\n 'Skein256-232': 0xb31d,\\n 'Skein256-240': 0xb31e,\\n 'Skein256-248': 0xb31f,\\n 'Skein256-256': 0xb320,\\n 'Skein512-8': 0xb321,\\n 'Skein512-16': 0xb322,\\n 'Skein512-24': 0xb323,\\n 'Skein512-32': 0xb324,\\n 'Skein512-40': 0xb325,\\n 'Skein512-48': 0xb326,\\n 'Skein512-56': 0xb327,\\n 'Skein512-64': 0xb328,\\n 'Skein512-72': 0xb329,\\n 'Skein512-80': 0xb32a,\\n 'Skein512-88': 0xb32b,\\n 'Skein512-96': 0xb32c,\\n 'Skein512-104': 0xb32d,\\n 'Skein512-112': 0xb32e,\\n 'Skein512-120': 0xb32f,\\n 'Skein512-128': 0xb330,\\n 'Skein512-136': 0xb331,\\n 'Skein512-144': 0xb332,\\n 'Skein512-152': 0xb333,\\n 'Skein512-160': 0xb334,\\n 'Skein512-168': 0xb335,\\n 'Skein512-176': 0xb336,\\n 'Skein512-184': 0xb337,\\n 'Skein512-192': 0xb338,\\n 'Skein512-200': 0xb339,\\n 'Skein512-208': 0xb33a,\\n 'Skein512-216': 0xb33b,\\n 'Skein512-224': 0xb33c,\\n 'Skein512-232': 0xb33d,\\n 'Skein512-240': 0xb33e,\\n 'Skein512-248': 0xb33f,\\n 'Skein512-256': 0xb340,\\n 'Skein512-264': 0xb341,\\n 'Skein512-272': 0xb342,\\n 'Skein512-280': 0xb343,\\n 'Skein512-288': 0xb344,\\n 'Skein512-296': 0xb345,\\n 'Skein512-304': 0xb346,\\n 'Skein512-312': 0xb347,\\n 'Skein512-320': 0xb348,\\n 'Skein512-328': 0xb349,\\n 'Skein512-336': 0xb34a,\\n 'Skein512-344': 0xb34b,\\n 'Skein512-352': 0xb34c,\\n 'Skein512-360': 0xb34d,\\n 'Skein512-368': 0xb34e,\\n 'Skein512-376': 0xb34f,\\n 'Skein512-384': 0xb350,\\n 'Skein512-392': 0xb351,\\n 'Skein512-400': 0xb352,\\n 'Skein512-408': 0xb353,\\n 'Skein512-416': 0xb354,\\n 'Skein512-424': 0xb355,\\n 'Skein512-432': 0xb356,\\n 'Skein512-440': 0xb357,\\n 'Skein512-448': 0xb358,\\n 'Skein512-456': 0xb359,\\n 'Skein512-464': 0xb35a,\\n 'Skein512-472': 0xb35b,\\n 'Skein512-480': 0xb35c,\\n 'Skein512-488': 0xb35d,\\n 'Skein512-496': 0xb35e,\\n 'Skein512-504': 0xb35f,\\n 'Skein512-512': 0xb360,\\n 'Skein1024-8': 0xb361,\\n 'Skein1024-16': 0xb362,\\n 'Skein1024-24': 0xb363,\\n 'Skein1024-32': 0xb364,\\n 'Skein1024-40': 0xb365,\\n 'Skein1024-48': 0xb366,\\n 'Skein1024-56': 0xb367,\\n 'Skein1024-64': 0xb368,\\n 'Skein1024-72': 0xb369,\\n 'Skein1024-80': 0xb36a,\\n 'Skein1024-88': 0xb36b,\\n 'Skein1024-96': 0xb36c,\\n 'Skein1024-104': 0xb36d,\\n 'Skein1024-112': 0xb36e,\\n 'Skein1024-120': 0xb36f,\\n 'Skein1024-128': 0xb370,\\n 'Skein1024-136': 0xb371,\\n 'Skein1024-144': 0xb372,\\n 'Skein1024-152': 0xb373,\\n 'Skein1024-160': 0xb374,\\n 'Skein1024-168': 0xb375,\\n 'Skein1024-176': 0xb376,\\n 'Skein1024-184': 0xb377,\\n 'Skein1024-192': 0xb378,\\n 'Skein1024-200': 0xb379,\\n 'Skein1024-208': 0xb37a,\\n 'Skein1024-216': 0xb37b,\\n 'Skein1024-224': 0xb37c,\\n 'Skein1024-232': 0xb37d,\\n 'Skein1024-240': 0xb37e,\\n 'Skein1024-248': 0xb37f,\\n 'Skein1024-256': 0xb380,\\n 'Skein1024-264': 0xb381,\\n 'Skein1024-272': 0xb382,\\n 'Skein1024-280': 0xb383,\\n 'Skein1024-288': 0xb384,\\n 'Skein1024-296': 0xb385,\\n 'Skein1024-304': 0xb386,\\n 'Skein1024-312': 0xb387,\\n 'Skein1024-320': 0xb388,\\n 'Skein1024-328': 0xb389,\\n 'Skein1024-336': 0xb38a,\\n 'Skein1024-344': 0xb38b,\\n 'Skein1024-352': 0xb38c,\\n 'Skein1024-360': 0xb38d,\\n 'Skein1024-368': 0xb38e,\\n 'Skein1024-376': 0xb38f,\\n 'Skein1024-384': 0xb390,\\n 'Skein1024-392': 0xb391,\\n 'Skein1024-400': 0xb392,\\n 'Skein1024-408': 0xb393,\\n 'Skein1024-416': 0xb394,\\n 'Skein1024-424': 0xb395,\\n 'Skein1024-432': 0xb396,\\n 'Skein1024-440': 0xb397,\\n 'Skein1024-448': 0xb398,\\n 'Skein1024-456': 0xb399,\\n 'Skein1024-464': 0xb39a,\\n 'Skein1024-472': 0xb39b,\\n 'Skein1024-480': 0xb39c,\\n 'Skein1024-488': 0xb39d,\\n 'Skein1024-496': 0xb39e,\\n 'Skein1024-504': 0xb39f,\\n 'Skein1024-512': 0xb3a0,\\n 'Skein1024-520': 0xb3a1,\\n 'Skein1024-528': 0xb3a2,\\n 'Skein1024-536': 0xb3a3,\\n 'Skein1024-544': 0xb3a4,\\n 'Skein1024-552': 0xb3a5,\\n 'Skein1024-560': 0xb3a6,\\n 'Skein1024-568': 0xb3a7,\\n 'Skein1024-576': 0xb3a8,\\n 'Skein1024-584': 0xb3a9,\\n 'Skein1024-592': 0xb3aa,\\n 'Skein1024-600': 0xb3ab,\\n 'Skein1024-608': 0xb3ac,\\n 'Skein1024-616': 0xb3ad,\\n 'Skein1024-624': 0xb3ae,\\n 'Skein1024-632': 0xb3af,\\n 'Skein1024-640': 0xb3b0,\\n 'Skein1024-648': 0xb3b1,\\n 'Skein1024-656': 0xb3b2,\\n 'Skein1024-664': 0xb3b3,\\n 'Skein1024-672': 0xb3b4,\\n 'Skein1024-680': 0xb3b5,\\n 'Skein1024-688': 0xb3b6,\\n 'Skein1024-696': 0xb3b7,\\n 'Skein1024-704': 0xb3b8,\\n 'Skein1024-712': 0xb3b9,\\n 'Skein1024-720': 0xb3ba,\\n 'Skein1024-728': 0xb3bb,\\n 'Skein1024-736': 0xb3bc,\\n 'Skein1024-744': 0xb3bd,\\n 'Skein1024-752': 0xb3be,\\n 'Skein1024-760': 0xb3bf,\\n 'Skein1024-768': 0xb3c0,\\n 'Skein1024-776': 0xb3c1,\\n 'Skein1024-784': 0xb3c2,\\n 'Skein1024-792': 0xb3c3,\\n 'Skein1024-800': 0xb3c4,\\n 'Skein1024-808': 0xb3c5,\\n 'Skein1024-816': 0xb3c6,\\n 'Skein1024-824': 0xb3c7,\\n 'Skein1024-832': 0xb3c8,\\n 'Skein1024-840': 0xb3c9,\\n 'Skein1024-848': 0xb3ca,\\n 'Skein1024-856': 0xb3cb,\\n 'Skein1024-864': 0xb3cc,\\n 'Skein1024-872': 0xb3cd,\\n 'Skein1024-880': 0xb3ce,\\n 'Skein1024-888': 0xb3cf,\\n 'Skein1024-896': 0xb3d0,\\n 'Skein1024-904': 0xb3d1,\\n 'Skein1024-912': 0xb3d2,\\n 'Skein1024-920': 0xb3d3,\\n 'Skein1024-928': 0xb3d4,\\n 'Skein1024-936': 0xb3d5,\\n 'Skein1024-944': 0xb3d6,\\n 'Skein1024-952': 0xb3d7,\\n 'Skein1024-960': 0xb3d8,\\n 'Skein1024-968': 0xb3d9,\\n 'Skein1024-976': 0xb3da,\\n 'Skein1024-984': 0xb3db,\\n 'Skein1024-992': 0xb3dc,\\n 'Skein1024-1000': 0xb3dd,\\n 'Skein1024-1008': 0xb3de,\\n 'Skein1024-1016': 0xb3df,\\n 'Skein1024-1024': 0xb3e0\\n})\\n\\nexports.codes = Object.freeze({\\n 0x11: 'sha1',\\n 0x12: 'sha2-256',\\n 0x13: 'sha2-512',\\n 0x56: 'dbl-sha2-256',\\n 0x17: 'sha3-224',\\n 0x16: 'sha3-256',\\n 0x15: 'sha3-384',\\n 0x14: 'sha3-512',\\n 0x18: 'shake-128',\\n 0x19: 'shake-256',\\n 0x1A: 'keccak-224',\\n 0x1B: 'keccak-256',\\n 0x1C: 'keccak-384',\\n 0x1D: 'keccak-512',\\n 0x22: 'murmur3-128',\\n 0x23: 'murmur3-32',\\n\\n // blake2\\n 0xb201: 'blake2b-8',\\n 0xb202: 'blake2b-16',\\n 0xb203: 'blake2b-24',\\n 0xb204: 'blake2b-32',\\n 0xb205: 'blake2b-40',\\n 0xb206: 'blake2b-48',\\n 0xb207: 'blake2b-56',\\n 0xb208: 'blake2b-64',\\n 0xb209: 'blake2b-72',\\n 0xb20a: 'blake2b-80',\\n 0xb20b: 'blake2b-88',\\n 0xb20c: 'blake2b-96',\\n 0xb20d: 'blake2b-104',\\n 0xb20e: 'blake2b-112',\\n 0xb20f: 'blake2b-120',\\n 0xb210: 'blake2b-128',\\n 0xb211: 'blake2b-136',\\n 0xb212: 'blake2b-144',\\n 0xb213: 'blake2b-152',\\n 0xb214: 'blake2b-160',\\n 0xb215: 'blake2b-168',\\n 0xb216: 'blake2b-176',\\n 0xb217: 'blake2b-184',\\n 0xb218: 'blake2b-192',\\n 0xb219: 'blake2b-200',\\n 0xb21a: 'blake2b-208',\\n 0xb21b: 'blake2b-216',\\n 0xb21c: 'blake2b-224',\\n 0xb21d: 'blake2b-232',\\n 0xb21e: 'blake2b-240',\\n 0xb21f: 'blake2b-248',\\n 0xb220: 'blake2b-256',\\n 0xb221: 'blake2b-264',\\n 0xb222: 'blake2b-272',\\n 0xb223: 'blake2b-280',\\n 0xb224: 'blake2b-288',\\n 0xb225: 'blake2b-296',\\n 0xb226: 'blake2b-304',\\n 0xb227: 'blake2b-312',\\n 0xb228: 'blake2b-320',\\n 0xb229: 'blake2b-328',\\n 0xb22a: 'blake2b-336',\\n 0xb22b: 'blake2b-344',\\n 0xb22c: 'blake2b-352',\\n 0xb22d: 'blake2b-360',\\n 0xb22e: 'blake2b-368',\\n 0xb22f: 'blake2b-376',\\n 0xb230: 'blake2b-384',\\n 0xb231: 'blake2b-392',\\n 0xb232: 'blake2b-400',\\n 0xb233: 'blake2b-408',\\n 0xb234: 'blake2b-416',\\n 0xb235: 'blake2b-424',\\n 0xb236: 'blake2b-432',\\n 0xb237: 'blake2b-440',\\n 0xb238: 'blake2b-448',\\n 0xb239: 'blake2b-456',\\n 0xb23a: 'blake2b-464',\\n 0xb23b: 'blake2b-472',\\n 0xb23c: 'blake2b-480',\\n 0xb23d: 'blake2b-488',\\n 0xb23e: 'blake2b-496',\\n 0xb23f: 'blake2b-504',\\n 0xb240: 'blake2b-512',\\n 0xb241: 'blake2s-8',\\n 0xb242: 'blake2s-16',\\n 0xb243: 'blake2s-24',\\n 0xb244: 'blake2s-32',\\n 0xb245: 'blake2s-40',\\n 0xb246: 'blake2s-48',\\n 0xb247: 'blake2s-56',\\n 0xb248: 'blake2s-64',\\n 0xb249: 'blake2s-72',\\n 0xb24a: 'blake2s-80',\\n 0xb24b: 'blake2s-88',\\n 0xb24c: 'blake2s-96',\\n 0xb24d: 'blake2s-104',\\n 0xb24e: 'blake2s-112',\\n 0xb24f: 'blake2s-120',\\n 0xb250: 'blake2s-128',\\n 0xb251: 'blake2s-136',\\n 0xb252: 'blake2s-144',\\n 0xb253: 'blake2s-152',\\n 0xb254: 'blake2s-160',\\n 0xb255: 'blake2s-168',\\n 0xb256: 'blake2s-176',\\n 0xb257: 'blake2s-184',\\n 0xb258: 'blake2s-192',\\n 0xb259: 'blake2s-200',\\n 0xb25a: 'blake2s-208',\\n 0xb25b: 'blake2s-216',\\n 0xb25c: 'blake2s-224',\\n 0xb25d: 'blake2s-232',\\n 0xb25e: 'blake2s-240',\\n 0xb25f: 'blake2s-248',\\n 0xb260: 'blake2s-256',\\n\\n // skein\\n 0xb301: 'Skein256-8',\\n 0xb302: 'Skein256-16',\\n 0xb303: 'Skein256-24',\\n 0xb304: 'Skein256-32',\\n 0xb305: 'Skein256-40',\\n 0xb306: 'Skein256-48',\\n 0xb307: 'Skein256-56',\\n 0xb308: 'Skein256-64',\\n 0xb309: 'Skein256-72',\\n 0xb30a: 'Skein256-80',\\n 0xb30b: 'Skein256-88',\\n 0xb30c: 'Skein256-96',\\n 0xb30d: 'Skein256-104',\\n 0xb30e: 'Skein256-112',\\n 0xb30f: 'Skein256-120',\\n 0xb310: 'Skein256-128',\\n 0xb311: 'Skein256-136',\\n 0xb312: 'Skein256-144',\\n 0xb313: 'Skein256-152',\\n 0xb314: 'Skein256-160',\\n 0xb315: 'Skein256-168',\\n 0xb316: 'Skein256-176',\\n 0xb317: 'Skein256-184',\\n 0xb318: 'Skein256-192',\\n 0xb319: 'Skein256-200',\\n 0xb31a: 'Skein256-208',\\n 0xb31b: 'Skein256-216',\\n 0xb31c: 'Skein256-224',\\n 0xb31d: 'Skein256-232',\\n 0xb31e: 'Skein256-240',\\n 0xb31f: 'Skein256-248',\\n 0xb320: 'Skein256-256',\\n 0xb321: 'Skein512-8',\\n 0xb322: 'Skein512-16',\\n 0xb323: 'Skein512-24',\\n 0xb324: 'Skein512-32',\\n 0xb325: 'Skein512-40',\\n 0xb326: 'Skein512-48',\\n 0xb327: 'Skein512-56',\\n 0xb328: 'Skein512-64',\\n 0xb329: 'Skein512-72',\\n 0xb32a: 'Skein512-80',\\n 0xb32b: 'Skein512-88',\\n 0xb32c: 'Skein512-96',\\n 0xb32d: 'Skein512-104',\\n 0xb32e: 'Skein512-112',\\n 0xb32f: 'Skein512-120',\\n 0xb330: 'Skein512-128',\\n 0xb331: 'Skein512-136',\\n 0xb332: 'Skein512-144',\\n 0xb333: 'Skein512-152',\\n 0xb334: 'Skein512-160',\\n 0xb335: 'Skein512-168',\\n 0xb336: 'Skein512-176',\\n 0xb337: 'Skein512-184',\\n 0xb338: 'Skein512-192',\\n 0xb339: 'Skein512-200',\\n 0xb33a: 'Skein512-208',\\n 0xb33b: 'Skein512-216',\\n 0xb33c: 'Skein512-224',\\n 0xb33d: 'Skein512-232',\\n 0xb33e: 'Skein512-240',\\n 0xb33f: 'Skein512-248',\\n 0xb340: 'Skein512-256',\\n 0xb341: 'Skein512-264',\\n 0xb342: 'Skein512-272',\\n 0xb343: 'Skein512-280',\\n 0xb344: 'Skein512-288',\\n 0xb345: 'Skein512-296',\\n 0xb346: 'Skein512-304',\\n 0xb347: 'Skein512-312',\\n 0xb348: 'Skein512-320',\\n 0xb349: 'Skein512-328',\\n 0xb34a: 'Skein512-336',\\n 0xb34b: 'Skein512-344',\\n 0xb34c: 'Skein512-352',\\n 0xb34d: 'Skein512-360',\\n 0xb34e: 'Skein512-368',\\n 0xb34f: 'Skein512-376',\\n 0xb350: 'Skein512-384',\\n 0xb351: 'Skein512-392',\\n 0xb352: 'Skein512-400',\\n 0xb353: 'Skein512-408',\\n 0xb354: 'Skein512-416',\\n 0xb355: 'Skein512-424',\\n 0xb356: 'Skein512-432',\\n 0xb357: 'Skein512-440',\\n 0xb358: 'Skein512-448',\\n 0xb359: 'Skein512-456',\\n 0xb35a: 'Skein512-464',\\n 0xb35b: 'Skein512-472',\\n 0xb35c: 'Skein512-480',\\n 0xb35d: 'Skein512-488',\\n 0xb35e: 'Skein512-496',\\n 0xb35f: 'Skein512-504',\\n 0xb360: 'Skein512-512',\\n 0xb361: 'Skein1024-8',\\n 0xb362: 'Skein1024-16',\\n 0xb363: 'Skein1024-24',\\n 0xb364: 'Skein1024-32',\\n 0xb365: 'Skein1024-40',\\n 0xb366: 'Skein1024-48',\\n 0xb367: 'Skein1024-56',\\n 0xb368: 'Skein1024-64',\\n 0xb369: 'Skein1024-72',\\n 0xb36a: 'Skein1024-80',\\n 0xb36b: 'Skein1024-88',\\n 0xb36c: 'Skein1024-96',\\n 0xb36d: 'Skein1024-104',\\n 0xb36e: 'Skein1024-112',\\n 0xb36f: 'Skein1024-120',\\n 0xb370: 'Skein1024-128',\\n 0xb371: 'Skein1024-136',\\n 0xb372: 'Skein1024-144',\\n 0xb373: 'Skein1024-152',\\n 0xb374: 'Skein1024-160',\\n 0xb375: 'Skein1024-168',\\n 0xb376: 'Skein1024-176',\\n 0xb377: 'Skein1024-184',\\n 0xb378: 'Skein1024-192',\\n 0xb379: 'Skein1024-200',\\n 0xb37a: 'Skein1024-208',\\n 0xb37b: 'Skein1024-216',\\n 0xb37c: 'Skein1024-224',\\n 0xb37d: 'Skein1024-232',\\n 0xb37e: 'Skein1024-240',\\n 0xb37f: 'Skein1024-248',\\n 0xb380: 'Skein1024-256',\\n 0xb381: 'Skein1024-264',\\n 0xb382: 'Skein1024-272',\\n 0xb383: 'Skein1024-280',\\n 0xb384: 'Skein1024-288',\\n 0xb385: 'Skein1024-296',\\n 0xb386: 'Skein1024-304',\\n 0xb387: 'Skein1024-312',\\n 0xb388: 'Skein1024-320',\\n 0xb389: 'Skein1024-328',\\n 0xb38a: 'Skein1024-336',\\n 0xb38b: 'Skein1024-344',\\n 0xb38c: 'Skein1024-352',\\n 0xb38d: 'Skein1024-360',\\n 0xb38e: 'Skein1024-368',\\n 0xb38f: 'Skein1024-376',\\n 0xb390: 'Skein1024-384',\\n 0xb391: 'Skein1024-392',\\n 0xb392: 'Skein1024-400',\\n 0xb393: 'Skein1024-408',\\n 0xb394: 'Skein1024-416',\\n 0xb395: 'Skein1024-424',\\n 0xb396: 'Skein1024-432',\\n 0xb397: 'Skein1024-440',\\n 0xb398: 'Skein1024-448',\\n 0xb399: 'Skein1024-456',\\n 0xb39a: 'Skein1024-464',\\n 0xb39b: 'Skein1024-472',\\n 0xb39c: 'Skein1024-480',\\n 0xb39d: 'Skein1024-488',\\n 0xb39e: 'Skein1024-496',\\n 0xb39f: 'Skein1024-504',\\n 0xb3a0: 'Skein1024-512',\\n 0xb3a1: 'Skein1024-520',\\n 0xb3a2: 'Skein1024-528',\\n 0xb3a3: 'Skein1024-536',\\n 0xb3a4: 'Skein1024-544',\\n 0xb3a5: 'Skein1024-552',\\n 0xb3a6: 'Skein1024-560',\\n 0xb3a7: 'Skein1024-568',\\n 0xb3a8: 'Skein1024-576',\\n 0xb3a9: 'Skein1024-584',\\n 0xb3aa: 'Skein1024-592',\\n 0xb3ab: 'Skein1024-600',\\n 0xb3ac: 'Skein1024-608',\\n 0xb3ad: 'Skein1024-616',\\n 0xb3ae: 'Skein1024-624',\\n 0xb3af: 'Skein1024-632',\\n 0xb3b0: 'Skein1024-640',\\n 0xb3b1: 'Skein1024-648',\\n 0xb3b2: 'Skein1024-656',\\n 0xb3b3: 'Skein1024-664',\\n 0xb3b4: 'Skein1024-672',\\n 0xb3b5: 'Skein1024-680',\\n 0xb3b6: 'Skein1024-688',\\n 0xb3b7: 'Skein1024-696',\\n 0xb3b8: 'Skein1024-704',\\n 0xb3b9: 'Skein1024-712',\\n 0xb3ba: 'Skein1024-720',\\n 0xb3bb: 'Skein1024-728',\\n 0xb3bc: 'Skein1024-736',\\n 0xb3bd: 'Skein1024-744',\\n 0xb3be: 'Skein1024-752',\\n 0xb3bf: 'Skein1024-760',\\n 0xb3c0: 'Skein1024-768',\\n 0xb3c1: 'Skein1024-776',\\n 0xb3c2: 'Skein1024-784',\\n 0xb3c3: 'Skein1024-792',\\n 0xb3c4: 'Skein1024-800',\\n 0xb3c5: 'Skein1024-808',\\n 0xb3c6: 'Skein1024-816',\\n 0xb3c7: 'Skein1024-824',\\n 0xb3c8: 'Skein1024-832',\\n 0xb3c9: 'Skein1024-840',\\n 0xb3ca: 'Skein1024-848',\\n 0xb3cb: 'Skein1024-856',\\n 0xb3cc: 'Skein1024-864',\\n 0xb3cd: 'Skein1024-872',\\n 0xb3ce: 'Skein1024-880',\\n 0xb3cf: 'Skein1024-888',\\n 0xb3d0: 'Skein1024-896',\\n 0xb3d1: 'Skein1024-904',\\n 0xb3d2: 'Skein1024-912',\\n 0xb3d3: 'Skein1024-920',\\n 0xb3d4: 'Skein1024-928',\\n 0xb3d5: 'Skein1024-936',\\n 0xb3d6: 'Skein1024-944',\\n 0xb3d7: 'Skein1024-952',\\n 0xb3d8: 'Skein1024-960',\\n 0xb3d9: 'Skein1024-968',\\n 0xb3da: 'Skein1024-976',\\n 0xb3db: 'Skein1024-984',\\n 0xb3dc: 'Skein1024-992',\\n 0xb3dd: 'Skein1024-1000',\\n 0xb3de: 'Skein1024-1008',\\n 0xb3df: 'Skein1024-1016',\\n 0xb3e0: 'Skein1024-1024'\\n})\\n\\nexports.defaultLengths = Object.freeze({\\n 0x11: 20,\\n 0x12: 32,\\n 0x13: 64,\\n 0x56: 32,\\n 0x17: 28,\\n 0x16: 32,\\n 0x15: 48,\\n 0x14: 64,\\n 0x18: 32,\\n 0x19: 64,\\n 0x1A: 28,\\n 0x1B: 32,\\n 0x1C: 48,\\n 0x1D: 64,\\n 0x22: 32,\\n\\n 0xb201: 0x01,\\n 0xb202: 0x02,\\n 0xb203: 0x03,\\n 0xb204: 0x04,\\n 0xb205: 0x05,\\n 0xb206: 0x06,\\n 0xb207: 0x07,\\n 0xb208: 0x08,\\n 0xb209: 0x09,\\n 0xb20a: 0x0a,\\n 0xb20b: 0x0b,\\n 0xb20c: 0x0c,\\n 0xb20d: 0x0d,\\n 0xb20e: 0x0e,\\n 0xb20f: 0x0f,\\n 0xb210: 0x10,\\n 0xb211: 0x11,\\n 0xb212: 0x12,\\n 0xb213: 0x13,\\n 0xb214: 0x14,\\n 0xb215: 0x15,\\n 0xb216: 0x16,\\n 0xb217: 0x17,\\n 0xb218: 0x18,\\n 0xb219: 0x19,\\n 0xb21a: 0x1a,\\n 0xb21b: 0x1b,\\n 0xb21c: 0x1c,\\n 0xb21d: 0x1d,\\n 0xb21e: 0x1e,\\n 0xb21f: 0x1f,\\n 0xb220: 0x20,\\n 0xb221: 0x21,\\n 0xb222: 0x22,\\n 0xb223: 0x23,\\n 0xb224: 0x24,\\n 0xb225: 0x25,\\n 0xb226: 0x26,\\n 0xb227: 0x27,\\n 0xb228: 0x28,\\n 0xb229: 0x29,\\n 0xb22a: 0x2a,\\n 0xb22b: 0x2b,\\n 0xb22c: 0x2c,\\n 0xb22d: 0x2d,\\n 0xb22e: 0x2e,\\n 0xb22f: 0x2f,\\n 0xb230: 0x30,\\n 0xb231: 0x31,\\n 0xb232: 0x32,\\n 0xb233: 0x33,\\n 0xb234: 0x34,\\n 0xb235: 0x35,\\n 0xb236: 0x36,\\n 0xb237: 0x37,\\n 0xb238: 0x38,\\n 0xb239: 0x39,\\n 0xb23a: 0x3a,\\n 0xb23b: 0x3b,\\n 0xb23c: 0x3c,\\n 0xb23d: 0x3d,\\n 0xb23e: 0x3e,\\n 0xb23f: 0x3f,\\n 0xb240: 0x40,\\n 0xb241: 0x01,\\n 0xb242: 0x02,\\n 0xb243: 0x03,\\n 0xb244: 0x04,\\n 0xb245: 0x05,\\n 0xb246: 0x06,\\n 0xb247: 0x07,\\n 0xb248: 0x08,\\n 0xb249: 0x09,\\n 0xb24a: 0x0a,\\n 0xb24b: 0x0b,\\n 0xb24c: 0x0c,\\n 0xb24d: 0x0d,\\n 0xb24e: 0x0e,\\n 0xb24f: 0x0f,\\n 0xb250: 0x10,\\n 0xb251: 0x11,\\n 0xb252: 0x12,\\n 0xb253: 0x13,\\n 0xb254: 0x14,\\n 0xb255: 0x15,\\n 0xb256: 0x16,\\n 0xb257: 0x17,\\n 0xb258: 0x18,\\n 0xb259: 0x19,\\n 0xb25a: 0x1a,\\n 0xb25b: 0x1b,\\n 0xb25c: 0x1c,\\n 0xb25d: 0x1d,\\n 0xb25e: 0x1e,\\n 0xb25f: 0x1f,\\n 0xb260: 0x20,\\n 0xb301: 0x01,\\n 0xb302: 0x02,\\n 0xb303: 0x03,\\n 0xb304: 0x04,\\n 0xb305: 0x05,\\n 0xb306: 0x06,\\n 0xb307: 0x07,\\n 0xb308: 0x08,\\n 0xb309: 0x09,\\n 0xb30a: 0x0a,\\n 0xb30b: 0x0b,\\n 0xb30c: 0x0c,\\n 0xb30d: 0x0d,\\n 0xb30e: 0x0e,\\n 0xb30f: 0x0f,\\n 0xb310: 0x10,\\n 0xb311: 0x11,\\n 0xb312: 0x12,\\n 0xb313: 0x13,\\n 0xb314: 0x14,\\n 0xb315: 0x15,\\n 0xb316: 0x16,\\n 0xb317: 0x17,\\n 0xb318: 0x18,\\n 0xb319: 0x19,\\n 0xb31a: 0x1a,\\n 0xb31b: 0x1b,\\n 0xb31c: 0x1c,\\n 0xb31d: 0x1d,\\n 0xb31e: 0x1e,\\n 0xb31f: 0x1f,\\n 0xb320: 0x20,\\n 0xb321: 0x01,\\n 0xb322: 0x02,\\n 0xb323: 0x03,\\n 0xb324: 0x04,\\n 0xb325: 0x05,\\n 0xb326: 0x06,\\n 0xb327: 0x07,\\n 0xb328: 0x08,\\n 0xb329: 0x09,\\n 0xb32a: 0x0a,\\n 0xb32b: 0x0b,\\n 0xb32c: 0x0c,\\n 0xb32d: 0x0d,\\n 0xb32e: 0x0e,\\n 0xb32f: 0x0f,\\n 0xb330: 0x10,\\n 0xb331: 0x11,\\n 0xb332: 0x12,\\n 0xb333: 0x13,\\n 0xb334: 0x14,\\n 0xb335: 0x15,\\n 0xb336: 0x16,\\n 0xb337: 0x17,\\n 0xb338: 0x18,\\n 0xb339: 0x19,\\n 0xb33a: 0x1a,\\n 0xb33b: 0x1b,\\n 0xb33c: 0x1c,\\n 0xb33d: 0x1d,\\n 0xb33e: 0x1e,\\n 0xb33f: 0x1f,\\n 0xb340: 0x20,\\n 0xb341: 0x21,\\n 0xb342: 0x22,\\n 0xb343: 0x23,\\n 0xb344: 0x24,\\n 0xb345: 0x25,\\n 0xb346: 0x26,\\n 0xb347: 0x27,\\n 0xb348: 0x28,\\n 0xb349: 0x29,\\n 0xb34a: 0x2a,\\n 0xb34b: 0x2b,\\n 0xb34c: 0x2c,\\n 0xb34d: 0x2d,\\n 0xb34e: 0x2e,\\n 0xb34f: 0x2f,\\n 0xb350: 0x30,\\n 0xb351: 0x31,\\n 0xb352: 0x32,\\n 0xb353: 0x33,\\n 0xb354: 0x34,\\n 0xb355: 0x35,\\n 0xb356: 0x36,\\n 0xb357: 0x37,\\n 0xb358: 0x38,\\n 0xb359: 0x39,\\n 0xb35a: 0x3a,\\n 0xb35b: 0x3b,\\n 0xb35c: 0x3c,\\n 0xb35d: 0x3d,\\n 0xb35e: 0x3e,\\n 0xb35f: 0x3f,\\n 0xb360: 0x40,\\n 0xb361: 0x01,\\n 0xb362: 0x02,\\n 0xb363: 0x03,\\n 0xb364: 0x04,\\n 0xb365: 0x05,\\n 0xb366: 0x06,\\n 0xb367: 0x07,\\n 0xb368: 0x08,\\n 0xb369: 0x09,\\n 0xb36a: 0x0a,\\n 0xb36b: 0x0b,\\n 0xb36c: 0x0c,\\n 0xb36d: 0x0d,\\n 0xb36e: 0x0e,\\n 0xb36f: 0x0f,\\n 0xb370: 0x10,\\n 0xb371: 0x11,\\n 0xb372: 0x12,\\n 0xb373: 0x13,\\n 0xb374: 0x14,\\n 0xb375: 0x15,\\n 0xb376: 0x16,\\n 0xb377: 0x17,\\n 0xb378: 0x18,\\n 0xb379: 0x19,\\n 0xb37a: 0x1a,\\n 0xb37b: 0x1b,\\n 0xb37c: 0x1c,\\n 0xb37d: 0x1d,\\n 0xb37e: 0x1e,\\n 0xb37f: 0x1f,\\n 0xb380: 0x20,\\n 0xb381: 0x21,\\n 0xb382: 0x22,\\n 0xb383: 0x23,\\n 0xb384: 0x24,\\n 0xb385: 0x25,\\n 0xb386: 0x26,\\n 0xb387: 0x27,\\n 0xb388: 0x28,\\n 0xb389: 0x29,\\n 0xb38a: 0x2a,\\n 0xb38b: 0x2b,\\n 0xb38c: 0x2c,\\n 0xb38d: 0x2d,\\n 0xb38e: 0x2e,\\n 0xb38f: 0x2f,\\n 0xb390: 0x30,\\n 0xb391: 0x31,\\n 0xb392: 0x32,\\n 0xb393: 0x33,\\n 0xb394: 0x34,\\n 0xb395: 0x35,\\n 0xb396: 0x36,\\n 0xb397: 0x37,\\n 0xb398: 0x38,\\n 0xb399: 0x39,\\n 0xb39a: 0x3a,\\n 0xb39b: 0x3b,\\n 0xb39c: 0x3c,\\n 0xb39d: 0x3d,\\n 0xb39e: 0x3e,\\n 0xb39f: 0x3f,\\n 0xb3a0: 0x40,\\n 0xb3a1: 0x41,\\n 0xb3a2: 0x42,\\n 0xb3a3: 0x43,\\n 0xb3a4: 0x44,\\n 0xb3a5: 0x45,\\n 0xb3a6: 0x46,\\n 0xb3a7: 0x47,\\n 0xb3a8: 0x48,\\n 0xb3a9: 0x49,\\n 0xb3aa: 0x4a,\\n 0xb3ab: 0x4b,\\n 0xb3ac: 0x4c,\\n 0xb3ad: 0x4d,\\n 0xb3ae: 0x4e,\\n 0xb3af: 0x4f,\\n 0xb3b0: 0x50,\\n 0xb3b1: 0x51,\\n 0xb3b2: 0x52,\\n 0xb3b3: 0x53,\\n 0xb3b4: 0x54,\\n 0xb3b5: 0x55,\\n 0xb3b6: 0x56,\\n 0xb3b7: 0x57,\\n 0xb3b8: 0x58,\\n 0xb3b9: 0x59,\\n 0xb3ba: 0x5a,\\n 0xb3bb: 0x5b,\\n 0xb3bc: 0x5c,\\n 0xb3bd: 0x5d,\\n 0xb3be: 0x5e,\\n 0xb3bf: 0x5f,\\n 0xb3c0: 0x60,\\n 0xb3c1: 0x61,\\n 0xb3c2: 0x62,\\n 0xb3c3: 0x63,\\n 0xb3c4: 0x64,\\n 0xb3c5: 0x65,\\n 0xb3c6: 0x66,\\n 0xb3c7: 0x67,\\n 0xb3c8: 0x68,\\n 0xb3c9: 0x69,\\n 0xb3ca: 0x6a,\\n 0xb3cb: 0x6b,\\n 0xb3cc: 0x6c,\\n 0xb3cd: 0x6d,\\n 0xb3ce: 0x6e,\\n 0xb3cf: 0x6f,\\n 0xb3d0: 0x70,\\n 0xb3d1: 0x71,\\n 0xb3d2: 0x72,\\n 0xb3d3: 0x73,\\n 0xb3d4: 0x74,\\n 0xb3d5: 0x75,\\n 0xb3d6: 0x76,\\n 0xb3d7: 0x77,\\n 0xb3d8: 0x78,\\n 0xb3d9: 0x79,\\n 0xb3da: 0x7a,\\n 0xb3db: 0x7b,\\n 0xb3dc: 0x7c,\\n 0xb3dd: 0x7d,\\n 0xb3de: 0x7e,\\n 0xb3df: 0x7f,\\n 0xb3e0: 0x80\\n})\\n\\n\\n//# sourceURL=webpack:///./node_modules/multihashes/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multihashes/src/index.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/multihashes/src/index.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Multihash implementation in JavaScript.\\n *\\n * @module multihash\\n */\\n\\n\\nconst bs58 = __webpack_require__(/*! bs58 */ \\\"./node_modules/bs58/index.js\\\")\\n\\nconst cs = __webpack_require__(/*! ./constants */ \\\"./node_modules/multihashes/src/constants.js\\\")\\n\\nexports.names = cs.names\\nexports.codes = cs.codes\\nexports.defaultLengths = cs.defaultLengths\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\n/**\\n * Convert the given multihash to a hex encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toHexString = function toHexString (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return hash.toString('hex')\\n}\\n\\n/**\\n * Convert the given hex encoded string to a multihash.\\n *\\n * @param {string} hash\\n * @returns {Buffer}\\n */\\nexports.fromHexString = function fromHexString (hash) {\\n return Buffer.from(hash, 'hex')\\n}\\n\\n/**\\n * Convert the given multihash to a base58 encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toB58String = function toB58String (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return bs58.encode(hash)\\n}\\n\\n/**\\n * Convert the given base58 encoded string to a multihash.\\n *\\n * @param {string|Buffer} hash\\n * @returns {Buffer}\\n */\\nexports.fromB58String = function fromB58String (hash) {\\n let encoded = hash\\n if (Buffer.isBuffer(hash)) {\\n encoded = hash.toString()\\n }\\n\\n return Buffer.from(bs58.decode(encoded))\\n}\\n\\n/**\\n * Decode a hash from the given multihash.\\n *\\n * @param {Buffer} buf\\n * @returns {{code: number, name: string, length: number, digest: Buffer}} result\\n */\\nexports.decode = function decode (buf) {\\n if (!(Buffer.isBuffer(buf))) {\\n throw new Error('multihash must be a Buffer')\\n }\\n\\n if (buf.length < 3) {\\n throw new Error('multihash too short. must be > 3 bytes.')\\n }\\n\\n let code = varint.decode(buf)\\n if (!exports.isValidCode(code)) {\\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n let len = varint.decode(buf)\\n if (len < 1) {\\n throw new Error(`multihash invalid length: 0x${len.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n if (buf.length !== len) {\\n throw new Error(`multihash length inconsistent: 0x${buf.toString('hex')}`)\\n }\\n\\n return {\\n code: code,\\n name: cs.codes[code],\\n length: len,\\n digest: buf\\n }\\n}\\n\\n/**\\n * Encode a hash digest along with the specified function code.\\n *\\n * > **Note:** the length is derived from the length of the digest itself.\\n *\\n * @param {Buffer} digest\\n * @param {string|number} code\\n * @param {number} [length]\\n * @returns {Buffer}\\n */\\nexports.encode = function encode (digest, code, length) {\\n if (!digest || !code) {\\n throw new Error('multihash encode requires at least two args: digest, code')\\n }\\n\\n // ensure it's a hashfunction code.\\n const hashfn = exports.coerceCode(code)\\n\\n if (!(Buffer.isBuffer(digest))) {\\n throw new Error('digest should be a Buffer')\\n }\\n\\n if (length == null) {\\n length = digest.length\\n }\\n\\n if (length && digest.length !== length) {\\n throw new Error('digest length should be equal to specified length.')\\n }\\n\\n return Buffer.concat([\\n Buffer.from(varint.encode(hashfn)),\\n Buffer.from(varint.encode(length)),\\n digest\\n ])\\n}\\n\\n/**\\n * Converts a hash function name into the matching code.\\n * If passed a number it will return the number if it's a valid code.\\n * @param {string|number} name\\n * @returns {number}\\n */\\nexports.coerceCode = function coerceCode (name) {\\n let code = name\\n\\n if (typeof name === 'string') {\\n if (!cs.names[name]) {\\n throw new Error(`Unrecognized hash function named: ${name}`)\\n }\\n code = cs.names[name]\\n }\\n\\n if (typeof code !== 'number') {\\n throw new Error(`Hash function code should be a number. Got: ${code}`)\\n }\\n\\n if (!cs.codes[code] && !exports.isAppCode(code)) {\\n throw new Error(`Unrecognized function code: ${code}`)\\n }\\n\\n return code\\n}\\n\\n/**\\n * Checks wether a code is part of the app range\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isAppCode = function appCode (code) {\\n return code > 0 && code < 0x10\\n}\\n\\n/**\\n * Checks whether a multihash code is valid.\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isValidCode = function validCode (code) {\\n if (exports.isAppCode(code)) {\\n return true\\n }\\n\\n if (cs.codes[code]) {\\n return true\\n }\\n\\n return false\\n}\\n\\n/**\\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nfunction validate (multihash) {\\n exports.decode(multihash) // throws if bad.\\n}\\nexports.validate = validate\\n\\n/**\\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nexports.prefix = function prefix (multihash) {\\n validate(multihash)\\n\\n return multihash.slice(0, 2)\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multihashes/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/muport-did-resolver/lib/register.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/muport-did-resolver/lib/register.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _didResolver = __webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\");\\n\\nvar _nodeFetch = _interopRequireDefault(__webpack_require__(/*! node-fetch */ \\\"./node_modules/node-fetch/browser.js\\\"));\\n\\nvar INFURA = 'https://ipfs.infura.io/ipfs/';\\n\\nfunction register(ipfs) {\\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n\\n function resolve(_x, _x2) {\\n return _resolve.apply(this, arguments);\\n }\\n\\n function _resolve() {\\n _resolve = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(did, parsed) {\\n var doc;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _context.next = 2;\\n return fetchMuPortDoc(ipfs, parsed.id);\\n\\n case 2:\\n doc = _context.sent;\\n return _context.abrupt(\\\"return\\\", wrapDocument(did, doc));\\n\\n case 4:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee);\\n }));\\n return _resolve.apply(this, arguments);\\n }\\n\\n (0, _didResolver.registerMethod)('muport', resolve);\\n}\\n\\nfunction fetchMuPortDoc(_x3, _x4) {\\n return _fetchMuPortDoc.apply(this, arguments);\\n}\\n\\nfunction _fetchMuPortDoc() {\\n _fetchMuPortDoc = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(ipfs, ipfsHash) {\\n var doc;\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n _context2.prev = 0;\\n\\n if (!ipfs) {\\n _context2.next = 9;\\n break;\\n }\\n\\n _context2.t1 = JSON;\\n _context2.next = 5;\\n return ipfs.cat(ipfsHash);\\n\\n case 5:\\n _context2.t2 = _context2.sent;\\n _context2.t0 = _context2.t1.parse.call(_context2.t1, _context2.t2);\\n _context2.next = 12;\\n break;\\n\\n case 9:\\n _context2.next = 11;\\n return httpFetch(ipfsHash);\\n\\n case 11:\\n _context2.t0 = _context2.sent;\\n\\n case 12:\\n doc = _context2.t0;\\n _context2.next = 17;\\n break;\\n\\n case 15:\\n _context2.prev = 15;\\n _context2.t3 = _context2[\\\"catch\\\"](0);\\n\\n case 17:\\n if (!(!doc || doc.version !== 1 || !doc.signingKey || !doc.managementKey || !doc.asymEncryptionKey)) {\\n _context2.next = 27;\\n break;\\n }\\n\\n _context2.prev = 18;\\n\\n if (!ipfs) {\\n _context2.next = 22;\\n break;\\n }\\n\\n _context2.next = 22;\\n return ipfs.pin.rm(ipfsHash);\\n\\n case 22:\\n _context2.next = 26;\\n break;\\n\\n case 24:\\n _context2.prev = 24;\\n _context2.t4 = _context2[\\\"catch\\\"](18);\\n\\n case 26:\\n throw new Error('Invalid muport did');\\n\\n case 27:\\n return _context2.abrupt(\\\"return\\\", doc);\\n\\n case 28:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2, null, [[0, 15], [18, 24]]);\\n }));\\n return _fetchMuPortDoc.apply(this, arguments);\\n}\\n\\nfunction httpFetch(_x5) {\\n return _httpFetch.apply(this, arguments);\\n}\\n\\nfunction _httpFetch() {\\n _httpFetch = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee3(cid) {\\n return _regenerator[\\\"default\\\"].wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n _context3.next = 2;\\n return (0, _nodeFetch[\\\"default\\\"])(INFURA + cid);\\n\\n case 2:\\n return _context3.abrupt(\\\"return\\\", _context3.sent.json());\\n\\n case 3:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3);\\n }));\\n return _httpFetch.apply(this, arguments);\\n}\\n\\nfunction wrapDocument(did, muportDocument) {\\n var doc = {\\n \\\"@context\\\": \\\"https://w3id.org/did/v1\\\",\\n \\\"id\\\": did,\\n \\\"publicKey\\\": [{\\n \\\"id\\\": did + \\\"#signingKey\\\",\\n \\\"type\\\": \\\"Secp256k1VerificationKey2018\\\",\\n \\\"owner\\\": did,\\n \\\"publicKeyHex\\\": muportDocument.signingKey\\n }, {\\n \\\"id\\\": did + \\\"#managementKey\\\",\\n \\\"type\\\": \\\"Secp256k1VerificationKey2018\\\",\\n \\\"owner\\\": did\\n }, {\\n \\\"id\\\": did + \\\"#encryptionKey\\\",\\n \\\"type\\\": \\\"Curve25519EncryptionPublicKey\\\",\\n \\\"owner\\\": did,\\n \\\"publicKeyBase64\\\": muportDocument.asymEncryptionKey\\n }],\\n \\\"authentication\\\": [{\\n \\\"type\\\": \\\"Secp256k1SignatureAuthentication2018\\\",\\n \\\"publicKey\\\": did + \\\"#signingKey\\\"\\n }],\\n \\\"muportData\\\": {}\\n };\\n\\n if (muportDocument.managementKey.length === 42) {\\n doc.publicKey[1].ethereumAddress = muportDocument.managementKey;\\n } else {\\n doc.publicKey[1].publicKeyHex = muportDocument.managementKey;\\n }\\n\\n if (muportDocument.publicProfile) doc.uportProfile = muportDocument.publicProfile;\\n if (muportDocument.symEncryptedData) doc.muportData.symEncryptedData = muportDocument.symEncryptedData;\\n if (muportDocument.recoveryNetwork) doc.muportData.recoveryNetwork = muportDocument.recoveryNetwork;\\n return doc;\\n}\\n\\nmodule.exports = register;\\n\\n//# sourceURL=webpack:///./node_modules/muport-did-resolver/lib/register.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/murmurhash3js-revisited/index.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/murmurhash3js-revisited/index.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = __webpack_require__(/*! ./lib/murmurHash3js */ \\\"./node_modules/murmurhash3js-revisited/lib/murmurHash3js.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/murmurhash3js-revisited/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/murmurhash3js-revisited/lib/murmurHash3js.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/murmurhash3js-revisited/lib/murmurHash3js.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* jshint -W086: true */\\n// +----------------------------------------------------------------------+\\n// | murmurHash3js.js v3.0.1 // https://github.com/pid/murmurHash3js\\n// | A javascript implementation of MurmurHash3's x86 hashing algorithms. |\\n// |----------------------------------------------------------------------|\\n// | Copyright (c) 2012-2015 Karan Lyons |\\n// | https://github.com/karanlyons/murmurHash3.js/blob/c1778f75792abef7bdd74bc85d2d4e1a3d25cfe9/murmurHash3.js |\\n// | Freely distributable under the MIT license. |\\n// +----------------------------------------------------------------------+\\n\\n;(function (root, undefined) {\\n 'use strict';\\n\\n // Create a local object that'll be exported or referenced globally.\\n var library = {\\n 'version': '3.0.0',\\n 'x86': {},\\n 'x64': {},\\n 'inputValidation': true\\n };\\n\\n // PRIVATE FUNCTIONS\\n // -----------------\\n\\n function _validBytes(bytes) {\\n // check the input is an array or a typed array\\n if (!Array.isArray(bytes) && !ArrayBuffer.isView(bytes)) {\\n return false;\\n }\\n\\n // check all bytes are actually bytes\\n for (var i = 0; i < bytes.length; i++) {\\n if (!Number.isInteger(bytes[i]) || bytes[i] < 0 || bytes[i] > 255) {\\n return false;\\n }\\n }\\n return true;\\n }\\n\\n function _x86Multiply(m, n) {\\n //\\n // Given two 32bit ints, returns the two multiplied together as a\\n // 32bit int.\\n //\\n\\n return ((m & 0xffff) * n) + ((((m >>> 16) * n) & 0xffff) << 16);\\n }\\n\\n function _x86Rotl(m, n) {\\n //\\n // Given a 32bit int and an int representing a number of bit positions,\\n // returns the 32bit int rotated left by that number of positions.\\n //\\n\\n return (m << n) | (m >>> (32 - n));\\n }\\n\\n function _x86Fmix(h) {\\n //\\n // Given a block, returns murmurHash3's final x86 mix of that block.\\n //\\n\\n h ^= h >>> 16;\\n h = _x86Multiply(h, 0x85ebca6b);\\n h ^= h >>> 13;\\n h = _x86Multiply(h, 0xc2b2ae35);\\n h ^= h >>> 16;\\n\\n return h;\\n }\\n\\n function _x64Add(m, n) {\\n //\\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\\n // added together as a 64bit int (as an array of two 32bit ints).\\n //\\n\\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\\n var o = [0, 0, 0, 0];\\n\\n o[3] += m[3] + n[3];\\n o[2] += o[3] >>> 16;\\n o[3] &= 0xffff;\\n\\n o[2] += m[2] + n[2];\\n o[1] += o[2] >>> 16;\\n o[2] &= 0xffff;\\n\\n o[1] += m[1] + n[1];\\n o[0] += o[1] >>> 16;\\n o[1] &= 0xffff;\\n\\n o[0] += m[0] + n[0];\\n o[0] &= 0xffff;\\n\\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\\n }\\n\\n function _x64Multiply(m, n) {\\n //\\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\\n // multiplied together as a 64bit int (as an array of two 32bit ints).\\n //\\n\\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\\n var o = [0, 0, 0, 0];\\n\\n o[3] += m[3] * n[3];\\n o[2] += o[3] >>> 16;\\n o[3] &= 0xffff;\\n\\n o[2] += m[2] * n[3];\\n o[1] += o[2] >>> 16;\\n o[2] &= 0xffff;\\n\\n o[2] += m[3] * n[2];\\n o[1] += o[2] >>> 16;\\n o[2] &= 0xffff;\\n\\n o[1] += m[1] * n[3];\\n o[0] += o[1] >>> 16;\\n o[1] &= 0xffff;\\n\\n o[1] += m[2] * n[2];\\n o[0] += o[1] >>> 16;\\n o[1] &= 0xffff;\\n\\n o[1] += m[3] * n[1];\\n o[0] += o[1] >>> 16;\\n o[1] &= 0xffff;\\n\\n o[0] += (m[0] * n[3]) + (m[1] * n[2]) + (m[2] * n[1]) + (m[3] * n[0]);\\n o[0] &= 0xffff;\\n\\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\\n }\\n\\n function _x64Rotl(m, n) {\\n //\\n // Given a 64bit int (as an array of two 32bit ints) and an int\\n // representing a number of bit positions, returns the 64bit int (as an\\n // array of two 32bit ints) rotated left by that number of positions.\\n //\\n\\n n %= 64;\\n\\n if (n === 32) {\\n return [m[1], m[0]];\\n } else if (n < 32) {\\n return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))];\\n } else {\\n n -= 32;\\n return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))];\\n }\\n }\\n\\n function _x64LeftShift(m, n) {\\n //\\n // Given a 64bit int (as an array of two 32bit ints) and an int\\n // representing a number of bit positions, returns the 64bit int (as an\\n // array of two 32bit ints) shifted left by that number of positions.\\n //\\n\\n n %= 64;\\n\\n if (n === 0) {\\n return m;\\n } else if (n < 32) {\\n return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\\n } else {\\n return [m[1] << (n - 32), 0];\\n }\\n }\\n\\n function _x64Xor(m, n) {\\n //\\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\\n // xored together as a 64bit int (as an array of two 32bit ints).\\n //\\n\\n return [m[0] ^ n[0], m[1] ^ n[1]];\\n }\\n\\n function _x64Fmix(h) {\\n //\\n // Given a block, returns murmurHash3's final x64 mix of that block.\\n // (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the\\n // only place where we need to right shift 64bit ints.)\\n //\\n\\n h = _x64Xor(h, [0, h[0] >>> 1]);\\n h = _x64Multiply(h, [0xff51afd7, 0xed558ccd]);\\n h = _x64Xor(h, [0, h[0] >>> 1]);\\n h = _x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\\n h = _x64Xor(h, [0, h[0] >>> 1]);\\n\\n return h;\\n }\\n\\n // PUBLIC FUNCTIONS\\n // ----------------\\n\\n library.x86.hash32 = function (bytes, seed) {\\n //\\n // Given a string and an optional seed as an int, returns a 32 bit hash\\n // using the x86 flavor of MurmurHash3, as an unsigned int.\\n //\\n if (library.inputValidation && !_validBytes(bytes)) {\\n return undefined;\\n }\\n seed = seed || 0;\\n\\n var remainder = bytes.length % 4;\\n var blocks = bytes.length - remainder;\\n\\n var h1 = seed;\\n\\n var k1 = 0;\\n\\n var c1 = 0xcc9e2d51;\\n var c2 = 0x1b873593;\\n\\n for (var i = 0; i < blocks; i = i + 4) {\\n k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\\n\\n k1 = _x86Multiply(k1, c1);\\n k1 = _x86Rotl(k1, 15);\\n k1 = _x86Multiply(k1, c2);\\n\\n h1 ^= k1;\\n h1 = _x86Rotl(h1, 13);\\n h1 = _x86Multiply(h1, 5) + 0xe6546b64;\\n }\\n\\n k1 = 0;\\n\\n switch (remainder) {\\n case 3:\\n k1 ^= bytes[i + 2] << 16;\\n\\n case 2:\\n k1 ^= bytes[i + 1] << 8;\\n\\n case 1:\\n k1 ^= bytes[i];\\n k1 = _x86Multiply(k1, c1);\\n k1 = _x86Rotl(k1, 15);\\n k1 = _x86Multiply(k1, c2);\\n h1 ^= k1;\\n }\\n\\n h1 ^= bytes.length;\\n h1 = _x86Fmix(h1);\\n\\n return h1 >>> 0;\\n };\\n\\n library.x86.hash128 = function (bytes, seed) {\\n //\\n // Given a string and an optional seed as an int, returns a 128 bit\\n // hash using the x86 flavor of MurmurHash3, as an unsigned hex.\\n //\\n if (library.inputValidation && !_validBytes(bytes)) {\\n return undefined;\\n }\\n\\n seed = seed || 0;\\n var remainder = bytes.length % 16;\\n var blocks = bytes.length - remainder;\\n\\n var h1 = seed;\\n var h2 = seed;\\n var h3 = seed;\\n var h4 = seed;\\n\\n var k1 = 0;\\n var k2 = 0;\\n var k3 = 0;\\n var k4 = 0;\\n\\n var c1 = 0x239b961b;\\n var c2 = 0xab0e9789;\\n var c3 = 0x38b34ae5;\\n var c4 = 0xa1e38b93;\\n\\n for (var i = 0; i < blocks; i = i + 16) {\\n k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\\n k2 = (bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24);\\n k3 = (bytes[i + 8]) | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24);\\n k4 = (bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24);\\n\\n k1 = _x86Multiply(k1, c1);\\n k1 = _x86Rotl(k1, 15);\\n k1 = _x86Multiply(k1, c2);\\n h1 ^= k1;\\n\\n h1 = _x86Rotl(h1, 19);\\n h1 += h2;\\n h1 = _x86Multiply(h1, 5) + 0x561ccd1b;\\n\\n k2 = _x86Multiply(k2, c2);\\n k2 = _x86Rotl(k2, 16);\\n k2 = _x86Multiply(k2, c3);\\n h2 ^= k2;\\n\\n h2 = _x86Rotl(h2, 17);\\n h2 += h3;\\n h2 = _x86Multiply(h2, 5) + 0x0bcaa747;\\n\\n k3 = _x86Multiply(k3, c3);\\n k3 = _x86Rotl(k3, 17);\\n k3 = _x86Multiply(k3, c4);\\n h3 ^= k3;\\n\\n h3 = _x86Rotl(h3, 15);\\n h3 += h4;\\n h3 = _x86Multiply(h3, 5) + 0x96cd1c35;\\n\\n k4 = _x86Multiply(k4, c4);\\n k4 = _x86Rotl(k4, 18);\\n k4 = _x86Multiply(k4, c1);\\n h4 ^= k4;\\n\\n h4 = _x86Rotl(h4, 13);\\n h4 += h1;\\n h4 = _x86Multiply(h4, 5) + 0x32ac3b17;\\n }\\n\\n k1 = 0;\\n k2 = 0;\\n k3 = 0;\\n k4 = 0;\\n\\n switch (remainder) {\\n case 15:\\n k4 ^= bytes[i + 14] << 16;\\n\\n case 14:\\n k4 ^= bytes[i + 13] << 8;\\n\\n case 13:\\n k4 ^= bytes[i + 12];\\n k4 = _x86Multiply(k4, c4);\\n k4 = _x86Rotl(k4, 18);\\n k4 = _x86Multiply(k4, c1);\\n h4 ^= k4;\\n\\n case 12:\\n k3 ^= bytes[i + 11] << 24;\\n\\n case 11:\\n k3 ^= bytes[i + 10] << 16;\\n\\n case 10:\\n k3 ^= bytes[i + 9] << 8;\\n\\n case 9:\\n k3 ^= bytes[i + 8];\\n k3 = _x86Multiply(k3, c3);\\n k3 = _x86Rotl(k3, 17);\\n k3 = _x86Multiply(k3, c4);\\n h3 ^= k3;\\n\\n case 8:\\n k2 ^= bytes[i + 7] << 24;\\n\\n case 7:\\n k2 ^= bytes[i + 6] << 16;\\n\\n case 6:\\n k2 ^= bytes[i + 5] << 8;\\n\\n case 5:\\n k2 ^= bytes[i + 4];\\n k2 = _x86Multiply(k2, c2);\\n k2 = _x86Rotl(k2, 16);\\n k2 = _x86Multiply(k2, c3);\\n h2 ^= k2;\\n\\n case 4:\\n k1 ^= bytes[i + 3] << 24;\\n\\n case 3:\\n k1 ^= bytes[i + 2] << 16;\\n\\n case 2:\\n k1 ^= bytes[i + 1] << 8;\\n\\n case 1:\\n k1 ^= bytes[i];\\n k1 = _x86Multiply(k1, c1);\\n k1 = _x86Rotl(k1, 15);\\n k1 = _x86Multiply(k1, c2);\\n h1 ^= k1;\\n }\\n\\n h1 ^= bytes.length;\\n h2 ^= bytes.length;\\n h3 ^= bytes.length;\\n h4 ^= bytes.length;\\n\\n h1 += h2;\\n h1 += h3;\\n h1 += h4;\\n h2 += h1;\\n h3 += h1;\\n h4 += h1;\\n\\n h1 = _x86Fmix(h1);\\n h2 = _x86Fmix(h2);\\n h3 = _x86Fmix(h3);\\n h4 = _x86Fmix(h4);\\n\\n h1 += h2;\\n h1 += h3;\\n h1 += h4;\\n h2 += h1;\\n h3 += h1;\\n h4 += h1;\\n\\n return (\\\"00000000\\\" + (h1 >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h2 >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h3 >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h4 >>> 0).toString(16)).slice(-8);\\n };\\n\\n library.x64.hash128 = function (bytes, seed) {\\n //\\n // Given a string and an optional seed as an int, returns a 128 bit\\n // hash using the x64 flavor of MurmurHash3, as an unsigned hex.\\n //\\n if (library.inputValidation && !_validBytes(bytes)) {\\n return undefined;\\n }\\n seed = seed || 0;\\n\\n var remainder = bytes.length % 16;\\n var blocks = bytes.length - remainder;\\n\\n var h1 = [0, seed];\\n var h2 = [0, seed];\\n\\n var k1 = [0, 0];\\n var k2 = [0, 0];\\n\\n var c1 = [0x87c37b91, 0x114253d5];\\n var c2 = [0x4cf5ad43, 0x2745937f];\\n\\n for (var i = 0; i < blocks; i = i + 16) {\\n k1 = [(bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24), (bytes[i]) |\\n (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24)];\\n k2 = [(bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24), (bytes[i + 8]) |\\n (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24)];\\n\\n k1 = _x64Multiply(k1, c1);\\n k1 = _x64Rotl(k1, 31);\\n k1 = _x64Multiply(k1, c2);\\n h1 = _x64Xor(h1, k1);\\n\\n h1 = _x64Rotl(h1, 27);\\n h1 = _x64Add(h1, h2);\\n h1 = _x64Add(_x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\\n\\n k2 = _x64Multiply(k2, c2);\\n k2 = _x64Rotl(k2, 33);\\n k2 = _x64Multiply(k2, c1);\\n h2 = _x64Xor(h2, k2);\\n\\n h2 = _x64Rotl(h2, 31);\\n h2 = _x64Add(h2, h1);\\n h2 = _x64Add(_x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\\n }\\n\\n k1 = [0, 0];\\n k2 = [0, 0];\\n\\n switch (remainder) {\\n case 15:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 14]], 48));\\n\\n case 14:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 13]], 40));\\n\\n case 13:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 12]], 32));\\n\\n case 12:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 11]], 24));\\n\\n case 11:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 10]], 16));\\n\\n case 10:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 9]], 8));\\n\\n case 9:\\n k2 = _x64Xor(k2, [0, bytes[i + 8]]);\\n k2 = _x64Multiply(k2, c2);\\n k2 = _x64Rotl(k2, 33);\\n k2 = _x64Multiply(k2, c1);\\n h2 = _x64Xor(h2, k2);\\n\\n case 8:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 7]], 56));\\n\\n case 7:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 6]], 48));\\n\\n case 6:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 5]], 40));\\n\\n case 5:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 4]], 32));\\n\\n case 4:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 3]], 24));\\n\\n case 3:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 2]], 16));\\n\\n case 2:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 1]], 8));\\n\\n case 1:\\n k1 = _x64Xor(k1, [0, bytes[i]]);\\n k1 = _x64Multiply(k1, c1);\\n k1 = _x64Rotl(k1, 31);\\n k1 = _x64Multiply(k1, c2);\\n h1 = _x64Xor(h1, k1);\\n }\\n\\n h1 = _x64Xor(h1, [0, bytes.length]);\\n h2 = _x64Xor(h2, [0, bytes.length]);\\n\\n h1 = _x64Add(h1, h2);\\n h2 = _x64Add(h2, h1);\\n\\n h1 = _x64Fmix(h1);\\n h2 = _x64Fmix(h2);\\n\\n h1 = _x64Add(h1, h2);\\n h2 = _x64Add(h2, h1);\\n\\n return (\\\"00000000\\\" + (h1[0] >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h1[1] >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h2[0] >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h2[1] >>> 0).toString(16)).slice(-8);\\n };\\n\\n // INITIALIZATION\\n // --------------\\n\\n // Export murmurHash3 for CommonJS, either as an AMD module or just as part\\n // of the global object.\\n if (true) {\\n\\n if ( true && module.exports) {\\n exports = module.exports = library;\\n }\\n\\n exports.murmurHash3 = library;\\n\\n } else {}\\n})(this);\\n\\n\\n//# sourceURL=webpack:///./node_modules/murmurhash3js-revisited/lib/murmurHash3js.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/node-fetch/browser.js\":\n/*!********************************************!*\\\n !*** ./node_modules/node-fetch/browser.js ***!\n \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\n// ref: https://github.com/tc39/proposal-global\\nvar getGlobal = function () {\\n\\t// the only reliable means to get the global object is\\n\\t// `Function('return this')()`\\n\\t// However, this causes CSP violations in Chrome apps.\\n\\tif (typeof self !== 'undefined') { return self; }\\n\\tif (typeof window !== 'undefined') { return window; }\\n\\tif (typeof global !== 'undefined') { return global; }\\n\\tthrow new Error('unable to locate global object');\\n}\\n\\nvar global = getGlobal();\\n\\nmodule.exports = exports = global.fetch;\\n\\n// Needed for TypeScript and Webpack.\\nexports.default = global.fetch.bind(global);\\n\\nexports.Headers = global.Headers;\\nexports.Request = global.Request;\\nexports.Response = global.Response;\\n\\n//# sourceURL=webpack:///./node_modules/node-fetch/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/node-libs-browser/node_modules/buffer/index.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/node-libs-browser/node_modules/buffer/index.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(global) {/*!\\n * The buffer module from node.js, for the browser.\\n *\\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\\n * @license MIT\\n */\\n/* eslint-disable no-proto */\\n\\n\\n\\nvar base64 = __webpack_require__(/*! base64-js */ \\\"./node_modules/base64-js/index.js\\\")\\nvar ieee754 = __webpack_require__(/*! ieee754 */ \\\"./node_modules/ieee754/index.js\\\")\\nvar isArray = __webpack_require__(/*! isarray */ \\\"./node_modules/isarray/index.js\\\")\\n\\nexports.Buffer = Buffer\\nexports.SlowBuffer = SlowBuffer\\nexports.INSPECT_MAX_BYTES = 50\\n\\n/**\\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\\n * === true Use Uint8Array implementation (fastest)\\n * === false Use Object implementation (most compatible, even IE6)\\n *\\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\\n * Opera 11.6+, iOS 4.2+.\\n *\\n * Due to various browser bugs, sometimes the Object implementation will be used even\\n * when the browser supports typed arrays.\\n *\\n * Note:\\n *\\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\\n *\\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\\n *\\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\\n * incorrect length in some situations.\\n\\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\\n * get the Object implementation, which is slower but behaves correctly.\\n */\\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\\n ? global.TYPED_ARRAY_SUPPORT\\n : typedArraySupport()\\n\\n/*\\n * Export kMaxLength after typed array support is determined.\\n */\\nexports.kMaxLength = kMaxLength()\\n\\nfunction typedArraySupport () {\\n try {\\n var arr = new Uint8Array(1)\\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\\n return arr.foo() === 42 && // typed array instances can be augmented\\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\\n } catch (e) {\\n return false\\n }\\n}\\n\\nfunction kMaxLength () {\\n return Buffer.TYPED_ARRAY_SUPPORT\\n ? 0x7fffffff\\n : 0x3fffffff\\n}\\n\\nfunction createBuffer (that, length) {\\n if (kMaxLength() < length) {\\n throw new RangeError('Invalid typed array length')\\n }\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n // Return an augmented `Uint8Array` instance, for best performance\\n that = new Uint8Array(length)\\n that.__proto__ = Buffer.prototype\\n } else {\\n // Fallback: Return an object instance of the Buffer class\\n if (that === null) {\\n that = new Buffer(length)\\n }\\n that.length = length\\n }\\n\\n return that\\n}\\n\\n/**\\n * The Buffer constructor returns instances of `Uint8Array` that have their\\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\\n * returns a single octet.\\n *\\n * The `Uint8Array` prototype remains unmodified.\\n */\\n\\nfunction Buffer (arg, encodingOrOffset, length) {\\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\\n return new Buffer(arg, encodingOrOffset, length)\\n }\\n\\n // Common case.\\n if (typeof arg === 'number') {\\n if (typeof encodingOrOffset === 'string') {\\n throw new Error(\\n 'If encoding is specified then the first argument must be a string'\\n )\\n }\\n return allocUnsafe(this, arg)\\n }\\n return from(this, arg, encodingOrOffset, length)\\n}\\n\\nBuffer.poolSize = 8192 // not used by this implementation\\n\\n// TODO: Legacy, not needed anymore. Remove in next major version.\\nBuffer._augment = function (arr) {\\n arr.__proto__ = Buffer.prototype\\n return arr\\n}\\n\\nfunction from (that, value, encodingOrOffset, length) {\\n if (typeof value === 'number') {\\n throw new TypeError('\\\"value\\\" argument must not be a number')\\n }\\n\\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\\n return fromArrayBuffer(that, value, encodingOrOffset, length)\\n }\\n\\n if (typeof value === 'string') {\\n return fromString(that, value, encodingOrOffset)\\n }\\n\\n return fromObject(that, value)\\n}\\n\\n/**\\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\\n * if value is a number.\\n * Buffer.from(str[, encoding])\\n * Buffer.from(array)\\n * Buffer.from(buffer)\\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\\n **/\\nBuffer.from = function (value, encodingOrOffset, length) {\\n return from(null, value, encodingOrOffset, length)\\n}\\n\\nif (Buffer.TYPED_ARRAY_SUPPORT) {\\n Buffer.prototype.__proto__ = Uint8Array.prototype\\n Buffer.__proto__ = Uint8Array\\n if (typeof Symbol !== 'undefined' && Symbol.species &&\\n Buffer[Symbol.species] === Buffer) {\\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\\n Object.defineProperty(Buffer, Symbol.species, {\\n value: null,\\n configurable: true\\n })\\n }\\n}\\n\\nfunction assertSize (size) {\\n if (typeof size !== 'number') {\\n throw new TypeError('\\\"size\\\" argument must be a number')\\n } else if (size < 0) {\\n throw new RangeError('\\\"size\\\" argument must not be negative')\\n }\\n}\\n\\nfunction alloc (that, size, fill, encoding) {\\n assertSize(size)\\n if (size <= 0) {\\n return createBuffer(that, size)\\n }\\n if (fill !== undefined) {\\n // Only pay attention to encoding if it's a string. This\\n // prevents accidentally sending in a number that would\\n // be interpretted as a start offset.\\n return typeof encoding === 'string'\\n ? createBuffer(that, size).fill(fill, encoding)\\n : createBuffer(that, size).fill(fill)\\n }\\n return createBuffer(that, size)\\n}\\n\\n/**\\n * Creates a new filled Buffer instance.\\n * alloc(size[, fill[, encoding]])\\n **/\\nBuffer.alloc = function (size, fill, encoding) {\\n return alloc(null, size, fill, encoding)\\n}\\n\\nfunction allocUnsafe (that, size) {\\n assertSize(size)\\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\\n for (var i = 0; i < size; ++i) {\\n that[i] = 0\\n }\\n }\\n return that\\n}\\n\\n/**\\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\\n * */\\nBuffer.allocUnsafe = function (size) {\\n return allocUnsafe(null, size)\\n}\\n/**\\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\\n */\\nBuffer.allocUnsafeSlow = function (size) {\\n return allocUnsafe(null, size)\\n}\\n\\nfunction fromString (that, string, encoding) {\\n if (typeof encoding !== 'string' || encoding === '') {\\n encoding = 'utf8'\\n }\\n\\n if (!Buffer.isEncoding(encoding)) {\\n throw new TypeError('\\\"encoding\\\" must be a valid string encoding')\\n }\\n\\n var length = byteLength(string, encoding) | 0\\n that = createBuffer(that, length)\\n\\n var actual = that.write(string, encoding)\\n\\n if (actual !== length) {\\n // Writing a hex string, for example, that contains invalid characters will\\n // cause everything after the first invalid character to be ignored. (e.g.\\n // 'abxxcd' will be treated as 'ab')\\n that = that.slice(0, actual)\\n }\\n\\n return that\\n}\\n\\nfunction fromArrayLike (that, array) {\\n var length = array.length < 0 ? 0 : checked(array.length) | 0\\n that = createBuffer(that, length)\\n for (var i = 0; i < length; i += 1) {\\n that[i] = array[i] & 255\\n }\\n return that\\n}\\n\\nfunction fromArrayBuffer (that, array, byteOffset, length) {\\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\\n\\n if (byteOffset < 0 || array.byteLength < byteOffset) {\\n throw new RangeError('\\\\'offset\\\\' is out of bounds')\\n }\\n\\n if (array.byteLength < byteOffset + (length || 0)) {\\n throw new RangeError('\\\\'length\\\\' is out of bounds')\\n }\\n\\n if (byteOffset === undefined && length === undefined) {\\n array = new Uint8Array(array)\\n } else if (length === undefined) {\\n array = new Uint8Array(array, byteOffset)\\n } else {\\n array = new Uint8Array(array, byteOffset, length)\\n }\\n\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n // Return an augmented `Uint8Array` instance, for best performance\\n that = array\\n that.__proto__ = Buffer.prototype\\n } else {\\n // Fallback: Return an object instance of the Buffer class\\n that = fromArrayLike(that, array)\\n }\\n return that\\n}\\n\\nfunction fromObject (that, obj) {\\n if (Buffer.isBuffer(obj)) {\\n var len = checked(obj.length) | 0\\n that = createBuffer(that, len)\\n\\n if (that.length === 0) {\\n return that\\n }\\n\\n obj.copy(that, 0, 0, len)\\n return that\\n }\\n\\n if (obj) {\\n if ((typeof ArrayBuffer !== 'undefined' &&\\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\\n return createBuffer(that, 0)\\n }\\n return fromArrayLike(that, obj)\\n }\\n\\n if (obj.type === 'Buffer' && isArray(obj.data)) {\\n return fromArrayLike(that, obj.data)\\n }\\n }\\n\\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\\n}\\n\\nfunction checked (length) {\\n // Note: cannot use `length < kMaxLength()` here because that fails when\\n // length is NaN (which is otherwise coerced to zero.)\\n if (length >= kMaxLength()) {\\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\\n }\\n return length | 0\\n}\\n\\nfunction SlowBuffer (length) {\\n if (+length != length) { // eslint-disable-line eqeqeq\\n length = 0\\n }\\n return Buffer.alloc(+length)\\n}\\n\\nBuffer.isBuffer = function isBuffer (b) {\\n return !!(b != null && b._isBuffer)\\n}\\n\\nBuffer.compare = function compare (a, b) {\\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\\n throw new TypeError('Arguments must be Buffers')\\n }\\n\\n if (a === b) return 0\\n\\n var x = a.length\\n var y = b.length\\n\\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\\n if (a[i] !== b[i]) {\\n x = a[i]\\n y = b[i]\\n break\\n }\\n }\\n\\n if (x < y) return -1\\n if (y < x) return 1\\n return 0\\n}\\n\\nBuffer.isEncoding = function isEncoding (encoding) {\\n switch (String(encoding).toLowerCase()) {\\n case 'hex':\\n case 'utf8':\\n case 'utf-8':\\n case 'ascii':\\n case 'latin1':\\n case 'binary':\\n case 'base64':\\n case 'ucs2':\\n case 'ucs-2':\\n case 'utf16le':\\n case 'utf-16le':\\n return true\\n default:\\n return false\\n }\\n}\\n\\nBuffer.concat = function concat (list, length) {\\n if (!isArray(list)) {\\n throw new TypeError('\\\"list\\\" argument must be an Array of Buffers')\\n }\\n\\n if (list.length === 0) {\\n return Buffer.alloc(0)\\n }\\n\\n var i\\n if (length === undefined) {\\n length = 0\\n for (i = 0; i < list.length; ++i) {\\n length += list[i].length\\n }\\n }\\n\\n var buffer = Buffer.allocUnsafe(length)\\n var pos = 0\\n for (i = 0; i < list.length; ++i) {\\n var buf = list[i]\\n if (!Buffer.isBuffer(buf)) {\\n throw new TypeError('\\\"list\\\" argument must be an Array of Buffers')\\n }\\n buf.copy(buffer, pos)\\n pos += buf.length\\n }\\n return buffer\\n}\\n\\nfunction byteLength (string, encoding) {\\n if (Buffer.isBuffer(string)) {\\n return string.length\\n }\\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\\n return string.byteLength\\n }\\n if (typeof string !== 'string') {\\n string = '' + string\\n }\\n\\n var len = string.length\\n if (len === 0) return 0\\n\\n // Use a for loop to avoid recursion\\n var loweredCase = false\\n for (;;) {\\n switch (encoding) {\\n case 'ascii':\\n case 'latin1':\\n case 'binary':\\n return len\\n case 'utf8':\\n case 'utf-8':\\n case undefined:\\n return utf8ToBytes(string).length\\n case 'ucs2':\\n case 'ucs-2':\\n case 'utf16le':\\n case 'utf-16le':\\n return len * 2\\n case 'hex':\\n return len >>> 1\\n case 'base64':\\n return base64ToBytes(string).length\\n default:\\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\\n encoding = ('' + encoding).toLowerCase()\\n loweredCase = true\\n }\\n }\\n}\\nBuffer.byteLength = byteLength\\n\\nfunction slowToString (encoding, start, end) {\\n var loweredCase = false\\n\\n // No need to verify that \\\"this.length <= MAX_UINT32\\\" since it's a read-only\\n // property of a typed array.\\n\\n // This behaves neither like String nor Uint8Array in that we set start/end\\n // to their upper/lower bounds if the value passed is out of range.\\n // undefined is handled specially as per ECMA-262 6th Edition,\\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\\n if (start === undefined || start < 0) {\\n start = 0\\n }\\n // Return early if start > this.length. Done here to prevent potential uint32\\n // coercion fail below.\\n if (start > this.length) {\\n return ''\\n }\\n\\n if (end === undefined || end > this.length) {\\n end = this.length\\n }\\n\\n if (end <= 0) {\\n return ''\\n }\\n\\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\\n end >>>= 0\\n start >>>= 0\\n\\n if (end <= start) {\\n return ''\\n }\\n\\n if (!encoding) encoding = 'utf8'\\n\\n while (true) {\\n switch (encoding) {\\n case 'hex':\\n return hexSlice(this, start, end)\\n\\n case 'utf8':\\n case 'utf-8':\\n return utf8Slice(this, start, end)\\n\\n case 'ascii':\\n return asciiSlice(this, start, end)\\n\\n case 'latin1':\\n case 'binary':\\n return latin1Slice(this, start, end)\\n\\n case 'base64':\\n return base64Slice(this, start, end)\\n\\n case 'ucs2':\\n case 'ucs-2':\\n case 'utf16le':\\n case 'utf-16le':\\n return utf16leSlice(this, start, end)\\n\\n default:\\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\\n encoding = (encoding + '').toLowerCase()\\n loweredCase = true\\n }\\n }\\n}\\n\\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\\n// Buffer instances.\\nBuffer.prototype._isBuffer = true\\n\\nfunction swap (b, n, m) {\\n var i = b[n]\\n b[n] = b[m]\\n b[m] = i\\n}\\n\\nBuffer.prototype.swap16 = function swap16 () {\\n var len = this.length\\n if (len % 2 !== 0) {\\n throw new RangeError('Buffer size must be a multiple of 16-bits')\\n }\\n for (var i = 0; i < len; i += 2) {\\n swap(this, i, i + 1)\\n }\\n return this\\n}\\n\\nBuffer.prototype.swap32 = function swap32 () {\\n var len = this.length\\n if (len % 4 !== 0) {\\n throw new RangeError('Buffer size must be a multiple of 32-bits')\\n }\\n for (var i = 0; i < len; i += 4) {\\n swap(this, i, i + 3)\\n swap(this, i + 1, i + 2)\\n }\\n return this\\n}\\n\\nBuffer.prototype.swap64 = function swap64 () {\\n var len = this.length\\n if (len % 8 !== 0) {\\n throw new RangeError('Buffer size must be a multiple of 64-bits')\\n }\\n for (var i = 0; i < len; i += 8) {\\n swap(this, i, i + 7)\\n swap(this, i + 1, i + 6)\\n swap(this, i + 2, i + 5)\\n swap(this, i + 3, i + 4)\\n }\\n return this\\n}\\n\\nBuffer.prototype.toString = function toString () {\\n var length = this.length | 0\\n if (length === 0) return ''\\n if (arguments.length === 0) return utf8Slice(this, 0, length)\\n return slowToString.apply(this, arguments)\\n}\\n\\nBuffer.prototype.equals = function equals (b) {\\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\\n if (this === b) return true\\n return Buffer.compare(this, b) === 0\\n}\\n\\nBuffer.prototype.inspect = function inspect () {\\n var str = ''\\n var max = exports.INSPECT_MAX_BYTES\\n if (this.length > 0) {\\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\\n if (this.length > max) str += ' ... '\\n }\\n return '<Buffer ' + str + '>'\\n}\\n\\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\\n if (!Buffer.isBuffer(target)) {\\n throw new TypeError('Argument must be a Buffer')\\n }\\n\\n if (start === undefined) {\\n start = 0\\n }\\n if (end === undefined) {\\n end = target ? target.length : 0\\n }\\n if (thisStart === undefined) {\\n thisStart = 0\\n }\\n if (thisEnd === undefined) {\\n thisEnd = this.length\\n }\\n\\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\\n throw new RangeError('out of range index')\\n }\\n\\n if (thisStart >= thisEnd && start >= end) {\\n return 0\\n }\\n if (thisStart >= thisEnd) {\\n return -1\\n }\\n if (start >= end) {\\n return 1\\n }\\n\\n start >>>= 0\\n end >>>= 0\\n thisStart >>>= 0\\n thisEnd >>>= 0\\n\\n if (this === target) return 0\\n\\n var x = thisEnd - thisStart\\n var y = end - start\\n var len = Math.min(x, y)\\n\\n var thisCopy = this.slice(thisStart, thisEnd)\\n var targetCopy = target.slice(start, end)\\n\\n for (var i = 0; i < len; ++i) {\\n if (thisCopy[i] !== targetCopy[i]) {\\n x = thisCopy[i]\\n y = targetCopy[i]\\n break\\n }\\n }\\n\\n if (x < y) return -1\\n if (y < x) return 1\\n return 0\\n}\\n\\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\\n//\\n// Arguments:\\n// - buffer - a Buffer to search\\n// - val - a string, Buffer, or number\\n// - byteOffset - an index into `buffer`; will be clamped to an int32\\n// - encoding - an optional encoding, relevant is val is a string\\n// - dir - true for indexOf, false for lastIndexOf\\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\\n // Empty buffer means no match\\n if (buffer.length === 0) return -1\\n\\n // Normalize byteOffset\\n if (typeof byteOffset === 'string') {\\n encoding = byteOffset\\n byteOffset = 0\\n } else if (byteOffset > 0x7fffffff) {\\n byteOffset = 0x7fffffff\\n } else if (byteOffset < -0x80000000) {\\n byteOffset = -0x80000000\\n }\\n byteOffset = +byteOffset // Coerce to Number.\\n if (isNaN(byteOffset)) {\\n // byteOffset: it it's undefined, null, NaN, \\\"foo\\\", etc, search whole buffer\\n byteOffset = dir ? 0 : (buffer.length - 1)\\n }\\n\\n // Normalize byteOffset: negative offsets start from the end of the buffer\\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\\n if (byteOffset >= buffer.length) {\\n if (dir) return -1\\n else byteOffset = buffer.length - 1\\n } else if (byteOffset < 0) {\\n if (dir) byteOffset = 0\\n else return -1\\n }\\n\\n // Normalize val\\n if (typeof val === 'string') {\\n val = Buffer.from(val, encoding)\\n }\\n\\n // Finally, search either indexOf (if dir is true) or lastIndexOf\\n if (Buffer.isBuffer(val)) {\\n // Special case: looking for empty string/buffer always fails\\n if (val.length === 0) {\\n return -1\\n }\\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\\n } else if (typeof val === 'number') {\\n val = val & 0xFF // Search for a byte value [0-255]\\n if (Buffer.TYPED_ARRAY_SUPPORT &&\\n typeof Uint8Array.prototype.indexOf === 'function') {\\n if (dir) {\\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\\n } else {\\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\\n }\\n }\\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\\n }\\n\\n throw new TypeError('val must be string, number or Buffer')\\n}\\n\\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\\n var indexSize = 1\\n var arrLength = arr.length\\n var valLength = val.length\\n\\n if (encoding !== undefined) {\\n encoding = String(encoding).toLowerCase()\\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\\n encoding === 'utf16le' || encoding === 'utf-16le') {\\n if (arr.length < 2 || val.length < 2) {\\n return -1\\n }\\n indexSize = 2\\n arrLength /= 2\\n valLength /= 2\\n byteOffset /= 2\\n }\\n }\\n\\n function read (buf, i) {\\n if (indexSize === 1) {\\n return buf[i]\\n } else {\\n return buf.readUInt16BE(i * indexSize)\\n }\\n }\\n\\n var i\\n if (dir) {\\n var foundIndex = -1\\n for (i = byteOffset; i < arrLength; i++) {\\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\\n if (foundIndex === -1) foundIndex = i\\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\\n } else {\\n if (foundIndex !== -1) i -= i - foundIndex\\n foundIndex = -1\\n }\\n }\\n } else {\\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\\n for (i = byteOffset; i >= 0; i--) {\\n var found = true\\n for (var j = 0; j < valLength; j++) {\\n if (read(arr, i + j) !== read(val, j)) {\\n found = false\\n break\\n }\\n }\\n if (found) return i\\n }\\n }\\n\\n return -1\\n}\\n\\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\\n return this.indexOf(val, byteOffset, encoding) !== -1\\n}\\n\\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\\n}\\n\\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\\n}\\n\\nfunction hexWrite (buf, string, offset, length) {\\n offset = Number(offset) || 0\\n var remaining = buf.length - offset\\n if (!length) {\\n length = remaining\\n } else {\\n length = Number(length)\\n if (length > remaining) {\\n length = remaining\\n }\\n }\\n\\n // must be an even number of digits\\n var strLen = string.length\\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\\n\\n if (length > strLen / 2) {\\n length = strLen / 2\\n }\\n for (var i = 0; i < length; ++i) {\\n var parsed = parseInt(string.substr(i * 2, 2), 16)\\n if (isNaN(parsed)) return i\\n buf[offset + i] = parsed\\n }\\n return i\\n}\\n\\nfunction utf8Write (buf, string, offset, length) {\\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\\n}\\n\\nfunction asciiWrite (buf, string, offset, length) {\\n return blitBuffer(asciiToBytes(string), buf, offset, length)\\n}\\n\\nfunction latin1Write (buf, string, offset, length) {\\n return asciiWrite(buf, string, offset, length)\\n}\\n\\nfunction base64Write (buf, string, offset, length) {\\n return blitBuffer(base64ToBytes(string), buf, offset, length)\\n}\\n\\nfunction ucs2Write (buf, string, offset, length) {\\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\\n}\\n\\nBuffer.prototype.write = function write (string, offset, length, encoding) {\\n // Buffer#write(string)\\n if (offset === undefined) {\\n encoding = 'utf8'\\n length = this.length\\n offset = 0\\n // Buffer#write(string, encoding)\\n } else if (length === undefined && typeof offset === 'string') {\\n encoding = offset\\n length = this.length\\n offset = 0\\n // Buffer#write(string, offset[, length][, encoding])\\n } else if (isFinite(offset)) {\\n offset = offset | 0\\n if (isFinite(length)) {\\n length = length | 0\\n if (encoding === undefined) encoding = 'utf8'\\n } else {\\n encoding = length\\n length = undefined\\n }\\n // legacy write(string, encoding, offset, length) - remove in v0.13\\n } else {\\n throw new Error(\\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\\n )\\n }\\n\\n var remaining = this.length - offset\\n if (length === undefined || length > remaining) length = remaining\\n\\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\\n throw new RangeError('Attempt to write outside buffer bounds')\\n }\\n\\n if (!encoding) encoding = 'utf8'\\n\\n var loweredCase = false\\n for (;;) {\\n switch (encoding) {\\n case 'hex':\\n return hexWrite(this, string, offset, length)\\n\\n case 'utf8':\\n case 'utf-8':\\n return utf8Write(this, string, offset, length)\\n\\n case 'ascii':\\n return asciiWrite(this, string, offset, length)\\n\\n case 'latin1':\\n case 'binary':\\n return latin1Write(this, string, offset, length)\\n\\n case 'base64':\\n // Warning: maxLength not taken into account in base64Write\\n return base64Write(this, string, offset, length)\\n\\n case 'ucs2':\\n case 'ucs-2':\\n case 'utf16le':\\n case 'utf-16le':\\n return ucs2Write(this, string, offset, length)\\n\\n default:\\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\\n encoding = ('' + encoding).toLowerCase()\\n loweredCase = true\\n }\\n }\\n}\\n\\nBuffer.prototype.toJSON = function toJSON () {\\n return {\\n type: 'Buffer',\\n data: Array.prototype.slice.call(this._arr || this, 0)\\n }\\n}\\n\\nfunction base64Slice (buf, start, end) {\\n if (start === 0 && end === buf.length) {\\n return base64.fromByteArray(buf)\\n } else {\\n return base64.fromByteArray(buf.slice(start, end))\\n }\\n}\\n\\nfunction utf8Slice (buf, start, end) {\\n end = Math.min(buf.length, end)\\n var res = []\\n\\n var i = start\\n while (i < end) {\\n var firstByte = buf[i]\\n var codePoint = null\\n var bytesPerSequence = (firstByte > 0xEF) ? 4\\n : (firstByte > 0xDF) ? 3\\n : (firstByte > 0xBF) ? 2\\n : 1\\n\\n if (i + bytesPerSequence <= end) {\\n var secondByte, thirdByte, fourthByte, tempCodePoint\\n\\n switch (bytesPerSequence) {\\n case 1:\\n if (firstByte < 0x80) {\\n codePoint = firstByte\\n }\\n break\\n case 2:\\n secondByte = buf[i + 1]\\n if ((secondByte & 0xC0) === 0x80) {\\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\\n if (tempCodePoint > 0x7F) {\\n codePoint = tempCodePoint\\n }\\n }\\n break\\n case 3:\\n secondByte = buf[i + 1]\\n thirdByte = buf[i + 2]\\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\\n codePoint = tempCodePoint\\n }\\n }\\n break\\n case 4:\\n secondByte = buf[i + 1]\\n thirdByte = buf[i + 2]\\n fourthByte = buf[i + 3]\\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\\n codePoint = tempCodePoint\\n }\\n }\\n }\\n }\\n\\n if (codePoint === null) {\\n // we did not generate a valid codePoint so insert a\\n // replacement char (U+FFFD) and advance only 1 byte\\n codePoint = 0xFFFD\\n bytesPerSequence = 1\\n } else if (codePoint > 0xFFFF) {\\n // encode to utf16 (surrogate pair dance)\\n codePoint -= 0x10000\\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\\n codePoint = 0xDC00 | codePoint & 0x3FF\\n }\\n\\n res.push(codePoint)\\n i += bytesPerSequence\\n }\\n\\n return decodeCodePointsArray(res)\\n}\\n\\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\\n// the lowest limit is Chrome, with 0x10000 args.\\n// We go 1 magnitude less, for safety\\nvar MAX_ARGUMENTS_LENGTH = 0x1000\\n\\nfunction decodeCodePointsArray (codePoints) {\\n var len = codePoints.length\\n if (len <= MAX_ARGUMENTS_LENGTH) {\\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\\n }\\n\\n // Decode in chunks to avoid \\\"call stack size exceeded\\\".\\n var res = ''\\n var i = 0\\n while (i < len) {\\n res += String.fromCharCode.apply(\\n String,\\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\\n )\\n }\\n return res\\n}\\n\\nfunction asciiSlice (buf, start, end) {\\n var ret = ''\\n end = Math.min(buf.length, end)\\n\\n for (var i = start; i < end; ++i) {\\n ret += String.fromCharCode(buf[i] & 0x7F)\\n }\\n return ret\\n}\\n\\nfunction latin1Slice (buf, start, end) {\\n var ret = ''\\n end = Math.min(buf.length, end)\\n\\n for (var i = start; i < end; ++i) {\\n ret += String.fromCharCode(buf[i])\\n }\\n return ret\\n}\\n\\nfunction hexSlice (buf, start, end) {\\n var len = buf.length\\n\\n if (!start || start < 0) start = 0\\n if (!end || end < 0 || end > len) end = len\\n\\n var out = ''\\n for (var i = start; i < end; ++i) {\\n out += toHex(buf[i])\\n }\\n return out\\n}\\n\\nfunction utf16leSlice (buf, start, end) {\\n var bytes = buf.slice(start, end)\\n var res = ''\\n for (var i = 0; i < bytes.length; i += 2) {\\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\\n }\\n return res\\n}\\n\\nBuffer.prototype.slice = function slice (start, end) {\\n var len = this.length\\n start = ~~start\\n end = end === undefined ? len : ~~end\\n\\n if (start < 0) {\\n start += len\\n if (start < 0) start = 0\\n } else if (start > len) {\\n start = len\\n }\\n\\n if (end < 0) {\\n end += len\\n if (end < 0) end = 0\\n } else if (end > len) {\\n end = len\\n }\\n\\n if (end < start) end = start\\n\\n var newBuf\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n newBuf = this.subarray(start, end)\\n newBuf.__proto__ = Buffer.prototype\\n } else {\\n var sliceLen = end - start\\n newBuf = new Buffer(sliceLen, undefined)\\n for (var i = 0; i < sliceLen; ++i) {\\n newBuf[i] = this[i + start]\\n }\\n }\\n\\n return newBuf\\n}\\n\\n/*\\n * Need to make sure that buffer isn't trying to write out of bounds.\\n */\\nfunction checkOffset (offset, ext, length) {\\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\\n}\\n\\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n var val = this[offset]\\n var mul = 1\\n var i = 0\\n while (++i < byteLength && (mul *= 0x100)) {\\n val += this[offset + i] * mul\\n }\\n\\n return val\\n}\\n\\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) {\\n checkOffset(offset, byteLength, this.length)\\n }\\n\\n var val = this[offset + --byteLength]\\n var mul = 1\\n while (byteLength > 0 && (mul *= 0x100)) {\\n val += this[offset + --byteLength] * mul\\n }\\n\\n return val\\n}\\n\\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 1, this.length)\\n return this[offset]\\n}\\n\\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 2, this.length)\\n return this[offset] | (this[offset + 1] << 8)\\n}\\n\\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 2, this.length)\\n return (this[offset] << 8) | this[offset + 1]\\n}\\n\\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n return ((this[offset]) |\\n (this[offset + 1] << 8) |\\n (this[offset + 2] << 16)) +\\n (this[offset + 3] * 0x1000000)\\n}\\n\\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n return (this[offset] * 0x1000000) +\\n ((this[offset + 1] << 16) |\\n (this[offset + 2] << 8) |\\n this[offset + 3])\\n}\\n\\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n var val = this[offset]\\n var mul = 1\\n var i = 0\\n while (++i < byteLength && (mul *= 0x100)) {\\n val += this[offset + i] * mul\\n }\\n mul *= 0x80\\n\\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\\n\\n return val\\n}\\n\\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n var i = byteLength\\n var mul = 1\\n var val = this[offset + --i]\\n while (i > 0 && (mul *= 0x100)) {\\n val += this[offset + --i] * mul\\n }\\n mul *= 0x80\\n\\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\\n\\n return val\\n}\\n\\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 1, this.length)\\n if (!(this[offset] & 0x80)) return (this[offset])\\n return ((0xff - this[offset] + 1) * -1)\\n}\\n\\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 2, this.length)\\n var val = this[offset] | (this[offset + 1] << 8)\\n return (val & 0x8000) ? val | 0xFFFF0000 : val\\n}\\n\\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 2, this.length)\\n var val = this[offset + 1] | (this[offset] << 8)\\n return (val & 0x8000) ? val | 0xFFFF0000 : val\\n}\\n\\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n return (this[offset]) |\\n (this[offset + 1] << 8) |\\n (this[offset + 2] << 16) |\\n (this[offset + 3] << 24)\\n}\\n\\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n return (this[offset] << 24) |\\n (this[offset + 1] << 16) |\\n (this[offset + 2] << 8) |\\n (this[offset + 3])\\n}\\n\\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n return ieee754.read(this, offset, true, 23, 4)\\n}\\n\\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n return ieee754.read(this, offset, false, 23, 4)\\n}\\n\\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 8, this.length)\\n return ieee754.read(this, offset, true, 52, 8)\\n}\\n\\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 8, this.length)\\n return ieee754.read(this, offset, false, 52, 8)\\n}\\n\\nfunction checkInt (buf, value, offset, ext, max, min) {\\n if (!Buffer.isBuffer(buf)) throw new TypeError('\\\"buffer\\\" argument must be a Buffer instance')\\n if (value > max || value < min) throw new RangeError('\\\"value\\\" argument is out of bounds')\\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\\n}\\n\\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\\n value = +value\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) {\\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\\n checkInt(this, value, offset, byteLength, maxBytes, 0)\\n }\\n\\n var mul = 1\\n var i = 0\\n this[offset] = value & 0xFF\\n while (++i < byteLength && (mul *= 0x100)) {\\n this[offset + i] = (value / mul) & 0xFF\\n }\\n\\n return offset + byteLength\\n}\\n\\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\\n value = +value\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) {\\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\\n checkInt(this, value, offset, byteLength, maxBytes, 0)\\n }\\n\\n var i = byteLength - 1\\n var mul = 1\\n this[offset + i] = value & 0xFF\\n while (--i >= 0 && (mul *= 0x100)) {\\n this[offset + i] = (value / mul) & 0xFF\\n }\\n\\n return offset + byteLength\\n}\\n\\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\\n this[offset] = (value & 0xff)\\n return offset + 1\\n}\\n\\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\\n if (value < 0) value = 0xffff + value + 1\\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\\n (littleEndian ? i : 1 - i) * 8\\n }\\n}\\n\\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value & 0xff)\\n this[offset + 1] = (value >>> 8)\\n } else {\\n objectWriteUInt16(this, value, offset, true)\\n }\\n return offset + 2\\n}\\n\\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value >>> 8)\\n this[offset + 1] = (value & 0xff)\\n } else {\\n objectWriteUInt16(this, value, offset, false)\\n }\\n return offset + 2\\n}\\n\\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\\n if (value < 0) value = 0xffffffff + value + 1\\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\\n }\\n}\\n\\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset + 3] = (value >>> 24)\\n this[offset + 2] = (value >>> 16)\\n this[offset + 1] = (value >>> 8)\\n this[offset] = (value & 0xff)\\n } else {\\n objectWriteUInt32(this, value, offset, true)\\n }\\n return offset + 4\\n}\\n\\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value >>> 24)\\n this[offset + 1] = (value >>> 16)\\n this[offset + 2] = (value >>> 8)\\n this[offset + 3] = (value & 0xff)\\n } else {\\n objectWriteUInt32(this, value, offset, false)\\n }\\n return offset + 4\\n}\\n\\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) {\\n var limit = Math.pow(2, 8 * byteLength - 1)\\n\\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\\n }\\n\\n var i = 0\\n var mul = 1\\n var sub = 0\\n this[offset] = value & 0xFF\\n while (++i < byteLength && (mul *= 0x100)) {\\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\\n sub = 1\\n }\\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\\n }\\n\\n return offset + byteLength\\n}\\n\\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) {\\n var limit = Math.pow(2, 8 * byteLength - 1)\\n\\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\\n }\\n\\n var i = byteLength - 1\\n var mul = 1\\n var sub = 0\\n this[offset + i] = value & 0xFF\\n while (--i >= 0 && (mul *= 0x100)) {\\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\\n sub = 1\\n }\\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\\n }\\n\\n return offset + byteLength\\n}\\n\\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\\n if (value < 0) value = 0xff + value + 1\\n this[offset] = (value & 0xff)\\n return offset + 1\\n}\\n\\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value & 0xff)\\n this[offset + 1] = (value >>> 8)\\n } else {\\n objectWriteUInt16(this, value, offset, true)\\n }\\n return offset + 2\\n}\\n\\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value >>> 8)\\n this[offset + 1] = (value & 0xff)\\n } else {\\n objectWriteUInt16(this, value, offset, false)\\n }\\n return offset + 2\\n}\\n\\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value & 0xff)\\n this[offset + 1] = (value >>> 8)\\n this[offset + 2] = (value >>> 16)\\n this[offset + 3] = (value >>> 24)\\n } else {\\n objectWriteUInt32(this, value, offset, true)\\n }\\n return offset + 4\\n}\\n\\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\\n if (value < 0) value = 0xffffffff + value + 1\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value >>> 24)\\n this[offset + 1] = (value >>> 16)\\n this[offset + 2] = (value >>> 8)\\n this[offset + 3] = (value & 0xff)\\n } else {\\n objectWriteUInt32(this, value, offset, false)\\n }\\n return offset + 4\\n}\\n\\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\\n if (offset < 0) throw new RangeError('Index out of range')\\n}\\n\\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\\n if (!noAssert) {\\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\\n }\\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\\n return offset + 4\\n}\\n\\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\\n return writeFloat(this, value, offset, true, noAssert)\\n}\\n\\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\\n return writeFloat(this, value, offset, false, noAssert)\\n}\\n\\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\\n if (!noAssert) {\\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\\n }\\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\\n return offset + 8\\n}\\n\\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\\n return writeDouble(this, value, offset, true, noAssert)\\n}\\n\\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\\n return writeDouble(this, value, offset, false, noAssert)\\n}\\n\\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\\n if (!start) start = 0\\n if (!end && end !== 0) end = this.length\\n if (targetStart >= target.length) targetStart = target.length\\n if (!targetStart) targetStart = 0\\n if (end > 0 && end < start) end = start\\n\\n // Copy 0 bytes; we're done\\n if (end === start) return 0\\n if (target.length === 0 || this.length === 0) return 0\\n\\n // Fatal error conditions\\n if (targetStart < 0) {\\n throw new RangeError('targetStart out of bounds')\\n }\\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\\n\\n // Are we oob?\\n if (end > this.length) end = this.length\\n if (target.length - targetStart < end - start) {\\n end = target.length - targetStart + start\\n }\\n\\n var len = end - start\\n var i\\n\\n if (this === target && start < targetStart && targetStart < end) {\\n // descending copy from end\\n for (i = len - 1; i >= 0; --i) {\\n target[i + targetStart] = this[i + start]\\n }\\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\\n // ascending copy from start\\n for (i = 0; i < len; ++i) {\\n target[i + targetStart] = this[i + start]\\n }\\n } else {\\n Uint8Array.prototype.set.call(\\n target,\\n this.subarray(start, start + len),\\n targetStart\\n )\\n }\\n\\n return len\\n}\\n\\n// Usage:\\n// buffer.fill(number[, offset[, end]])\\n// buffer.fill(buffer[, offset[, end]])\\n// buffer.fill(string[, offset[, end]][, encoding])\\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\\n // Handle string cases:\\n if (typeof val === 'string') {\\n if (typeof start === 'string') {\\n encoding = start\\n start = 0\\n end = this.length\\n } else if (typeof end === 'string') {\\n encoding = end\\n end = this.length\\n }\\n if (val.length === 1) {\\n var code = val.charCodeAt(0)\\n if (code < 256) {\\n val = code\\n }\\n }\\n if (encoding !== undefined && typeof encoding !== 'string') {\\n throw new TypeError('encoding must be a string')\\n }\\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\\n throw new TypeError('Unknown encoding: ' + encoding)\\n }\\n } else if (typeof val === 'number') {\\n val = val & 255\\n }\\n\\n // Invalid ranges are not set to a default, so can range check early.\\n if (start < 0 || this.length < start || this.length < end) {\\n throw new RangeError('Out of range index')\\n }\\n\\n if (end <= start) {\\n return this\\n }\\n\\n start = start >>> 0\\n end = end === undefined ? this.length : end >>> 0\\n\\n if (!val) val = 0\\n\\n var i\\n if (typeof val === 'number') {\\n for (i = start; i < end; ++i) {\\n this[i] = val\\n }\\n } else {\\n var bytes = Buffer.isBuffer(val)\\n ? val\\n : utf8ToBytes(new Buffer(val, encoding).toString())\\n var len = bytes.length\\n for (i = 0; i < end - start; ++i) {\\n this[i + start] = bytes[i % len]\\n }\\n }\\n\\n return this\\n}\\n\\n// HELPER FUNCTIONS\\n// ================\\n\\nvar INVALID_BASE64_RE = /[^+\\\\/0-9A-Za-z-_]/g\\n\\nfunction base64clean (str) {\\n // Node strips out invalid characters like \\\\n and \\\\t from the string, base64-js does not\\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\\n // Node converts strings with length < 2 to ''\\n if (str.length < 2) return ''\\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\\n while (str.length % 4 !== 0) {\\n str = str + '='\\n }\\n return str\\n}\\n\\nfunction stringtrim (str) {\\n if (str.trim) return str.trim()\\n return str.replace(/^\\\\s+|\\\\s+$/g, '')\\n}\\n\\nfunction toHex (n) {\\n if (n < 16) return '0' + n.toString(16)\\n return n.toString(16)\\n}\\n\\nfunction utf8ToBytes (string, units) {\\n units = units || Infinity\\n var codePoint\\n var length = string.length\\n var leadSurrogate = null\\n var bytes = []\\n\\n for (var i = 0; i < length; ++i) {\\n codePoint = string.charCodeAt(i)\\n\\n // is surrogate component\\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\\n // last char was a lead\\n if (!leadSurrogate) {\\n // no lead yet\\n if (codePoint > 0xDBFF) {\\n // unexpected trail\\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n continue\\n } else if (i + 1 === length) {\\n // unpaired lead\\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n continue\\n }\\n\\n // valid lead\\n leadSurrogate = codePoint\\n\\n continue\\n }\\n\\n // 2 leads in a row\\n if (codePoint < 0xDC00) {\\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n leadSurrogate = codePoint\\n continue\\n }\\n\\n // valid surrogate pair\\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\\n } else if (leadSurrogate) {\\n // valid bmp char, but last char was a lead\\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n }\\n\\n leadSurrogate = null\\n\\n // encode utf8\\n if (codePoint < 0x80) {\\n if ((units -= 1) < 0) break\\n bytes.push(codePoint)\\n } else if (codePoint < 0x800) {\\n if ((units -= 2) < 0) break\\n bytes.push(\\n codePoint >> 0x6 | 0xC0,\\n codePoint & 0x3F | 0x80\\n )\\n } else if (codePoint < 0x10000) {\\n if ((units -= 3) < 0) break\\n bytes.push(\\n codePoint >> 0xC | 0xE0,\\n codePoint >> 0x6 & 0x3F | 0x80,\\n codePoint & 0x3F | 0x80\\n )\\n } else if (codePoint < 0x110000) {\\n if ((units -= 4) < 0) break\\n bytes.push(\\n codePoint >> 0x12 | 0xF0,\\n codePoint >> 0xC & 0x3F | 0x80,\\n codePoint >> 0x6 & 0x3F | 0x80,\\n codePoint & 0x3F | 0x80\\n )\\n } else {\\n throw new Error('Invalid code point')\\n }\\n }\\n\\n return bytes\\n}\\n\\nfunction asciiToBytes (str) {\\n var byteArray = []\\n for (var i = 0; i < str.length; ++i) {\\n // Node's code seems to be doing this and not & 0x7F..\\n byteArray.push(str.charCodeAt(i) & 0xFF)\\n }\\n return byteArray\\n}\\n\\nfunction utf16leToBytes (str, units) {\\n var c, hi, lo\\n var byteArray = []\\n for (var i = 0; i < str.length; ++i) {\\n if ((units -= 2) < 0) break\\n\\n c = str.charCodeAt(i)\\n hi = c >> 8\\n lo = c % 256\\n byteArray.push(lo)\\n byteArray.push(hi)\\n }\\n\\n return byteArray\\n}\\n\\nfunction base64ToBytes (str) {\\n return base64.toByteArray(base64clean(str))\\n}\\n\\nfunction blitBuffer (src, dst, offset, length) {\\n for (var i = 0; i < length; ++i) {\\n if ((i + offset >= dst.length) || (i >= src.length)) break\\n dst[i + offset] = src[i]\\n }\\n return i\\n}\\n\\nfunction isnan (val) {\\n return val !== val // eslint-disable-line no-self-compare\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/node-libs-browser/node_modules/buffer/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/orbit-db-io/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {const CID = __webpack_require__(/*! cids */ \\\"./node_modules/orbit-db-io/node_modules/cids/src/index.js\\\")\\nconst dagPB = __webpack_require__(/*! ipld-dag-pb */ \\\"./node_modules/ipld-dag-pb/src/index.js\\\")\\nconst defaultBase = 'base58btc'\\n\\nconst cidifyString = (str) => {\\n if (!str) {\\n return str\\n }\\n\\n if (Array.isArray(str)) {\\n return str.map(cidifyString)\\n }\\n\\n return new CID(str)\\n}\\n\\nconst stringifyCid = (cid, options) => {\\n if (!cid || typeof cid === 'string') {\\n return cid\\n }\\n\\n if (Array.isArray(cid)) {\\n return cid.map(stringifyCid)\\n }\\n\\n if (cid['/']) {\\n return cid['/']\\n }\\n\\n const base = options.base || defaultBase\\n return cid.toBaseEncodedString(base)\\n}\\n\\nconst writePb = async (ipfs, obj, options) => {\\n const buffer = Buffer.from(JSON.stringify(obj))\\n const dagNode = new dagPB.DAGNode(buffer)\\n const cid = await ipfs.dag.put(dagNode, {\\n format: 'dag-pb',\\n hashAlg: 'sha2-256'\\n })\\n\\n const res = cid.toV0().toBaseEncodedString()\\n const pin = options.pin || false\\n if (pin) {\\n await ipfs.pin.add(res)\\n }\\n\\n return res\\n}\\n\\nconst readPb = async (ipfs, cid) => {\\n const result = await ipfs.dag.get(cid)\\n const dagNode = result.value\\n\\n return JSON.parse(dagNode.toJSON().data)\\n}\\n\\nconst writeCbor = async (ipfs, obj, options) => {\\n const dagNode = Object.assign({}, obj)\\n const links = options.links || []\\n links.forEach((prop) => {\\n if (dagNode[prop]) {\\n dagNode[prop] = cidifyString(dagNode[prop])\\n }\\n })\\n\\n const base = options.base || defaultBase\\n const onlyHash = options.onlyHash || false\\n const cid = await ipfs.dag.put(dagNode, { onlyHash })\\n const res = cid.toBaseEncodedString(base)\\n const pin = options.pin || false\\n if (pin) {\\n await ipfs.pin.add(res)\\n }\\n return res\\n}\\n\\nconst readCbor = async (ipfs, cid, options) => {\\n const result = await ipfs.dag.get(cid)\\n const obj = result.value\\n const links = options.links || []\\n links.forEach((prop) => {\\n if (obj[prop]) {\\n obj[prop] = stringifyCid(obj[prop], options)\\n }\\n })\\n\\n return obj\\n}\\n\\nconst writeObj = async (ipfs, obj, options) => {\\n const onlyHash = options.onlyHash || false\\n const base = options.base || defaultBase\\n const opts = Object.assign({}, { onlyHash: onlyHash }, options.format ? { format: options.format, hashAlg: 'sha2-256' } : {})\\n if (opts.format === 'dag-pb') {\\n obj = new dagPB.DAGNode(obj)\\n }\\n\\n const cid = await ipfs.dag.put(obj, opts)\\n const res = cid.toBaseEncodedString(base)\\n const pin = options.pin || false\\n if (pin) {\\n await ipfs.pin.add(res)\\n }\\n return res\\n}\\n\\nconst formats = {\\n 'dag-pb': { read: readPb, write: writePb },\\n 'dag-cbor': { write: writeCbor, read: readCbor },\\n 'raw': { write: writeObj }\\n}\\n\\nconst write = (ipfs, codec, obj, options = {}) => {\\n const format = formats[codec]\\n if (!format) throw new Error('Unsupported codec')\\n\\n return format.write(ipfs, obj, options)\\n}\\n\\nconst read = (ipfs, cid, options = {}) => {\\n cid = new CID(cid)\\n const format = formats[cid.codec]\\n\\n if (!format) throw new Error('Unsupported codec')\\n\\n return format.read(ipfs, cid, options)\\n}\\n\\nmodule.exports = {\\n read,\\n write\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/cids/src/cid-util.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/cids/src/cid-util.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst mh = __webpack_require__(/*! multihashes */ \\\"./node_modules/orbit-db-io/node_modules/multihashes/src/index.js\\\")\\n\\nvar CIDUtil = {\\n /**\\n * Test if the given input is a valid CID object.\\n * Returns an error message if it is not.\\n * Returns undefined if it is a valid CID.\\n *\\n * @param {any} other\\n * @returns {string}\\n */\\n checkCIDComponents: function (other) {\\n if (other == null) {\\n return 'null values are not valid CIDs'\\n }\\n\\n if (!(other.version === 0 || other.version === 1)) {\\n return 'Invalid version, must be a number equal to 1 or 0'\\n }\\n\\n if (typeof other.codec !== 'string') {\\n return 'codec must be string'\\n }\\n\\n if (other.version === 0) {\\n if (other.codec !== 'dag-pb') {\\n return \\\"codec must be 'dag-pb' for CIDv0\\\"\\n }\\n if (other.multibaseName !== 'base58btc') {\\n return \\\"multibaseName must be 'base58btc' for CIDv0\\\"\\n }\\n }\\n\\n if (!Buffer.isBuffer(other.multihash)) {\\n return 'multihash must be a Buffer'\\n }\\n\\n try {\\n mh.validate(other.multihash)\\n } catch (err) {\\n let errorMsg = err.message\\n if (!errorMsg) { // Just in case mh.validate() throws an error with empty error message\\n errorMsg = 'Multihash validation failed'\\n }\\n return errorMsg\\n }\\n }\\n}\\n\\nmodule.exports = CIDUtil\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/cids/src/cid-util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/cids/src/index.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/cids/src/index.js ***!\n \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst mh = __webpack_require__(/*! multihashes */ \\\"./node_modules/orbit-db-io/node_modules/multihashes/src/index.js\\\")\\nconst multibase = __webpack_require__(/*! multibase */ \\\"./node_modules/multibase/src/index.js\\\")\\nconst multicodec = __webpack_require__(/*! multicodec */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/index.js\\\")\\nconst codecs = __webpack_require__(/*! multicodec/src/base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\nconst CIDUtil = __webpack_require__(/*! ./cid-util */ \\\"./node_modules/orbit-db-io/node_modules/cids/src/cid-util.js\\\")\\nconst withIs = __webpack_require__(/*! class-is */ \\\"./node_modules/class-is/index.js\\\")\\n\\n/**\\n * @typedef {Object} SerializedCID\\n * @param {string} codec\\n * @param {number} version\\n * @param {Buffer} multihash\\n */\\n\\n/**\\n * Test if the given input is a CID.\\n * @function isCID\\n * @memberof CID\\n * @static\\n * @param {any} other\\n * @returns {bool}\\n */\\n\\n/**\\n * Class representing a CID `<mbase><version><mcodec><mhash>`\\n * , as defined in [ipld/cid](https://github.com/multiformats/cid).\\n * @class CID\\n */\\nclass CID {\\n /**\\n * Create a new CID.\\n *\\n * The algorithm for argument input is roughly:\\n * ```\\n * if (cid)\\n * -> create a copy\\n * else if (str)\\n * if (1st char is on multibase table) -> CID String\\n * else -> bs58 encoded multihash\\n * else if (Buffer)\\n * if (1st byte is 0 or 1) -> CID\\n * else -> multihash\\n * else if (Number)\\n * -> construct CID by parts\\n * ```\\n *\\n * @param {string|Buffer|CID} version\\n * @param {string} [codec]\\n * @param {Buffer} [multihash]\\n * @param {string} [multibaseName]\\n *\\n * @example\\n * new CID(<version>, <codec>, <multihash>, <multibaseName>)\\n * new CID(<cidStr>)\\n * new CID(<cid.buffer>)\\n * new CID(<multihash>)\\n * new CID(<bs58 encoded multihash>)\\n * new CID(<cid>)\\n */\\n constructor (version, codec, multihash, multibaseName) {\\n if (_CID.isCID(version)) {\\n // version is an exising CID instance\\n const cid = version\\n this.version = cid.version\\n this.codec = cid.codec\\n this.multihash = Buffer.from(cid.multihash)\\n // Default guard for when a CID < 0.7 is passed with no multibaseName\\n this.multibaseName = cid.multibaseName || (cid.version === 0 ? 'base58btc' : 'base32')\\n return\\n }\\n\\n if (typeof version === 'string') {\\n // e.g. 'base32' or false\\n const baseName = multibase.isEncoded(version)\\n if (baseName) {\\n // version is a CID String encoded with multibase, so v1\\n const cid = multibase.decode(version)\\n this.version = parseInt(cid.slice(0, 1).toString('hex'), 16)\\n this.codec = multicodec.getCodec(cid.slice(1))\\n this.multihash = multicodec.rmPrefix(cid.slice(1))\\n this.multibaseName = baseName\\n } else {\\n // version is a base58btc string multihash, so v0\\n this.version = 0\\n this.codec = 'dag-pb'\\n this.multihash = mh.fromB58String(version)\\n this.multibaseName = 'base58btc'\\n }\\n CID.validateCID(this)\\n Object.defineProperty(this, 'string', { value: version })\\n return\\n }\\n\\n if (Buffer.isBuffer(version)) {\\n const firstByte = version.slice(0, 1)\\n const v = parseInt(firstByte.toString('hex'), 16)\\n if (v === 1) {\\n // version is a CID buffer\\n const cid = version\\n this.version = v\\n this.codec = multicodec.getCodec(cid.slice(1))\\n this.multihash = multicodec.rmPrefix(cid.slice(1))\\n this.multibaseName = 'base32'\\n } else {\\n // version is a raw multihash buffer, so v0\\n this.version = 0\\n this.codec = 'dag-pb'\\n this.multihash = version\\n this.multibaseName = 'base58btc'\\n }\\n CID.validateCID(this)\\n return\\n }\\n\\n // otherwise, assemble the CID from the parameters\\n\\n /**\\n * @type {number}\\n */\\n this.version = version\\n\\n /**\\n * @type {string}\\n */\\n this.codec = codec\\n\\n /**\\n * @type {Buffer}\\n */\\n this.multihash = multihash\\n\\n /**\\n * @type {string}\\n */\\n this.multibaseName = multibaseName || (version === 0 ? 'base58btc' : 'base32')\\n\\n CID.validateCID(this)\\n }\\n\\n /**\\n * The CID as a `Buffer`\\n *\\n * @return {Buffer}\\n * @readonly\\n *\\n * @memberOf CID\\n */\\n get buffer () {\\n let buffer = this._buffer\\n\\n if (!buffer) {\\n if (this.version === 0) {\\n buffer = this.multihash\\n } else if (this.version === 1) {\\n buffer = Buffer.concat([\\n Buffer.from('01', 'hex'),\\n multicodec.getCodeVarint(this.codec),\\n this.multihash\\n ])\\n } else {\\n throw new Error('unsupported version')\\n }\\n\\n // Cache this buffer so it doesn't have to be recreated\\n Object.defineProperty(this, '_buffer', { value: buffer })\\n }\\n\\n return buffer\\n }\\n\\n /**\\n * Get the prefix of the CID.\\n *\\n * @returns {Buffer}\\n * @readonly\\n */\\n get prefix () {\\n return Buffer.concat([\\n Buffer.from(`0${this.version}`, 'hex'),\\n multicodec.getCodeVarint(this.codec),\\n mh.prefix(this.multihash)\\n ])\\n }\\n\\n /**\\n * Convert to a CID of version `0`.\\n *\\n * @returns {CID}\\n */\\n toV0 () {\\n if (this.codec !== 'dag-pb') {\\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\\n }\\n\\n const { name, length } = mh.decode(this.multihash)\\n\\n if (name !== 'sha2-256') {\\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\\n }\\n\\n if (length !== 32) {\\n throw new Error('Cannot convert non 32 byte multihash CID to CIDv0')\\n }\\n\\n return new _CID(0, this.codec, this.multihash)\\n }\\n\\n /**\\n * Convert to a CID of version `1`.\\n *\\n * @returns {CID}\\n */\\n toV1 () {\\n return new _CID(1, this.codec, this.multihash)\\n }\\n\\n /**\\n * Encode the CID into a string.\\n *\\n * @param {string} [base=this.multibaseName] - Base encoding to use.\\n * @returns {string}\\n */\\n toBaseEncodedString (base = this.multibaseName) {\\n if (this.string && base === this.multibaseName) {\\n return this.string\\n }\\n let str = null\\n if (this.version === 0) {\\n if (base !== 'base58btc') {\\n throw new Error('not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()')\\n }\\n str = mh.toB58String(this.multihash)\\n } else if (this.version === 1) {\\n str = multibase.encode(base, this.buffer).toString()\\n } else {\\n throw new Error('unsupported version')\\n }\\n if (base === this.multibaseName) {\\n // cache the string value\\n Object.defineProperty(this, 'string', { value: str })\\n }\\n return str\\n }\\n\\n toString (base) {\\n return this.toBaseEncodedString(base)\\n }\\n\\n /**\\n * Serialize to a plain object.\\n *\\n * @returns {SerializedCID}\\n */\\n toJSON () {\\n return {\\n codec: this.codec,\\n version: this.version,\\n hash: this.multihash\\n }\\n }\\n\\n /**\\n * Compare equality with another CID.\\n *\\n * @param {CID} other\\n * @returns {bool}\\n */\\n equals (other) {\\n return this.codec === other.codec &&\\n this.version === other.version &&\\n this.multihash.equals(other.multihash)\\n }\\n\\n /**\\n * Test if the given input is a valid CID object.\\n * Throws if it is not.\\n *\\n * @param {any} other\\n * @returns {void}\\n */\\n static validateCID (other) {\\n const errorMsg = CIDUtil.checkCIDComponents(other)\\n if (errorMsg) {\\n throw new Error(errorMsg)\\n }\\n }\\n}\\n\\nconst _CID = withIs(CID, {\\n className: 'CID',\\n symbolName: '@ipld/js-cid/CID'\\n})\\n\\n_CID.codecs = codecs\\n\\nmodule.exports = _CID\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/cids/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json ***!\n \\******************************************************************************/\n/*! exports provided: identity, ip4, tcp, sha1, sha2-256, sha2-512, sha3-512, sha3-384, sha3-256, sha3-224, shake-128, shake-256, keccak-224, keccak-256, keccak-384, keccak-512, dccp, murmur3-128, murmur3-32, ip6, ip6zone, path, multicodec, multihash, multiaddr, multibase, dns, dns4, dns6, dnsaddr, protobuf, cbor, raw, dbl-sha2-256, rlp, bencode, dag-pb, dag-cbor, libp2p-key, git-raw, torrent-info, torrent-file, leofcoin-block, leofcoin-tx, leofcoin-pr, sctp, eth-block, eth-block-list, eth-tx-trie, eth-tx, eth-tx-receipt-trie, eth-tx-receipt, eth-state-trie, eth-account-snapshot, eth-storage-trie, bitcoin-block, bitcoin-tx, zcash-block, zcash-tx, stellar-block, stellar-tx, md4, md5, bmt, decred-block, decred-tx, ipld-ns, ipfs-ns, swarm-ns, ipns-ns, zeronet, ed25519-pub, dash-block, dash-tx, swarm-manifest, swarm-feed, udp, p2p-webrtc-star, p2p-webrtc-direct, p2p-stardust, p2p-circuit, dag-json, udt, utp, unix, p2p, ipfs, https, onion, onion3, garlic64, garlic32, tls, quic, ws, wss, p2p-websocket-star, http, json, messagepack, x11, blake2b-8, blake2b-16, blake2b-24, blake2b-32, blake2b-40, blake2b-48, blake2b-56, blake2b-64, blake2b-72, blake2b-80, blake2b-88, blake2b-96, blake2b-104, blake2b-112, blake2b-120, blake2b-128, blake2b-136, blake2b-144, blake2b-152, blake2b-160, blake2b-168, blake2b-176, blake2b-184, blake2b-192, blake2b-200, blake2b-208, blake2b-216, blake2b-224, blake2b-232, blake2b-240, blake2b-248, blake2b-256, blake2b-264, blake2b-272, blake2b-280, blake2b-288, blake2b-296, blake2b-304, blake2b-312, blake2b-320, blake2b-328, blake2b-336, blake2b-344, blake2b-352, blake2b-360, blake2b-368, blake2b-376, blake2b-384, blake2b-392, blake2b-400, blake2b-408, blake2b-416, blake2b-424, blake2b-432, blake2b-440, blake2b-448, blake2b-456, blake2b-464, blake2b-472, blake2b-480, blake2b-488, blake2b-496, blake2b-504, blake2b-512, blake2s-8, blake2s-16, blake2s-24, blake2s-32, blake2s-40, blake2s-48, blake2s-56, blake2s-64, blake2s-72, blake2s-80, blake2s-88, blake2s-96, blake2s-104, blake2s-112, blake2s-120, blake2s-128, blake2s-136, blake2s-144, blake2s-152, blake2s-160, blake2s-168, blake2s-176, blake2s-184, blake2s-192, blake2s-200, blake2s-208, blake2s-216, blake2s-224, blake2s-232, blake2s-240, blake2s-248, blake2s-256, skein256-8, skein256-16, skein256-24, skein256-32, skein256-40, skein256-48, skein256-56, skein256-64, skein256-72, skein256-80, skein256-88, skein256-96, skein256-104, skein256-112, skein256-120, skein256-128, skein256-136, skein256-144, skein256-152, skein256-160, skein256-168, skein256-176, skein256-184, skein256-192, skein256-200, skein256-208, skein256-216, skein256-224, skein256-232, skein256-240, skein256-248, skein256-256, skein512-8, skein512-16, skein512-24, skein512-32, skein512-40, skein512-48, skein512-56, skein512-64, skein512-72, skein512-80, skein512-88, skein512-96, skein512-104, skein512-112, skein512-120, skein512-128, skein512-136, skein512-144, skein512-152, skein512-160, skein512-168, skein512-176, skein512-184, skein512-192, skein512-200, skein512-208, skein512-216, skein512-224, skein512-232, skein512-240, skein512-248, skein512-256, skein512-264, skein512-272, skein512-280, skein512-288, skein512-296, skein512-304, skein512-312, skein512-320, skein512-328, skein512-336, skein512-344, skein512-352, skein512-360, skein512-368, skein512-376, skein512-384, skein512-392, skein512-400, skein512-408, skein512-416, skein512-424, skein512-432, skein512-440, skein512-448, skein512-456, skein512-464, skein512-472, skein512-480, skein512-488, skein512-496, skein512-504, skein512-512, skein1024-8, skein1024-16, skein1024-24, skein1024-32, skein1024-40, skein1024-48, skein1024-56, skein1024-64, skein1024-72, skein1024-80, skein1024-88, skein1024-96, skein1024-104, skein1024-112, skein1024-120, skein1024-128, skein1024-136, skein1024-144, skein1024-152, skein1024-160, skein1024-168, skein1024-176, skein1024-184, skein1024-192, skein1024-200, skein1024-208, skein1024-216, skein1024-224, skein1024-232, skein1024-240, skein1024-248, skein1024-256, skein1024-264, skein1024-272, skein1024-280, skein1024-288, skein1024-296, skein1024-304, skein1024-312, skein1024-320, skein1024-328, skein1024-336, skein1024-344, skein1024-352, skein1024-360, skein1024-368, skein1024-376, skein1024-384, skein1024-392, skein1024-400, skein1024-408, skein1024-416, skein1024-424, skein1024-432, skein1024-440, skein1024-448, skein1024-456, skein1024-464, skein1024-472, skein1024-480, skein1024-488, skein1024-496, skein1024-504, skein1024-512, skein1024-520, skein1024-528, skein1024-536, skein1024-544, skein1024-552, skein1024-560, skein1024-568, skein1024-576, skein1024-584, skein1024-592, skein1024-600, skein1024-608, skein1024-616, skein1024-624, skein1024-632, skein1024-640, skein1024-648, skein1024-656, skein1024-664, skein1024-672, skein1024-680, skein1024-688, skein1024-696, skein1024-704, skein1024-712, skein1024-720, skein1024-728, skein1024-736, skein1024-744, skein1024-752, skein1024-760, skein1024-768, skein1024-776, skein1024-784, skein1024-792, skein1024-800, skein1024-808, skein1024-816, skein1024-824, skein1024-832, skein1024-840, skein1024-848, skein1024-856, skein1024-864, skein1024-872, skein1024-880, skein1024-888, skein1024-896, skein1024-904, skein1024-912, skein1024-920, skein1024-928, skein1024-936, skein1024-944, skein1024-952, skein1024-960, skein1024-968, skein1024-976, skein1024-984, skein1024-992, skein1024-1000, skein1024-1008, skein1024-1016, skein1024-1024, holochain-adr-v0, holochain-adr-v1, holochain-key-v0, holochain-key-v1, holochain-sig-v0, holochain-sig-v1, default */\n/***/ (function(module) {\n\neval(\"module.exports = {\\\"identity\\\":0,\\\"ip4\\\":4,\\\"tcp\\\":6,\\\"sha1\\\":17,\\\"sha2-256\\\":18,\\\"sha2-512\\\":19,\\\"sha3-512\\\":20,\\\"sha3-384\\\":21,\\\"sha3-256\\\":22,\\\"sha3-224\\\":23,\\\"shake-128\\\":24,\\\"shake-256\\\":25,\\\"keccak-224\\\":26,\\\"keccak-256\\\":27,\\\"keccak-384\\\":28,\\\"keccak-512\\\":29,\\\"dccp\\\":33,\\\"murmur3-128\\\":34,\\\"murmur3-32\\\":35,\\\"ip6\\\":41,\\\"ip6zone\\\":42,\\\"path\\\":47,\\\"multicodec\\\":48,\\\"multihash\\\":49,\\\"multiaddr\\\":50,\\\"multibase\\\":51,\\\"dns\\\":53,\\\"dns4\\\":54,\\\"dns6\\\":55,\\\"dnsaddr\\\":56,\\\"protobuf\\\":80,\\\"cbor\\\":81,\\\"raw\\\":85,\\\"dbl-sha2-256\\\":86,\\\"rlp\\\":96,\\\"bencode\\\":99,\\\"dag-pb\\\":112,\\\"dag-cbor\\\":113,\\\"libp2p-key\\\":114,\\\"git-raw\\\":120,\\\"torrent-info\\\":123,\\\"torrent-file\\\":124,\\\"leofcoin-block\\\":129,\\\"leofcoin-tx\\\":130,\\\"leofcoin-pr\\\":131,\\\"sctp\\\":132,\\\"eth-block\\\":144,\\\"eth-block-list\\\":145,\\\"eth-tx-trie\\\":146,\\\"eth-tx\\\":147,\\\"eth-tx-receipt-trie\\\":148,\\\"eth-tx-receipt\\\":149,\\\"eth-state-trie\\\":150,\\\"eth-account-snapshot\\\":151,\\\"eth-storage-trie\\\":152,\\\"bitcoin-block\\\":176,\\\"bitcoin-tx\\\":177,\\\"zcash-block\\\":192,\\\"zcash-tx\\\":193,\\\"stellar-block\\\":208,\\\"stellar-tx\\\":209,\\\"md4\\\":212,\\\"md5\\\":213,\\\"bmt\\\":214,\\\"decred-block\\\":224,\\\"decred-tx\\\":225,\\\"ipld-ns\\\":226,\\\"ipfs-ns\\\":227,\\\"swarm-ns\\\":228,\\\"ipns-ns\\\":229,\\\"zeronet\\\":230,\\\"ed25519-pub\\\":237,\\\"dash-block\\\":240,\\\"dash-tx\\\":241,\\\"swarm-manifest\\\":250,\\\"swarm-feed\\\":251,\\\"udp\\\":273,\\\"p2p-webrtc-star\\\":275,\\\"p2p-webrtc-direct\\\":276,\\\"p2p-stardust\\\":277,\\\"p2p-circuit\\\":290,\\\"dag-json\\\":297,\\\"udt\\\":301,\\\"utp\\\":302,\\\"unix\\\":400,\\\"p2p\\\":421,\\\"ipfs\\\":421,\\\"https\\\":443,\\\"onion\\\":444,\\\"onion3\\\":445,\\\"garlic64\\\":446,\\\"garlic32\\\":447,\\\"tls\\\":448,\\\"quic\\\":460,\\\"ws\\\":477,\\\"wss\\\":478,\\\"p2p-websocket-star\\\":479,\\\"http\\\":480,\\\"json\\\":512,\\\"messagepack\\\":513,\\\"x11\\\":4352,\\\"blake2b-8\\\":45569,\\\"blake2b-16\\\":45570,\\\"blake2b-24\\\":45571,\\\"blake2b-32\\\":45572,\\\"blake2b-40\\\":45573,\\\"blake2b-48\\\":45574,\\\"blake2b-56\\\":45575,\\\"blake2b-64\\\":45576,\\\"blake2b-72\\\":45577,\\\"blake2b-80\\\":45578,\\\"blake2b-88\\\":45579,\\\"blake2b-96\\\":45580,\\\"blake2b-104\\\":45581,\\\"blake2b-112\\\":45582,\\\"blake2b-120\\\":45583,\\\"blake2b-128\\\":45584,\\\"blake2b-136\\\":45585,\\\"blake2b-144\\\":45586,\\\"blake2b-152\\\":45587,\\\"blake2b-160\\\":45588,\\\"blake2b-168\\\":45589,\\\"blake2b-176\\\":45590,\\\"blake2b-184\\\":45591,\\\"blake2b-192\\\":45592,\\\"blake2b-200\\\":45593,\\\"blake2b-208\\\":45594,\\\"blake2b-216\\\":45595,\\\"blake2b-224\\\":45596,\\\"blake2b-232\\\":45597,\\\"blake2b-240\\\":45598,\\\"blake2b-248\\\":45599,\\\"blake2b-256\\\":45600,\\\"blake2b-264\\\":45601,\\\"blake2b-272\\\":45602,\\\"blake2b-280\\\":45603,\\\"blake2b-288\\\":45604,\\\"blake2b-296\\\":45605,\\\"blake2b-304\\\":45606,\\\"blake2b-312\\\":45607,\\\"blake2b-320\\\":45608,\\\"blake2b-328\\\":45609,\\\"blake2b-336\\\":45610,\\\"blake2b-344\\\":45611,\\\"blake2b-352\\\":45612,\\\"blake2b-360\\\":45613,\\\"blake2b-368\\\":45614,\\\"blake2b-376\\\":45615,\\\"blake2b-384\\\":45616,\\\"blake2b-392\\\":45617,\\\"blake2b-400\\\":45618,\\\"blake2b-408\\\":45619,\\\"blake2b-416\\\":45620,\\\"blake2b-424\\\":45621,\\\"blake2b-432\\\":45622,\\\"blake2b-440\\\":45623,\\\"blake2b-448\\\":45624,\\\"blake2b-456\\\":45625,\\\"blake2b-464\\\":45626,\\\"blake2b-472\\\":45627,\\\"blake2b-480\\\":45628,\\\"blake2b-488\\\":45629,\\\"blake2b-496\\\":45630,\\\"blake2b-504\\\":45631,\\\"blake2b-512\\\":45632,\\\"blake2s-8\\\":45633,\\\"blake2s-16\\\":45634,\\\"blake2s-24\\\":45635,\\\"blake2s-32\\\":45636,\\\"blake2s-40\\\":45637,\\\"blake2s-48\\\":45638,\\\"blake2s-56\\\":45639,\\\"blake2s-64\\\":45640,\\\"blake2s-72\\\":45641,\\\"blake2s-80\\\":45642,\\\"blake2s-88\\\":45643,\\\"blake2s-96\\\":45644,\\\"blake2s-104\\\":45645,\\\"blake2s-112\\\":45646,\\\"blake2s-120\\\":45647,\\\"blake2s-128\\\":45648,\\\"blake2s-136\\\":45649,\\\"blake2s-144\\\":45650,\\\"blake2s-152\\\":45651,\\\"blake2s-160\\\":45652,\\\"blake2s-168\\\":45653,\\\"blake2s-176\\\":45654,\\\"blake2s-184\\\":45655,\\\"blake2s-192\\\":45656,\\\"blake2s-200\\\":45657,\\\"blake2s-208\\\":45658,\\\"blake2s-216\\\":45659,\\\"blake2s-224\\\":45660,\\\"blake2s-232\\\":45661,\\\"blake2s-240\\\":45662,\\\"blake2s-248\\\":45663,\\\"blake2s-256\\\":45664,\\\"skein256-8\\\":45825,\\\"skein256-16\\\":45826,\\\"skein256-24\\\":45827,\\\"skein256-32\\\":45828,\\\"skein256-40\\\":45829,\\\"skein256-48\\\":45830,\\\"skein256-56\\\":45831,\\\"skein256-64\\\":45832,\\\"skein256-72\\\":45833,\\\"skein256-80\\\":45834,\\\"skein256-88\\\":45835,\\\"skein256-96\\\":45836,\\\"skein256-104\\\":45837,\\\"skein256-112\\\":45838,\\\"skein256-120\\\":45839,\\\"skein256-128\\\":45840,\\\"skein256-136\\\":45841,\\\"skein256-144\\\":45842,\\\"skein256-152\\\":45843,\\\"skein256-160\\\":45844,\\\"skein256-168\\\":45845,\\\"skein256-176\\\":45846,\\\"skein256-184\\\":45847,\\\"skein256-192\\\":45848,\\\"skein256-200\\\":45849,\\\"skein256-208\\\":45850,\\\"skein256-216\\\":45851,\\\"skein256-224\\\":45852,\\\"skein256-232\\\":45853,\\\"skein256-240\\\":45854,\\\"skein256-248\\\":45855,\\\"skein256-256\\\":45856,\\\"skein512-8\\\":45857,\\\"skein512-16\\\":45858,\\\"skein512-24\\\":45859,\\\"skein512-32\\\":45860,\\\"skein512-40\\\":45861,\\\"skein512-48\\\":45862,\\\"skein512-56\\\":45863,\\\"skein512-64\\\":45864,\\\"skein512-72\\\":45865,\\\"skein512-80\\\":45866,\\\"skein512-88\\\":45867,\\\"skein512-96\\\":45868,\\\"skein512-104\\\":45869,\\\"skein512-112\\\":45870,\\\"skein512-120\\\":45871,\\\"skein512-128\\\":45872,\\\"skein512-136\\\":45873,\\\"skein512-144\\\":45874,\\\"skein512-152\\\":45875,\\\"skein512-160\\\":45876,\\\"skein512-168\\\":45877,\\\"skein512-176\\\":45878,\\\"skein512-184\\\":45879,\\\"skein512-192\\\":45880,\\\"skein512-200\\\":45881,\\\"skein512-208\\\":45882,\\\"skein512-216\\\":45883,\\\"skein512-224\\\":45884,\\\"skein512-232\\\":45885,\\\"skein512-240\\\":45886,\\\"skein512-248\\\":45887,\\\"skein512-256\\\":45888,\\\"skein512-264\\\":45889,\\\"skein512-272\\\":45890,\\\"skein512-280\\\":45891,\\\"skein512-288\\\":45892,\\\"skein512-296\\\":45893,\\\"skein512-304\\\":45894,\\\"skein512-312\\\":45895,\\\"skein512-320\\\":45896,\\\"skein512-328\\\":45897,\\\"skein512-336\\\":45898,\\\"skein512-344\\\":45899,\\\"skein512-352\\\":45900,\\\"skein512-360\\\":45901,\\\"skein512-368\\\":45902,\\\"skein512-376\\\":45903,\\\"skein512-384\\\":45904,\\\"skein512-392\\\":45905,\\\"skein512-400\\\":45906,\\\"skein512-408\\\":45907,\\\"skein512-416\\\":45908,\\\"skein512-424\\\":45909,\\\"skein512-432\\\":45910,\\\"skein512-440\\\":45911,\\\"skein512-448\\\":45912,\\\"skein512-456\\\":45913,\\\"skein512-464\\\":45914,\\\"skein512-472\\\":45915,\\\"skein512-480\\\":45916,\\\"skein512-488\\\":45917,\\\"skein512-496\\\":45918,\\\"skein512-504\\\":45919,\\\"skein512-512\\\":45920,\\\"skein1024-8\\\":45921,\\\"skein1024-16\\\":45922,\\\"skein1024-24\\\":45923,\\\"skein1024-32\\\":45924,\\\"skein1024-40\\\":45925,\\\"skein1024-48\\\":45926,\\\"skein1024-56\\\":45927,\\\"skein1024-64\\\":45928,\\\"skein1024-72\\\":45929,\\\"skein1024-80\\\":45930,\\\"skein1024-88\\\":45931,\\\"skein1024-96\\\":45932,\\\"skein1024-104\\\":45933,\\\"skein1024-112\\\":45934,\\\"skein1024-120\\\":45935,\\\"skein1024-128\\\":45936,\\\"skein1024-136\\\":45937,\\\"skein1024-144\\\":45938,\\\"skein1024-152\\\":45939,\\\"skein1024-160\\\":45940,\\\"skein1024-168\\\":45941,\\\"skein1024-176\\\":45942,\\\"skein1024-184\\\":45943,\\\"skein1024-192\\\":45944,\\\"skein1024-200\\\":45945,\\\"skein1024-208\\\":45946,\\\"skein1024-216\\\":45947,\\\"skein1024-224\\\":45948,\\\"skein1024-232\\\":45949,\\\"skein1024-240\\\":45950,\\\"skein1024-248\\\":45951,\\\"skein1024-256\\\":45952,\\\"skein1024-264\\\":45953,\\\"skein1024-272\\\":45954,\\\"skein1024-280\\\":45955,\\\"skein1024-288\\\":45956,\\\"skein1024-296\\\":45957,\\\"skein1024-304\\\":45958,\\\"skein1024-312\\\":45959,\\\"skein1024-320\\\":45960,\\\"skein1024-328\\\":45961,\\\"skein1024-336\\\":45962,\\\"skein1024-344\\\":45963,\\\"skein1024-352\\\":45964,\\\"skein1024-360\\\":45965,\\\"skein1024-368\\\":45966,\\\"skein1024-376\\\":45967,\\\"skein1024-384\\\":45968,\\\"skein1024-392\\\":45969,\\\"skein1024-400\\\":45970,\\\"skein1024-408\\\":45971,\\\"skein1024-416\\\":45972,\\\"skein1024-424\\\":45973,\\\"skein1024-432\\\":45974,\\\"skein1024-440\\\":45975,\\\"skein1024-448\\\":45976,\\\"skein1024-456\\\":45977,\\\"skein1024-464\\\":45978,\\\"skein1024-472\\\":45979,\\\"skein1024-480\\\":45980,\\\"skein1024-488\\\":45981,\\\"skein1024-496\\\":45982,\\\"skein1024-504\\\":45983,\\\"skein1024-512\\\":45984,\\\"skein1024-520\\\":45985,\\\"skein1024-528\\\":45986,\\\"skein1024-536\\\":45987,\\\"skein1024-544\\\":45988,\\\"skein1024-552\\\":45989,\\\"skein1024-560\\\":45990,\\\"skein1024-568\\\":45991,\\\"skein1024-576\\\":45992,\\\"skein1024-584\\\":45993,\\\"skein1024-592\\\":45994,\\\"skein1024-600\\\":45995,\\\"skein1024-608\\\":45996,\\\"skein1024-616\\\":45997,\\\"skein1024-624\\\":45998,\\\"skein1024-632\\\":45999,\\\"skein1024-640\\\":46000,\\\"skein1024-648\\\":46001,\\\"skein1024-656\\\":46002,\\\"skein1024-664\\\":46003,\\\"skein1024-672\\\":46004,\\\"skein1024-680\\\":46005,\\\"skein1024-688\\\":46006,\\\"skein1024-696\\\":46007,\\\"skein1024-704\\\":46008,\\\"skein1024-712\\\":46009,\\\"skein1024-720\\\":46010,\\\"skein1024-728\\\":46011,\\\"skein1024-736\\\":46012,\\\"skein1024-744\\\":46013,\\\"skein1024-752\\\":46014,\\\"skein1024-760\\\":46015,\\\"skein1024-768\\\":46016,\\\"skein1024-776\\\":46017,\\\"skein1024-784\\\":46018,\\\"skein1024-792\\\":46019,\\\"skein1024-800\\\":46020,\\\"skein1024-808\\\":46021,\\\"skein1024-816\\\":46022,\\\"skein1024-824\\\":46023,\\\"skein1024-832\\\":46024,\\\"skein1024-840\\\":46025,\\\"skein1024-848\\\":46026,\\\"skein1024-856\\\":46027,\\\"skein1024-864\\\":46028,\\\"skein1024-872\\\":46029,\\\"skein1024-880\\\":46030,\\\"skein1024-888\\\":46031,\\\"skein1024-896\\\":46032,\\\"skein1024-904\\\":46033,\\\"skein1024-912\\\":46034,\\\"skein1024-920\\\":46035,\\\"skein1024-928\\\":46036,\\\"skein1024-936\\\":46037,\\\"skein1024-944\\\":46038,\\\"skein1024-952\\\":46039,\\\"skein1024-960\\\":46040,\\\"skein1024-968\\\":46041,\\\"skein1024-976\\\":46042,\\\"skein1024-984\\\":46043,\\\"skein1024-992\\\":46044,\\\"skein1024-1000\\\":46045,\\\"skein1024-1008\\\":46046,\\\"skein1024-1016\\\":46047,\\\"skein1024-1024\\\":46048,\\\"holochain-adr-v0\\\":8417572,\\\"holochain-adr-v1\\\":8483108,\\\"holochain-key-v0\\\":9728292,\\\"holochain-key-v1\\\":9793828,\\\"holochain-sig-v0\\\":10645796,\\\"holochain-sig-v1\\\":10711332};\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/constants.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/constants.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst table = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for codecConstant -> code\\nconst constants = {}\\n\\nfor (const [name, code] of Object.entries(table)) {\\n constants[name.toUpperCase().replace(/-/g, '_')] = code\\n}\\n\\nmodule.exports = Object.freeze(constants)\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/index.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/index.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Implementation of the multicodec specification.\\n *\\n * @module multicodec\\n * @example\\n * const multicodec = require('multicodec')\\n *\\n * const prefixedProtobuf = multicodec.addPrefix('protobuf', protobufBuffer)\\n * // prefixedProtobuf 0x50...\\n *\\n */\\n\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nconst intTable = __webpack_require__(/*! ./int-table */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/int-table.js\\\")\\nconst codecNameToCodeVarint = __webpack_require__(/*! ./varint-table */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/varint-table.js\\\")\\nconst util = __webpack_require__(/*! ./util */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/util.js\\\")\\n\\nexports = module.exports\\n\\n/**\\n * Prefix a buffer with a multicodec-packed.\\n *\\n * @param {string|number} multicodecStrOrCode\\n * @param {Buffer} data\\n * @returns {Buffer}\\n */\\nexports.addPrefix = (multicodecStrOrCode, data) => {\\n let prefix\\n\\n if (Buffer.isBuffer(multicodecStrOrCode)) {\\n prefix = util.varintBufferEncode(multicodecStrOrCode)\\n } else {\\n if (codecNameToCodeVarint[multicodecStrOrCode]) {\\n prefix = codecNameToCodeVarint[multicodecStrOrCode]\\n } else {\\n throw new Error('multicodec not recognized')\\n }\\n }\\n return Buffer.concat([prefix, data])\\n}\\n\\n/**\\n * Decapsulate the multicodec-packed prefix from the data.\\n *\\n * @param {Buffer} data\\n * @returns {Buffer}\\n */\\nexports.rmPrefix = (data) => {\\n varint.decode(data)\\n return data.slice(varint.decode.bytes)\\n}\\n\\n/**\\n * Get the codec of the prefixed data.\\n * @param {Buffer} prefixedData\\n * @returns {string}\\n */\\nexports.getCodec = (prefixedData) => {\\n const code = varint.decode(prefixedData)\\n const codecName = intTable.get(code)\\n if (codecName === undefined) {\\n throw new Error(`Code ${code} not found`)\\n }\\n return codecName\\n}\\n\\n/**\\n * Get the name of the codec.\\n * @param {number} codec\\n * @returns {string}\\n */\\nexports.getName = (codec) => {\\n return intTable.get(codec)\\n}\\n\\n/**\\n * Get the code of the codec\\n * @param {string} name\\n * @returns {number}\\n */\\nexports.getNumber = (name) => {\\n const code = codecNameToCodeVarint[name]\\n if (code === undefined) {\\n throw new Error('Codec `' + name + '` not found')\\n }\\n return util.varintBufferDecode(code)[0]\\n}\\n\\n/**\\n * Get the code of the prefixed data.\\n * @param {Buffer} prefixedData\\n * @returns {number}\\n */\\nexports.getCode = (prefixedData) => {\\n return varint.decode(prefixedData)\\n}\\n\\n/**\\n * Get the code as varint of a codec name.\\n * @param {string} codecName\\n * @returns {Buffer}\\n */\\nexports.getCodeVarint = (codecName) => {\\n const code = codecNameToCodeVarint[codecName]\\n if (code === undefined) {\\n throw new Error('Codec `' + codecName + '` not found')\\n }\\n return code\\n}\\n\\n/**\\n * Get the varint of a code.\\n * @param {Number} code\\n * @returns {Array.<number>}\\n */\\nexports.getVarint = (code) => {\\n return varint.encode(code)\\n}\\n\\n// Make the constants top-level constants\\nconst constants = __webpack_require__(/*! ./constants */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/constants.js\\\")\\nObject.assign(exports, constants)\\n\\n// Human friendly names for printing, e.g. in error messages\\nexports.print = __webpack_require__(/*! ./print */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/print.js\\\")\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/int-table.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/int-table.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nconst baseTable = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for hexString -> codecName\\nconst nameTable = new Map()\\n\\nfor (const encodingName in baseTable) {\\n const code = baseTable[encodingName]\\n nameTable.set(code, encodingName)\\n}\\n\\nmodule.exports = Object.freeze(nameTable)\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/int-table.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/print.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/print.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst table = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for code -> print friendly name\\nconst tableByCode = {}\\n\\nfor (const [name, code] of Object.entries(table)) {\\n if (tableByCode[code] === undefined) tableByCode[code] = name\\n}\\n\\nmodule.exports = Object.freeze(tableByCode)\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/print.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/util.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/util.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nmodule.exports = {\\n numberToBuffer,\\n bufferToNumber,\\n varintBufferEncode,\\n varintBufferDecode,\\n varintEncode\\n}\\n\\nfunction bufferToNumber (buf) {\\n return parseInt(buf.toString('hex'), 16)\\n}\\n\\nfunction numberToBuffer (num) {\\n let hexString = num.toString(16)\\n if (hexString.length % 2 === 1) {\\n hexString = '0' + hexString\\n }\\n return Buffer.from(hexString, 'hex')\\n}\\n\\nfunction varintBufferEncode (input) {\\n return Buffer.from(varint.encode(bufferToNumber(input)))\\n}\\n\\nfunction varintBufferDecode (input) {\\n return numberToBuffer(varint.decode(input))\\n}\\n\\nfunction varintEncode (num) {\\n return Buffer.from(varint.encode(num))\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/varint-table.js\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/varint-table.js ***!\n \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst baseTable = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\nconst varintEncode = __webpack_require__(/*! ./util */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/util.js\\\").varintEncode\\n\\n// map for codecName -> codeVarintBuffer\\nconst varintTable = {}\\n\\nfor (const encodingName in baseTable) {\\n const code = baseTable[encodingName]\\n varintTable[encodingName] = varintEncode(code)\\n}\\n\\nmodule.exports = Object.freeze(varintTable)\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/varint-table.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multihashes/src/constants.js\":\n/*!****************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multihashes/src/constants.js ***!\n \\****************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* eslint quote-props: off */\\n/* eslint key-spacing: off */\\n\\n\\nexports.names = Object.freeze({\\n 'identity': 0x0,\\n 'sha1': 0x11,\\n 'sha2-256': 0x12,\\n 'sha2-512': 0x13,\\n 'dbl-sha2-256': 0x56,\\n 'sha3-224': 0x17,\\n 'sha3-256': 0x16,\\n 'sha3-384': 0x15,\\n 'sha3-512': 0x14,\\n 'shake-128': 0x18,\\n 'shake-256': 0x19,\\n 'keccak-224': 0x1A,\\n 'keccak-256': 0x1B,\\n 'keccak-384': 0x1C,\\n 'keccak-512': 0x1D,\\n 'murmur3-128': 0x22,\\n 'murmur3-32': 0x23,\\n 'blake2b-8': 0xb201,\\n 'blake2b-16': 0xb202,\\n 'blake2b-24': 0xb203,\\n 'blake2b-32': 0xb204,\\n 'blake2b-40': 0xb205,\\n 'blake2b-48': 0xb206,\\n 'blake2b-56': 0xb207,\\n 'blake2b-64': 0xb208,\\n 'blake2b-72': 0xb209,\\n 'blake2b-80': 0xb20a,\\n 'blake2b-88': 0xb20b,\\n 'blake2b-96': 0xb20c,\\n 'blake2b-104': 0xb20d,\\n 'blake2b-112': 0xb20e,\\n 'blake2b-120': 0xb20f,\\n 'blake2b-128': 0xb210,\\n 'blake2b-136': 0xb211,\\n 'blake2b-144': 0xb212,\\n 'blake2b-152': 0xb213,\\n 'blake2b-160': 0xb214,\\n 'blake2b-168': 0xb215,\\n 'blake2b-176': 0xb216,\\n 'blake2b-184': 0xb217,\\n 'blake2b-192': 0xb218,\\n 'blake2b-200': 0xb219,\\n 'blake2b-208': 0xb21a,\\n 'blake2b-216': 0xb21b,\\n 'blake2b-224': 0xb21c,\\n 'blake2b-232': 0xb21d,\\n 'blake2b-240': 0xb21e,\\n 'blake2b-248': 0xb21f,\\n 'blake2b-256': 0xb220,\\n 'blake2b-264': 0xb221,\\n 'blake2b-272': 0xb222,\\n 'blake2b-280': 0xb223,\\n 'blake2b-288': 0xb224,\\n 'blake2b-296': 0xb225,\\n 'blake2b-304': 0xb226,\\n 'blake2b-312': 0xb227,\\n 'blake2b-320': 0xb228,\\n 'blake2b-328': 0xb229,\\n 'blake2b-336': 0xb22a,\\n 'blake2b-344': 0xb22b,\\n 'blake2b-352': 0xb22c,\\n 'blake2b-360': 0xb22d,\\n 'blake2b-368': 0xb22e,\\n 'blake2b-376': 0xb22f,\\n 'blake2b-384': 0xb230,\\n 'blake2b-392': 0xb231,\\n 'blake2b-400': 0xb232,\\n 'blake2b-408': 0xb233,\\n 'blake2b-416': 0xb234,\\n 'blake2b-424': 0xb235,\\n 'blake2b-432': 0xb236,\\n 'blake2b-440': 0xb237,\\n 'blake2b-448': 0xb238,\\n 'blake2b-456': 0xb239,\\n 'blake2b-464': 0xb23a,\\n 'blake2b-472': 0xb23b,\\n 'blake2b-480': 0xb23c,\\n 'blake2b-488': 0xb23d,\\n 'blake2b-496': 0xb23e,\\n 'blake2b-504': 0xb23f,\\n 'blake2b-512': 0xb240,\\n 'blake2s-8': 0xb241,\\n 'blake2s-16': 0xb242,\\n 'blake2s-24': 0xb243,\\n 'blake2s-32': 0xb244,\\n 'blake2s-40': 0xb245,\\n 'blake2s-48': 0xb246,\\n 'blake2s-56': 0xb247,\\n 'blake2s-64': 0xb248,\\n 'blake2s-72': 0xb249,\\n 'blake2s-80': 0xb24a,\\n 'blake2s-88': 0xb24b,\\n 'blake2s-96': 0xb24c,\\n 'blake2s-104': 0xb24d,\\n 'blake2s-112': 0xb24e,\\n 'blake2s-120': 0xb24f,\\n 'blake2s-128': 0xb250,\\n 'blake2s-136': 0xb251,\\n 'blake2s-144': 0xb252,\\n 'blake2s-152': 0xb253,\\n 'blake2s-160': 0xb254,\\n 'blake2s-168': 0xb255,\\n 'blake2s-176': 0xb256,\\n 'blake2s-184': 0xb257,\\n 'blake2s-192': 0xb258,\\n 'blake2s-200': 0xb259,\\n 'blake2s-208': 0xb25a,\\n 'blake2s-216': 0xb25b,\\n 'blake2s-224': 0xb25c,\\n 'blake2s-232': 0xb25d,\\n 'blake2s-240': 0xb25e,\\n 'blake2s-248': 0xb25f,\\n 'blake2s-256': 0xb260,\\n 'Skein256-8': 0xb301,\\n 'Skein256-16': 0xb302,\\n 'Skein256-24': 0xb303,\\n 'Skein256-32': 0xb304,\\n 'Skein256-40': 0xb305,\\n 'Skein256-48': 0xb306,\\n 'Skein256-56': 0xb307,\\n 'Skein256-64': 0xb308,\\n 'Skein256-72': 0xb309,\\n 'Skein256-80': 0xb30a,\\n 'Skein256-88': 0xb30b,\\n 'Skein256-96': 0xb30c,\\n 'Skein256-104': 0xb30d,\\n 'Skein256-112': 0xb30e,\\n 'Skein256-120': 0xb30f,\\n 'Skein256-128': 0xb310,\\n 'Skein256-136': 0xb311,\\n 'Skein256-144': 0xb312,\\n 'Skein256-152': 0xb313,\\n 'Skein256-160': 0xb314,\\n 'Skein256-168': 0xb315,\\n 'Skein256-176': 0xb316,\\n 'Skein256-184': 0xb317,\\n 'Skein256-192': 0xb318,\\n 'Skein256-200': 0xb319,\\n 'Skein256-208': 0xb31a,\\n 'Skein256-216': 0xb31b,\\n 'Skein256-224': 0xb31c,\\n 'Skein256-232': 0xb31d,\\n 'Skein256-240': 0xb31e,\\n 'Skein256-248': 0xb31f,\\n 'Skein256-256': 0xb320,\\n 'Skein512-8': 0xb321,\\n 'Skein512-16': 0xb322,\\n 'Skein512-24': 0xb323,\\n 'Skein512-32': 0xb324,\\n 'Skein512-40': 0xb325,\\n 'Skein512-48': 0xb326,\\n 'Skein512-56': 0xb327,\\n 'Skein512-64': 0xb328,\\n 'Skein512-72': 0xb329,\\n 'Skein512-80': 0xb32a,\\n 'Skein512-88': 0xb32b,\\n 'Skein512-96': 0xb32c,\\n 'Skein512-104': 0xb32d,\\n 'Skein512-112': 0xb32e,\\n 'Skein512-120': 0xb32f,\\n 'Skein512-128': 0xb330,\\n 'Skein512-136': 0xb331,\\n 'Skein512-144': 0xb332,\\n 'Skein512-152': 0xb333,\\n 'Skein512-160': 0xb334,\\n 'Skein512-168': 0xb335,\\n 'Skein512-176': 0xb336,\\n 'Skein512-184': 0xb337,\\n 'Skein512-192': 0xb338,\\n 'Skein512-200': 0xb339,\\n 'Skein512-208': 0xb33a,\\n 'Skein512-216': 0xb33b,\\n 'Skein512-224': 0xb33c,\\n 'Skein512-232': 0xb33d,\\n 'Skein512-240': 0xb33e,\\n 'Skein512-248': 0xb33f,\\n 'Skein512-256': 0xb340,\\n 'Skein512-264': 0xb341,\\n 'Skein512-272': 0xb342,\\n 'Skein512-280': 0xb343,\\n 'Skein512-288': 0xb344,\\n 'Skein512-296': 0xb345,\\n 'Skein512-304': 0xb346,\\n 'Skein512-312': 0xb347,\\n 'Skein512-320': 0xb348,\\n 'Skein512-328': 0xb349,\\n 'Skein512-336': 0xb34a,\\n 'Skein512-344': 0xb34b,\\n 'Skein512-352': 0xb34c,\\n 'Skein512-360': 0xb34d,\\n 'Skein512-368': 0xb34e,\\n 'Skein512-376': 0xb34f,\\n 'Skein512-384': 0xb350,\\n 'Skein512-392': 0xb351,\\n 'Skein512-400': 0xb352,\\n 'Skein512-408': 0xb353,\\n 'Skein512-416': 0xb354,\\n 'Skein512-424': 0xb355,\\n 'Skein512-432': 0xb356,\\n 'Skein512-440': 0xb357,\\n 'Skein512-448': 0xb358,\\n 'Skein512-456': 0xb359,\\n 'Skein512-464': 0xb35a,\\n 'Skein512-472': 0xb35b,\\n 'Skein512-480': 0xb35c,\\n 'Skein512-488': 0xb35d,\\n 'Skein512-496': 0xb35e,\\n 'Skein512-504': 0xb35f,\\n 'Skein512-512': 0xb360,\\n 'Skein1024-8': 0xb361,\\n 'Skein1024-16': 0xb362,\\n 'Skein1024-24': 0xb363,\\n 'Skein1024-32': 0xb364,\\n 'Skein1024-40': 0xb365,\\n 'Skein1024-48': 0xb366,\\n 'Skein1024-56': 0xb367,\\n 'Skein1024-64': 0xb368,\\n 'Skein1024-72': 0xb369,\\n 'Skein1024-80': 0xb36a,\\n 'Skein1024-88': 0xb36b,\\n 'Skein1024-96': 0xb36c,\\n 'Skein1024-104': 0xb36d,\\n 'Skein1024-112': 0xb36e,\\n 'Skein1024-120': 0xb36f,\\n 'Skein1024-128': 0xb370,\\n 'Skein1024-136': 0xb371,\\n 'Skein1024-144': 0xb372,\\n 'Skein1024-152': 0xb373,\\n 'Skein1024-160': 0xb374,\\n 'Skein1024-168': 0xb375,\\n 'Skein1024-176': 0xb376,\\n 'Skein1024-184': 0xb377,\\n 'Skein1024-192': 0xb378,\\n 'Skein1024-200': 0xb379,\\n 'Skein1024-208': 0xb37a,\\n 'Skein1024-216': 0xb37b,\\n 'Skein1024-224': 0xb37c,\\n 'Skein1024-232': 0xb37d,\\n 'Skein1024-240': 0xb37e,\\n 'Skein1024-248': 0xb37f,\\n 'Skein1024-256': 0xb380,\\n 'Skein1024-264': 0xb381,\\n 'Skein1024-272': 0xb382,\\n 'Skein1024-280': 0xb383,\\n 'Skein1024-288': 0xb384,\\n 'Skein1024-296': 0xb385,\\n 'Skein1024-304': 0xb386,\\n 'Skein1024-312': 0xb387,\\n 'Skein1024-320': 0xb388,\\n 'Skein1024-328': 0xb389,\\n 'Skein1024-336': 0xb38a,\\n 'Skein1024-344': 0xb38b,\\n 'Skein1024-352': 0xb38c,\\n 'Skein1024-360': 0xb38d,\\n 'Skein1024-368': 0xb38e,\\n 'Skein1024-376': 0xb38f,\\n 'Skein1024-384': 0xb390,\\n 'Skein1024-392': 0xb391,\\n 'Skein1024-400': 0xb392,\\n 'Skein1024-408': 0xb393,\\n 'Skein1024-416': 0xb394,\\n 'Skein1024-424': 0xb395,\\n 'Skein1024-432': 0xb396,\\n 'Skein1024-440': 0xb397,\\n 'Skein1024-448': 0xb398,\\n 'Skein1024-456': 0xb399,\\n 'Skein1024-464': 0xb39a,\\n 'Skein1024-472': 0xb39b,\\n 'Skein1024-480': 0xb39c,\\n 'Skein1024-488': 0xb39d,\\n 'Skein1024-496': 0xb39e,\\n 'Skein1024-504': 0xb39f,\\n 'Skein1024-512': 0xb3a0,\\n 'Skein1024-520': 0xb3a1,\\n 'Skein1024-528': 0xb3a2,\\n 'Skein1024-536': 0xb3a3,\\n 'Skein1024-544': 0xb3a4,\\n 'Skein1024-552': 0xb3a5,\\n 'Skein1024-560': 0xb3a6,\\n 'Skein1024-568': 0xb3a7,\\n 'Skein1024-576': 0xb3a8,\\n 'Skein1024-584': 0xb3a9,\\n 'Skein1024-592': 0xb3aa,\\n 'Skein1024-600': 0xb3ab,\\n 'Skein1024-608': 0xb3ac,\\n 'Skein1024-616': 0xb3ad,\\n 'Skein1024-624': 0xb3ae,\\n 'Skein1024-632': 0xb3af,\\n 'Skein1024-640': 0xb3b0,\\n 'Skein1024-648': 0xb3b1,\\n 'Skein1024-656': 0xb3b2,\\n 'Skein1024-664': 0xb3b3,\\n 'Skein1024-672': 0xb3b4,\\n 'Skein1024-680': 0xb3b5,\\n 'Skein1024-688': 0xb3b6,\\n 'Skein1024-696': 0xb3b7,\\n 'Skein1024-704': 0xb3b8,\\n 'Skein1024-712': 0xb3b9,\\n 'Skein1024-720': 0xb3ba,\\n 'Skein1024-728': 0xb3bb,\\n 'Skein1024-736': 0xb3bc,\\n 'Skein1024-744': 0xb3bd,\\n 'Skein1024-752': 0xb3be,\\n 'Skein1024-760': 0xb3bf,\\n 'Skein1024-768': 0xb3c0,\\n 'Skein1024-776': 0xb3c1,\\n 'Skein1024-784': 0xb3c2,\\n 'Skein1024-792': 0xb3c3,\\n 'Skein1024-800': 0xb3c4,\\n 'Skein1024-808': 0xb3c5,\\n 'Skein1024-816': 0xb3c6,\\n 'Skein1024-824': 0xb3c7,\\n 'Skein1024-832': 0xb3c8,\\n 'Skein1024-840': 0xb3c9,\\n 'Skein1024-848': 0xb3ca,\\n 'Skein1024-856': 0xb3cb,\\n 'Skein1024-864': 0xb3cc,\\n 'Skein1024-872': 0xb3cd,\\n 'Skein1024-880': 0xb3ce,\\n 'Skein1024-888': 0xb3cf,\\n 'Skein1024-896': 0xb3d0,\\n 'Skein1024-904': 0xb3d1,\\n 'Skein1024-912': 0xb3d2,\\n 'Skein1024-920': 0xb3d3,\\n 'Skein1024-928': 0xb3d4,\\n 'Skein1024-936': 0xb3d5,\\n 'Skein1024-944': 0xb3d6,\\n 'Skein1024-952': 0xb3d7,\\n 'Skein1024-960': 0xb3d8,\\n 'Skein1024-968': 0xb3d9,\\n 'Skein1024-976': 0xb3da,\\n 'Skein1024-984': 0xb3db,\\n 'Skein1024-992': 0xb3dc,\\n 'Skein1024-1000': 0xb3dd,\\n 'Skein1024-1008': 0xb3de,\\n 'Skein1024-1016': 0xb3df,\\n 'Skein1024-1024': 0xb3e0\\n})\\n\\nexports.codes = Object.freeze({\\n 0x0: 'identity',\\n\\n // sha family\\n 0x11: 'sha1',\\n 0x12: 'sha2-256',\\n 0x13: 'sha2-512',\\n 0x56: 'dbl-sha2-256',\\n 0x17: 'sha3-224',\\n 0x16: 'sha3-256',\\n 0x15: 'sha3-384',\\n 0x14: 'sha3-512',\\n 0x18: 'shake-128',\\n 0x19: 'shake-256',\\n 0x1A: 'keccak-224',\\n 0x1B: 'keccak-256',\\n 0x1C: 'keccak-384',\\n 0x1D: 'keccak-512',\\n\\n 0x22: 'murmur3-128',\\n 0x23: 'murmur3-32',\\n\\n // blake2\\n 0xb201: 'blake2b-8',\\n 0xb202: 'blake2b-16',\\n 0xb203: 'blake2b-24',\\n 0xb204: 'blake2b-32',\\n 0xb205: 'blake2b-40',\\n 0xb206: 'blake2b-48',\\n 0xb207: 'blake2b-56',\\n 0xb208: 'blake2b-64',\\n 0xb209: 'blake2b-72',\\n 0xb20a: 'blake2b-80',\\n 0xb20b: 'blake2b-88',\\n 0xb20c: 'blake2b-96',\\n 0xb20d: 'blake2b-104',\\n 0xb20e: 'blake2b-112',\\n 0xb20f: 'blake2b-120',\\n 0xb210: 'blake2b-128',\\n 0xb211: 'blake2b-136',\\n 0xb212: 'blake2b-144',\\n 0xb213: 'blake2b-152',\\n 0xb214: 'blake2b-160',\\n 0xb215: 'blake2b-168',\\n 0xb216: 'blake2b-176',\\n 0xb217: 'blake2b-184',\\n 0xb218: 'blake2b-192',\\n 0xb219: 'blake2b-200',\\n 0xb21a: 'blake2b-208',\\n 0xb21b: 'blake2b-216',\\n 0xb21c: 'blake2b-224',\\n 0xb21d: 'blake2b-232',\\n 0xb21e: 'blake2b-240',\\n 0xb21f: 'blake2b-248',\\n 0xb220: 'blake2b-256',\\n 0xb221: 'blake2b-264',\\n 0xb222: 'blake2b-272',\\n 0xb223: 'blake2b-280',\\n 0xb224: 'blake2b-288',\\n 0xb225: 'blake2b-296',\\n 0xb226: 'blake2b-304',\\n 0xb227: 'blake2b-312',\\n 0xb228: 'blake2b-320',\\n 0xb229: 'blake2b-328',\\n 0xb22a: 'blake2b-336',\\n 0xb22b: 'blake2b-344',\\n 0xb22c: 'blake2b-352',\\n 0xb22d: 'blake2b-360',\\n 0xb22e: 'blake2b-368',\\n 0xb22f: 'blake2b-376',\\n 0xb230: 'blake2b-384',\\n 0xb231: 'blake2b-392',\\n 0xb232: 'blake2b-400',\\n 0xb233: 'blake2b-408',\\n 0xb234: 'blake2b-416',\\n 0xb235: 'blake2b-424',\\n 0xb236: 'blake2b-432',\\n 0xb237: 'blake2b-440',\\n 0xb238: 'blake2b-448',\\n 0xb239: 'blake2b-456',\\n 0xb23a: 'blake2b-464',\\n 0xb23b: 'blake2b-472',\\n 0xb23c: 'blake2b-480',\\n 0xb23d: 'blake2b-488',\\n 0xb23e: 'blake2b-496',\\n 0xb23f: 'blake2b-504',\\n 0xb240: 'blake2b-512',\\n 0xb241: 'blake2s-8',\\n 0xb242: 'blake2s-16',\\n 0xb243: 'blake2s-24',\\n 0xb244: 'blake2s-32',\\n 0xb245: 'blake2s-40',\\n 0xb246: 'blake2s-48',\\n 0xb247: 'blake2s-56',\\n 0xb248: 'blake2s-64',\\n 0xb249: 'blake2s-72',\\n 0xb24a: 'blake2s-80',\\n 0xb24b: 'blake2s-88',\\n 0xb24c: 'blake2s-96',\\n 0xb24d: 'blake2s-104',\\n 0xb24e: 'blake2s-112',\\n 0xb24f: 'blake2s-120',\\n 0xb250: 'blake2s-128',\\n 0xb251: 'blake2s-136',\\n 0xb252: 'blake2s-144',\\n 0xb253: 'blake2s-152',\\n 0xb254: 'blake2s-160',\\n 0xb255: 'blake2s-168',\\n 0xb256: 'blake2s-176',\\n 0xb257: 'blake2s-184',\\n 0xb258: 'blake2s-192',\\n 0xb259: 'blake2s-200',\\n 0xb25a: 'blake2s-208',\\n 0xb25b: 'blake2s-216',\\n 0xb25c: 'blake2s-224',\\n 0xb25d: 'blake2s-232',\\n 0xb25e: 'blake2s-240',\\n 0xb25f: 'blake2s-248',\\n 0xb260: 'blake2s-256',\\n\\n // skein\\n 0xb301: 'Skein256-8',\\n 0xb302: 'Skein256-16',\\n 0xb303: 'Skein256-24',\\n 0xb304: 'Skein256-32',\\n 0xb305: 'Skein256-40',\\n 0xb306: 'Skein256-48',\\n 0xb307: 'Skein256-56',\\n 0xb308: 'Skein256-64',\\n 0xb309: 'Skein256-72',\\n 0xb30a: 'Skein256-80',\\n 0xb30b: 'Skein256-88',\\n 0xb30c: 'Skein256-96',\\n 0xb30d: 'Skein256-104',\\n 0xb30e: 'Skein256-112',\\n 0xb30f: 'Skein256-120',\\n 0xb310: 'Skein256-128',\\n 0xb311: 'Skein256-136',\\n 0xb312: 'Skein256-144',\\n 0xb313: 'Skein256-152',\\n 0xb314: 'Skein256-160',\\n 0xb315: 'Skein256-168',\\n 0xb316: 'Skein256-176',\\n 0xb317: 'Skein256-184',\\n 0xb318: 'Skein256-192',\\n 0xb319: 'Skein256-200',\\n 0xb31a: 'Skein256-208',\\n 0xb31b: 'Skein256-216',\\n 0xb31c: 'Skein256-224',\\n 0xb31d: 'Skein256-232',\\n 0xb31e: 'Skein256-240',\\n 0xb31f: 'Skein256-248',\\n 0xb320: 'Skein256-256',\\n 0xb321: 'Skein512-8',\\n 0xb322: 'Skein512-16',\\n 0xb323: 'Skein512-24',\\n 0xb324: 'Skein512-32',\\n 0xb325: 'Skein512-40',\\n 0xb326: 'Skein512-48',\\n 0xb327: 'Skein512-56',\\n 0xb328: 'Skein512-64',\\n 0xb329: 'Skein512-72',\\n 0xb32a: 'Skein512-80',\\n 0xb32b: 'Skein512-88',\\n 0xb32c: 'Skein512-96',\\n 0xb32d: 'Skein512-104',\\n 0xb32e: 'Skein512-112',\\n 0xb32f: 'Skein512-120',\\n 0xb330: 'Skein512-128',\\n 0xb331: 'Skein512-136',\\n 0xb332: 'Skein512-144',\\n 0xb333: 'Skein512-152',\\n 0xb334: 'Skein512-160',\\n 0xb335: 'Skein512-168',\\n 0xb336: 'Skein512-176',\\n 0xb337: 'Skein512-184',\\n 0xb338: 'Skein512-192',\\n 0xb339: 'Skein512-200',\\n 0xb33a: 'Skein512-208',\\n 0xb33b: 'Skein512-216',\\n 0xb33c: 'Skein512-224',\\n 0xb33d: 'Skein512-232',\\n 0xb33e: 'Skein512-240',\\n 0xb33f: 'Skein512-248',\\n 0xb340: 'Skein512-256',\\n 0xb341: 'Skein512-264',\\n 0xb342: 'Skein512-272',\\n 0xb343: 'Skein512-280',\\n 0xb344: 'Skein512-288',\\n 0xb345: 'Skein512-296',\\n 0xb346: 'Skein512-304',\\n 0xb347: 'Skein512-312',\\n 0xb348: 'Skein512-320',\\n 0xb349: 'Skein512-328',\\n 0xb34a: 'Skein512-336',\\n 0xb34b: 'Skein512-344',\\n 0xb34c: 'Skein512-352',\\n 0xb34d: 'Skein512-360',\\n 0xb34e: 'Skein512-368',\\n 0xb34f: 'Skein512-376',\\n 0xb350: 'Skein512-384',\\n 0xb351: 'Skein512-392',\\n 0xb352: 'Skein512-400',\\n 0xb353: 'Skein512-408',\\n 0xb354: 'Skein512-416',\\n 0xb355: 'Skein512-424',\\n 0xb356: 'Skein512-432',\\n 0xb357: 'Skein512-440',\\n 0xb358: 'Skein512-448',\\n 0xb359: 'Skein512-456',\\n 0xb35a: 'Skein512-464',\\n 0xb35b: 'Skein512-472',\\n 0xb35c: 'Skein512-480',\\n 0xb35d: 'Skein512-488',\\n 0xb35e: 'Skein512-496',\\n 0xb35f: 'Skein512-504',\\n 0xb360: 'Skein512-512',\\n 0xb361: 'Skein1024-8',\\n 0xb362: 'Skein1024-16',\\n 0xb363: 'Skein1024-24',\\n 0xb364: 'Skein1024-32',\\n 0xb365: 'Skein1024-40',\\n 0xb366: 'Skein1024-48',\\n 0xb367: 'Skein1024-56',\\n 0xb368: 'Skein1024-64',\\n 0xb369: 'Skein1024-72',\\n 0xb36a: 'Skein1024-80',\\n 0xb36b: 'Skein1024-88',\\n 0xb36c: 'Skein1024-96',\\n 0xb36d: 'Skein1024-104',\\n 0xb36e: 'Skein1024-112',\\n 0xb36f: 'Skein1024-120',\\n 0xb370: 'Skein1024-128',\\n 0xb371: 'Skein1024-136',\\n 0xb372: 'Skein1024-144',\\n 0xb373: 'Skein1024-152',\\n 0xb374: 'Skein1024-160',\\n 0xb375: 'Skein1024-168',\\n 0xb376: 'Skein1024-176',\\n 0xb377: 'Skein1024-184',\\n 0xb378: 'Skein1024-192',\\n 0xb379: 'Skein1024-200',\\n 0xb37a: 'Skein1024-208',\\n 0xb37b: 'Skein1024-216',\\n 0xb37c: 'Skein1024-224',\\n 0xb37d: 'Skein1024-232',\\n 0xb37e: 'Skein1024-240',\\n 0xb37f: 'Skein1024-248',\\n 0xb380: 'Skein1024-256',\\n 0xb381: 'Skein1024-264',\\n 0xb382: 'Skein1024-272',\\n 0xb383: 'Skein1024-280',\\n 0xb384: 'Skein1024-288',\\n 0xb385: 'Skein1024-296',\\n 0xb386: 'Skein1024-304',\\n 0xb387: 'Skein1024-312',\\n 0xb388: 'Skein1024-320',\\n 0xb389: 'Skein1024-328',\\n 0xb38a: 'Skein1024-336',\\n 0xb38b: 'Skein1024-344',\\n 0xb38c: 'Skein1024-352',\\n 0xb38d: 'Skein1024-360',\\n 0xb38e: 'Skein1024-368',\\n 0xb38f: 'Skein1024-376',\\n 0xb390: 'Skein1024-384',\\n 0xb391: 'Skein1024-392',\\n 0xb392: 'Skein1024-400',\\n 0xb393: 'Skein1024-408',\\n 0xb394: 'Skein1024-416',\\n 0xb395: 'Skein1024-424',\\n 0xb396: 'Skein1024-432',\\n 0xb397: 'Skein1024-440',\\n 0xb398: 'Skein1024-448',\\n 0xb399: 'Skein1024-456',\\n 0xb39a: 'Skein1024-464',\\n 0xb39b: 'Skein1024-472',\\n 0xb39c: 'Skein1024-480',\\n 0xb39d: 'Skein1024-488',\\n 0xb39e: 'Skein1024-496',\\n 0xb39f: 'Skein1024-504',\\n 0xb3a0: 'Skein1024-512',\\n 0xb3a1: 'Skein1024-520',\\n 0xb3a2: 'Skein1024-528',\\n 0xb3a3: 'Skein1024-536',\\n 0xb3a4: 'Skein1024-544',\\n 0xb3a5: 'Skein1024-552',\\n 0xb3a6: 'Skein1024-560',\\n 0xb3a7: 'Skein1024-568',\\n 0xb3a8: 'Skein1024-576',\\n 0xb3a9: 'Skein1024-584',\\n 0xb3aa: 'Skein1024-592',\\n 0xb3ab: 'Skein1024-600',\\n 0xb3ac: 'Skein1024-608',\\n 0xb3ad: 'Skein1024-616',\\n 0xb3ae: 'Skein1024-624',\\n 0xb3af: 'Skein1024-632',\\n 0xb3b0: 'Skein1024-640',\\n 0xb3b1: 'Skein1024-648',\\n 0xb3b2: 'Skein1024-656',\\n 0xb3b3: 'Skein1024-664',\\n 0xb3b4: 'Skein1024-672',\\n 0xb3b5: 'Skein1024-680',\\n 0xb3b6: 'Skein1024-688',\\n 0xb3b7: 'Skein1024-696',\\n 0xb3b8: 'Skein1024-704',\\n 0xb3b9: 'Skein1024-712',\\n 0xb3ba: 'Skein1024-720',\\n 0xb3bb: 'Skein1024-728',\\n 0xb3bc: 'Skein1024-736',\\n 0xb3bd: 'Skein1024-744',\\n 0xb3be: 'Skein1024-752',\\n 0xb3bf: 'Skein1024-760',\\n 0xb3c0: 'Skein1024-768',\\n 0xb3c1: 'Skein1024-776',\\n 0xb3c2: 'Skein1024-784',\\n 0xb3c3: 'Skein1024-792',\\n 0xb3c4: 'Skein1024-800',\\n 0xb3c5: 'Skein1024-808',\\n 0xb3c6: 'Skein1024-816',\\n 0xb3c7: 'Skein1024-824',\\n 0xb3c8: 'Skein1024-832',\\n 0xb3c9: 'Skein1024-840',\\n 0xb3ca: 'Skein1024-848',\\n 0xb3cb: 'Skein1024-856',\\n 0xb3cc: 'Skein1024-864',\\n 0xb3cd: 'Skein1024-872',\\n 0xb3ce: 'Skein1024-880',\\n 0xb3cf: 'Skein1024-888',\\n 0xb3d0: 'Skein1024-896',\\n 0xb3d1: 'Skein1024-904',\\n 0xb3d2: 'Skein1024-912',\\n 0xb3d3: 'Skein1024-920',\\n 0xb3d4: 'Skein1024-928',\\n 0xb3d5: 'Skein1024-936',\\n 0xb3d6: 'Skein1024-944',\\n 0xb3d7: 'Skein1024-952',\\n 0xb3d8: 'Skein1024-960',\\n 0xb3d9: 'Skein1024-968',\\n 0xb3da: 'Skein1024-976',\\n 0xb3db: 'Skein1024-984',\\n 0xb3dc: 'Skein1024-992',\\n 0xb3dd: 'Skein1024-1000',\\n 0xb3de: 'Skein1024-1008',\\n 0xb3df: 'Skein1024-1016',\\n 0xb3e0: 'Skein1024-1024'\\n})\\n\\nexports.defaultLengths = Object.freeze({\\n 0x11: 20,\\n 0x12: 32,\\n 0x13: 64,\\n 0x56: 32,\\n 0x17: 28,\\n 0x16: 32,\\n 0x15: 48,\\n 0x14: 64,\\n 0x18: 32,\\n 0x19: 64,\\n 0x1A: 28,\\n 0x1B: 32,\\n 0x1C: 48,\\n 0x1D: 64,\\n 0x22: 32,\\n\\n 0xb201: 0x01,\\n 0xb202: 0x02,\\n 0xb203: 0x03,\\n 0xb204: 0x04,\\n 0xb205: 0x05,\\n 0xb206: 0x06,\\n 0xb207: 0x07,\\n 0xb208: 0x08,\\n 0xb209: 0x09,\\n 0xb20a: 0x0a,\\n 0xb20b: 0x0b,\\n 0xb20c: 0x0c,\\n 0xb20d: 0x0d,\\n 0xb20e: 0x0e,\\n 0xb20f: 0x0f,\\n 0xb210: 0x10,\\n 0xb211: 0x11,\\n 0xb212: 0x12,\\n 0xb213: 0x13,\\n 0xb214: 0x14,\\n 0xb215: 0x15,\\n 0xb216: 0x16,\\n 0xb217: 0x17,\\n 0xb218: 0x18,\\n 0xb219: 0x19,\\n 0xb21a: 0x1a,\\n 0xb21b: 0x1b,\\n 0xb21c: 0x1c,\\n 0xb21d: 0x1d,\\n 0xb21e: 0x1e,\\n 0xb21f: 0x1f,\\n 0xb220: 0x20,\\n 0xb221: 0x21,\\n 0xb222: 0x22,\\n 0xb223: 0x23,\\n 0xb224: 0x24,\\n 0xb225: 0x25,\\n 0xb226: 0x26,\\n 0xb227: 0x27,\\n 0xb228: 0x28,\\n 0xb229: 0x29,\\n 0xb22a: 0x2a,\\n 0xb22b: 0x2b,\\n 0xb22c: 0x2c,\\n 0xb22d: 0x2d,\\n 0xb22e: 0x2e,\\n 0xb22f: 0x2f,\\n 0xb230: 0x30,\\n 0xb231: 0x31,\\n 0xb232: 0x32,\\n 0xb233: 0x33,\\n 0xb234: 0x34,\\n 0xb235: 0x35,\\n 0xb236: 0x36,\\n 0xb237: 0x37,\\n 0xb238: 0x38,\\n 0xb239: 0x39,\\n 0xb23a: 0x3a,\\n 0xb23b: 0x3b,\\n 0xb23c: 0x3c,\\n 0xb23d: 0x3d,\\n 0xb23e: 0x3e,\\n 0xb23f: 0x3f,\\n 0xb240: 0x40,\\n 0xb241: 0x01,\\n 0xb242: 0x02,\\n 0xb243: 0x03,\\n 0xb244: 0x04,\\n 0xb245: 0x05,\\n 0xb246: 0x06,\\n 0xb247: 0x07,\\n 0xb248: 0x08,\\n 0xb249: 0x09,\\n 0xb24a: 0x0a,\\n 0xb24b: 0x0b,\\n 0xb24c: 0x0c,\\n 0xb24d: 0x0d,\\n 0xb24e: 0x0e,\\n 0xb24f: 0x0f,\\n 0xb250: 0x10,\\n 0xb251: 0x11,\\n 0xb252: 0x12,\\n 0xb253: 0x13,\\n 0xb254: 0x14,\\n 0xb255: 0x15,\\n 0xb256: 0x16,\\n 0xb257: 0x17,\\n 0xb258: 0x18,\\n 0xb259: 0x19,\\n 0xb25a: 0x1a,\\n 0xb25b: 0x1b,\\n 0xb25c: 0x1c,\\n 0xb25d: 0x1d,\\n 0xb25e: 0x1e,\\n 0xb25f: 0x1f,\\n 0xb260: 0x20,\\n 0xb301: 0x01,\\n 0xb302: 0x02,\\n 0xb303: 0x03,\\n 0xb304: 0x04,\\n 0xb305: 0x05,\\n 0xb306: 0x06,\\n 0xb307: 0x07,\\n 0xb308: 0x08,\\n 0xb309: 0x09,\\n 0xb30a: 0x0a,\\n 0xb30b: 0x0b,\\n 0xb30c: 0x0c,\\n 0xb30d: 0x0d,\\n 0xb30e: 0x0e,\\n 0xb30f: 0x0f,\\n 0xb310: 0x10,\\n 0xb311: 0x11,\\n 0xb312: 0x12,\\n 0xb313: 0x13,\\n 0xb314: 0x14,\\n 0xb315: 0x15,\\n 0xb316: 0x16,\\n 0xb317: 0x17,\\n 0xb318: 0x18,\\n 0xb319: 0x19,\\n 0xb31a: 0x1a,\\n 0xb31b: 0x1b,\\n 0xb31c: 0x1c,\\n 0xb31d: 0x1d,\\n 0xb31e: 0x1e,\\n 0xb31f: 0x1f,\\n 0xb320: 0x20,\\n 0xb321: 0x01,\\n 0xb322: 0x02,\\n 0xb323: 0x03,\\n 0xb324: 0x04,\\n 0xb325: 0x05,\\n 0xb326: 0x06,\\n 0xb327: 0x07,\\n 0xb328: 0x08,\\n 0xb329: 0x09,\\n 0xb32a: 0x0a,\\n 0xb32b: 0x0b,\\n 0xb32c: 0x0c,\\n 0xb32d: 0x0d,\\n 0xb32e: 0x0e,\\n 0xb32f: 0x0f,\\n 0xb330: 0x10,\\n 0xb331: 0x11,\\n 0xb332: 0x12,\\n 0xb333: 0x13,\\n 0xb334: 0x14,\\n 0xb335: 0x15,\\n 0xb336: 0x16,\\n 0xb337: 0x17,\\n 0xb338: 0x18,\\n 0xb339: 0x19,\\n 0xb33a: 0x1a,\\n 0xb33b: 0x1b,\\n 0xb33c: 0x1c,\\n 0xb33d: 0x1d,\\n 0xb33e: 0x1e,\\n 0xb33f: 0x1f,\\n 0xb340: 0x20,\\n 0xb341: 0x21,\\n 0xb342: 0x22,\\n 0xb343: 0x23,\\n 0xb344: 0x24,\\n 0xb345: 0x25,\\n 0xb346: 0x26,\\n 0xb347: 0x27,\\n 0xb348: 0x28,\\n 0xb349: 0x29,\\n 0xb34a: 0x2a,\\n 0xb34b: 0x2b,\\n 0xb34c: 0x2c,\\n 0xb34d: 0x2d,\\n 0xb34e: 0x2e,\\n 0xb34f: 0x2f,\\n 0xb350: 0x30,\\n 0xb351: 0x31,\\n 0xb352: 0x32,\\n 0xb353: 0x33,\\n 0xb354: 0x34,\\n 0xb355: 0x35,\\n 0xb356: 0x36,\\n 0xb357: 0x37,\\n 0xb358: 0x38,\\n 0xb359: 0x39,\\n 0xb35a: 0x3a,\\n 0xb35b: 0x3b,\\n 0xb35c: 0x3c,\\n 0xb35d: 0x3d,\\n 0xb35e: 0x3e,\\n 0xb35f: 0x3f,\\n 0xb360: 0x40,\\n 0xb361: 0x01,\\n 0xb362: 0x02,\\n 0xb363: 0x03,\\n 0xb364: 0x04,\\n 0xb365: 0x05,\\n 0xb366: 0x06,\\n 0xb367: 0x07,\\n 0xb368: 0x08,\\n 0xb369: 0x09,\\n 0xb36a: 0x0a,\\n 0xb36b: 0x0b,\\n 0xb36c: 0x0c,\\n 0xb36d: 0x0d,\\n 0xb36e: 0x0e,\\n 0xb36f: 0x0f,\\n 0xb370: 0x10,\\n 0xb371: 0x11,\\n 0xb372: 0x12,\\n 0xb373: 0x13,\\n 0xb374: 0x14,\\n 0xb375: 0x15,\\n 0xb376: 0x16,\\n 0xb377: 0x17,\\n 0xb378: 0x18,\\n 0xb379: 0x19,\\n 0xb37a: 0x1a,\\n 0xb37b: 0x1b,\\n 0xb37c: 0x1c,\\n 0xb37d: 0x1d,\\n 0xb37e: 0x1e,\\n 0xb37f: 0x1f,\\n 0xb380: 0x20,\\n 0xb381: 0x21,\\n 0xb382: 0x22,\\n 0xb383: 0x23,\\n 0xb384: 0x24,\\n 0xb385: 0x25,\\n 0xb386: 0x26,\\n 0xb387: 0x27,\\n 0xb388: 0x28,\\n 0xb389: 0x29,\\n 0xb38a: 0x2a,\\n 0xb38b: 0x2b,\\n 0xb38c: 0x2c,\\n 0xb38d: 0x2d,\\n 0xb38e: 0x2e,\\n 0xb38f: 0x2f,\\n 0xb390: 0x30,\\n 0xb391: 0x31,\\n 0xb392: 0x32,\\n 0xb393: 0x33,\\n 0xb394: 0x34,\\n 0xb395: 0x35,\\n 0xb396: 0x36,\\n 0xb397: 0x37,\\n 0xb398: 0x38,\\n 0xb399: 0x39,\\n 0xb39a: 0x3a,\\n 0xb39b: 0x3b,\\n 0xb39c: 0x3c,\\n 0xb39d: 0x3d,\\n 0xb39e: 0x3e,\\n 0xb39f: 0x3f,\\n 0xb3a0: 0x40,\\n 0xb3a1: 0x41,\\n 0xb3a2: 0x42,\\n 0xb3a3: 0x43,\\n 0xb3a4: 0x44,\\n 0xb3a5: 0x45,\\n 0xb3a6: 0x46,\\n 0xb3a7: 0x47,\\n 0xb3a8: 0x48,\\n 0xb3a9: 0x49,\\n 0xb3aa: 0x4a,\\n 0xb3ab: 0x4b,\\n 0xb3ac: 0x4c,\\n 0xb3ad: 0x4d,\\n 0xb3ae: 0x4e,\\n 0xb3af: 0x4f,\\n 0xb3b0: 0x50,\\n 0xb3b1: 0x51,\\n 0xb3b2: 0x52,\\n 0xb3b3: 0x53,\\n 0xb3b4: 0x54,\\n 0xb3b5: 0x55,\\n 0xb3b6: 0x56,\\n 0xb3b7: 0x57,\\n 0xb3b8: 0x58,\\n 0xb3b9: 0x59,\\n 0xb3ba: 0x5a,\\n 0xb3bb: 0x5b,\\n 0xb3bc: 0x5c,\\n 0xb3bd: 0x5d,\\n 0xb3be: 0x5e,\\n 0xb3bf: 0x5f,\\n 0xb3c0: 0x60,\\n 0xb3c1: 0x61,\\n 0xb3c2: 0x62,\\n 0xb3c3: 0x63,\\n 0xb3c4: 0x64,\\n 0xb3c5: 0x65,\\n 0xb3c6: 0x66,\\n 0xb3c7: 0x67,\\n 0xb3c8: 0x68,\\n 0xb3c9: 0x69,\\n 0xb3ca: 0x6a,\\n 0xb3cb: 0x6b,\\n 0xb3cc: 0x6c,\\n 0xb3cd: 0x6d,\\n 0xb3ce: 0x6e,\\n 0xb3cf: 0x6f,\\n 0xb3d0: 0x70,\\n 0xb3d1: 0x71,\\n 0xb3d2: 0x72,\\n 0xb3d3: 0x73,\\n 0xb3d4: 0x74,\\n 0xb3d5: 0x75,\\n 0xb3d6: 0x76,\\n 0xb3d7: 0x77,\\n 0xb3d8: 0x78,\\n 0xb3d9: 0x79,\\n 0xb3da: 0x7a,\\n 0xb3db: 0x7b,\\n 0xb3dc: 0x7c,\\n 0xb3dd: 0x7d,\\n 0xb3de: 0x7e,\\n 0xb3df: 0x7f,\\n 0xb3e0: 0x80\\n})\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multihashes/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multihashes/src/index.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multihashes/src/index.js ***!\n \\************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Multihash implementation in JavaScript.\\n *\\n * @module multihash\\n */\\n\\n\\nconst bs58 = __webpack_require__(/*! bs58 */ \\\"./node_modules/bs58/index.js\\\")\\n\\nconst cs = __webpack_require__(/*! ./constants */ \\\"./node_modules/orbit-db-io/node_modules/multihashes/src/constants.js\\\")\\n\\nexports.names = cs.names\\nexports.codes = cs.codes\\nexports.defaultLengths = cs.defaultLengths\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\n/**\\n * Convert the given multihash to a hex encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toHexString = function toHexString (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return hash.toString('hex')\\n}\\n\\n/**\\n * Convert the given hex encoded string to a multihash.\\n *\\n * @param {string} hash\\n * @returns {Buffer}\\n */\\nexports.fromHexString = function fromHexString (hash) {\\n return Buffer.from(hash, 'hex')\\n}\\n\\n/**\\n * Convert the given multihash to a base58 encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toB58String = function toB58String (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return bs58.encode(hash)\\n}\\n\\n/**\\n * Convert the given base58 encoded string to a multihash.\\n *\\n * @param {string|Buffer} hash\\n * @returns {Buffer}\\n */\\nexports.fromB58String = function fromB58String (hash) {\\n let encoded = hash\\n if (Buffer.isBuffer(hash)) {\\n encoded = hash.toString()\\n }\\n\\n return Buffer.from(bs58.decode(encoded))\\n}\\n\\n/**\\n * Decode a hash from the given multihash.\\n *\\n * @param {Buffer} buf\\n * @returns {{code: number, name: string, length: number, digest: Buffer}} result\\n */\\nexports.decode = function decode (buf) {\\n if (!(Buffer.isBuffer(buf))) {\\n throw new Error('multihash must be a Buffer')\\n }\\n\\n if (buf.length < 3) {\\n throw new Error('multihash too short. must be > 3 bytes.')\\n }\\n\\n const code = varint.decode(buf)\\n if (!exports.isValidCode(code)) {\\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n const len = varint.decode(buf)\\n if (len < 1) {\\n throw new Error(`multihash invalid length: 0x${len.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n if (buf.length !== len) {\\n throw new Error(`multihash length inconsistent: 0x${buf.toString('hex')}`)\\n }\\n\\n return {\\n code: code,\\n name: cs.codes[code],\\n length: len,\\n digest: buf\\n }\\n}\\n\\n/**\\n * Encode a hash digest along with the specified function code.\\n *\\n * > **Note:** the length is derived from the length of the digest itself.\\n *\\n * @param {Buffer} digest\\n * @param {string|number} code\\n * @param {number} [length]\\n * @returns {Buffer}\\n */\\nexports.encode = function encode (digest, code, length) {\\n if (!digest || code === undefined) {\\n throw new Error('multihash encode requires at least two args: digest, code')\\n }\\n\\n // ensure it's a hashfunction code.\\n const hashfn = exports.coerceCode(code)\\n\\n if (!(Buffer.isBuffer(digest))) {\\n throw new Error('digest should be a Buffer')\\n }\\n\\n if (length == null) {\\n length = digest.length\\n }\\n\\n if (length && digest.length !== length) {\\n throw new Error('digest length should be equal to specified length.')\\n }\\n\\n return Buffer.concat([\\n Buffer.from(varint.encode(hashfn)),\\n Buffer.from(varint.encode(length)),\\n digest\\n ])\\n}\\n\\n/**\\n * Converts a hash function name into the matching code.\\n * If passed a number it will return the number if it's a valid code.\\n * @param {string|number} name\\n * @returns {number}\\n */\\nexports.coerceCode = function coerceCode (name) {\\n let code = name\\n\\n if (typeof name === 'string') {\\n if (cs.names[name] === undefined) {\\n throw new Error(`Unrecognized hash function named: ${name}`)\\n }\\n code = cs.names[name]\\n }\\n\\n if (typeof code !== 'number') {\\n throw new Error(`Hash function code should be a number. Got: ${code}`)\\n }\\n\\n if (cs.codes[code] === undefined && !exports.isAppCode(code)) {\\n throw new Error(`Unrecognized function code: ${code}`)\\n }\\n\\n return code\\n}\\n\\n/**\\n * Checks wether a code is part of the app range\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isAppCode = function appCode (code) {\\n return code > 0 && code < 0x10\\n}\\n\\n/**\\n * Checks whether a multihash code is valid.\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isValidCode = function validCode (code) {\\n if (exports.isAppCode(code)) {\\n return true\\n }\\n\\n if (cs.codes[code]) {\\n return true\\n }\\n\\n return false\\n}\\n\\n/**\\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nfunction validate (multihash) {\\n exports.decode(multihash) // throws if bad.\\n}\\nexports.validate = validate\\n\\n/**\\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nexports.prefix = function prefix (multihash) {\\n validate(multihash)\\n\\n return multihash.slice(0, 2)\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multihashes/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/p-do-whilst/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/p-do-whilst/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst pDoWhilst = async (action, condition) => {\\n\\tconst actionResult = await action();\\n\\n\\tif (condition(actionResult)) {\\n\\t\\treturn pDoWhilst(action, condition);\\n\\t}\\n};\\n\\nmodule.exports = pDoWhilst;\\n// TODO: Remove this for the next major release\\nmodule.exports.default = pDoWhilst;\\n\\n\\n//# sourceURL=webpack:///./node_modules/p-do-whilst/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/p-map/index.js\":\n/*!*************************************!*\\\n !*** ./node_modules/p-map/index.js ***!\n \\*************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nmodule.exports = (iterable, mapper, opts) => new Promise((resolve, reject) => {\\n\\topts = Object.assign({\\n\\t\\tconcurrency: Infinity\\n\\t}, opts);\\n\\n\\tif (typeof mapper !== 'function') {\\n\\t\\tthrow new TypeError('Mapper function is required');\\n\\t}\\n\\n\\tconst concurrency = opts.concurrency;\\n\\n\\tif (!(typeof concurrency === 'number' && concurrency >= 1)) {\\n\\t\\tthrow new TypeError(`Expected \\\\`concurrency\\\\` to be a number from 1 and up, got \\\\`${concurrency}\\\\` (${typeof concurrency})`);\\n\\t}\\n\\n\\tconst ret = [];\\n\\tconst iterator = iterable[Symbol.iterator]();\\n\\tlet isRejected = false;\\n\\tlet iterableDone = false;\\n\\tlet resolvingCount = 0;\\n\\tlet currentIdx = 0;\\n\\n\\tconst next = () => {\\n\\t\\tif (isRejected) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tconst nextItem = iterator.next();\\n\\t\\tconst i = currentIdx;\\n\\t\\tcurrentIdx++;\\n\\n\\t\\tif (nextItem.done) {\\n\\t\\t\\titerableDone = true;\\n\\n\\t\\t\\tif (resolvingCount === 0) {\\n\\t\\t\\t\\tresolve(ret);\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tresolvingCount++;\\n\\n\\t\\tPromise.resolve(nextItem.value)\\n\\t\\t\\t.then(el => mapper(el, i))\\n\\t\\t\\t.then(\\n\\t\\t\\t\\tval => {\\n\\t\\t\\t\\t\\tret[i] = val;\\n\\t\\t\\t\\t\\tresolvingCount--;\\n\\t\\t\\t\\t\\tnext();\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\terr => {\\n\\t\\t\\t\\t\\tisRejected = true;\\n\\t\\t\\t\\t\\treject(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t);\\n\\t};\\n\\n\\tfor (let i = 0; i < concurrency; i++) {\\n\\t\\tnext();\\n\\n\\t\\tif (iterableDone) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n});\\n\\n\\n//# sourceURL=webpack:///./node_modules/p-map/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/process/browser.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/process/browser.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"// shim for using process in browser\\nvar process = module.exports = {};\\n\\n// cached from whatever global is present so that test runners that stub it\\n// don't break things. But we need to wrap it in a try catch in case it is\\n// wrapped in strict mode code which doesn't define any globals. It's inside a\\n// function because try/catches deoptimize in certain engines.\\n\\nvar cachedSetTimeout;\\nvar cachedClearTimeout;\\n\\nfunction defaultSetTimout() {\\n throw new Error('setTimeout has not been defined');\\n}\\nfunction defaultClearTimeout () {\\n throw new Error('clearTimeout has not been defined');\\n}\\n(function () {\\n try {\\n if (typeof setTimeout === 'function') {\\n cachedSetTimeout = setTimeout;\\n } else {\\n cachedSetTimeout = defaultSetTimout;\\n }\\n } catch (e) {\\n cachedSetTimeout = defaultSetTimout;\\n }\\n try {\\n if (typeof clearTimeout === 'function') {\\n cachedClearTimeout = clearTimeout;\\n } else {\\n cachedClearTimeout = defaultClearTimeout;\\n }\\n } catch (e) {\\n cachedClearTimeout = defaultClearTimeout;\\n }\\n} ())\\nfunction runTimeout(fun) {\\n if (cachedSetTimeout === setTimeout) {\\n //normal enviroments in sane situations\\n return setTimeout(fun, 0);\\n }\\n // if setTimeout wasn't available but was latter defined\\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\\n cachedSetTimeout = setTimeout;\\n return setTimeout(fun, 0);\\n }\\n try {\\n // when when somebody has screwed with setTimeout but no I.E. maddness\\n return cachedSetTimeout(fun, 0);\\n } catch(e){\\n try {\\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\\n return cachedSetTimeout.call(null, fun, 0);\\n } catch(e){\\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\\n return cachedSetTimeout.call(this, fun, 0);\\n }\\n }\\n\\n\\n}\\nfunction runClearTimeout(marker) {\\n if (cachedClearTimeout === clearTimeout) {\\n //normal enviroments in sane situations\\n return clearTimeout(marker);\\n }\\n // if clearTimeout wasn't available but was latter defined\\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\\n cachedClearTimeout = clearTimeout;\\n return clearTimeout(marker);\\n }\\n try {\\n // when when somebody has screwed with setTimeout but no I.E. maddness\\n return cachedClearTimeout(marker);\\n } catch (e){\\n try {\\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\\n return cachedClearTimeout.call(null, marker);\\n } catch (e){\\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\\n return cachedClearTimeout.call(this, marker);\\n }\\n }\\n\\n\\n\\n}\\nvar queue = [];\\nvar draining = false;\\nvar currentQueue;\\nvar queueIndex = -1;\\n\\nfunction cleanUpNextTick() {\\n if (!draining || !currentQueue) {\\n return;\\n }\\n draining = false;\\n if (currentQueue.length) {\\n queue = currentQueue.concat(queue);\\n } else {\\n queueIndex = -1;\\n }\\n if (queue.length) {\\n drainQueue();\\n }\\n}\\n\\nfunction drainQueue() {\\n if (draining) {\\n return;\\n }\\n var timeout = runTimeout(cleanUpNextTick);\\n draining = true;\\n\\n var len = queue.length;\\n while(len) {\\n currentQueue = queue;\\n queue = [];\\n while (++queueIndex < len) {\\n if (currentQueue) {\\n currentQueue[queueIndex].run();\\n }\\n }\\n queueIndex = -1;\\n len = queue.length;\\n }\\n currentQueue = null;\\n draining = false;\\n runClearTimeout(timeout);\\n}\\n\\nprocess.nextTick = function (fun) {\\n var args = new Array(arguments.length - 1);\\n if (arguments.length > 1) {\\n for (var i = 1; i < arguments.length; i++) {\\n args[i - 1] = arguments[i];\\n }\\n }\\n queue.push(new Item(fun, args));\\n if (queue.length === 1 && !draining) {\\n runTimeout(drainQueue);\\n }\\n};\\n\\n// v8 likes predictible objects\\nfunction Item(fun, array) {\\n this.fun = fun;\\n this.array = array;\\n}\\nItem.prototype.run = function () {\\n this.fun.apply(null, this.array);\\n};\\nprocess.title = 'browser';\\nprocess.browser = true;\\nprocess.env = {};\\nprocess.argv = [];\\nprocess.version = ''; // empty string to avoid regexp issues\\nprocess.versions = {};\\n\\nfunction noop() {}\\n\\nprocess.on = noop;\\nprocess.addListener = noop;\\nprocess.once = noop;\\nprocess.off = noop;\\nprocess.removeListener = noop;\\nprocess.removeAllListeners = noop;\\nprocess.emit = noop;\\nprocess.prependListener = noop;\\nprocess.prependOnceListener = noop;\\n\\nprocess.listeners = function (name) { return [] }\\n\\nprocess.binding = function (name) {\\n throw new Error('process.binding is not supported');\\n};\\n\\nprocess.cwd = function () { return '/' };\\nprocess.chdir = function (dir) {\\n throw new Error('process.chdir is not supported');\\n};\\nprocess.umask = function() { return 0; };\\n\\n\\n//# sourceURL=webpack:///./node_modules/process/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/checkPropTypes.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/prop-types/checkPropTypes.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\n\\n\\nvar printWarning = function() {};\\n\\nif (true) {\\n var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \\\"./node_modules/prop-types/lib/ReactPropTypesSecret.js\\\");\\n var loggedTypeFailures = {};\\n\\n printWarning = function(text) {\\n var message = 'Warning: ' + text;\\n if (typeof console !== 'undefined') {\\n console.error(message);\\n }\\n try {\\n // --- Welcome to debugging React ---\\n // This error was thrown as a convenience so that you can use this stack\\n // to find the callsite that caused this warning to fire.\\n throw new Error(message);\\n } catch (x) {}\\n };\\n}\\n\\n/**\\n * Assert that the values match with the type specs.\\n * Error messages are memorized and will only be shown once.\\n *\\n * @param {object} typeSpecs Map of name to a ReactPropType\\n * @param {object} values Runtime values that need to be type-checked\\n * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n * @param {string} componentName Name of the component for error messages.\\n * @param {?Function} getStack Returns the component stack.\\n * @private\\n */\\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\\n if (true) {\\n for (var typeSpecName in typeSpecs) {\\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\\n var error;\\n // Prop type validation may throw. In case they do, we don't want to\\n // fail the render phase where it didn't fail before. So we log it.\\n // After these have been cleaned up, we'll let them throw.\\n try {\\n // This is intentionally an invariant that gets caught. It's the same\\n // behavior as without this statement except with a better message.\\n if (typeof typeSpecs[typeSpecName] !== 'function') {\\n var err = Error(\\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\\n );\\n err.name = 'Invariant Violation';\\n throw err;\\n }\\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\\n } catch (ex) {\\n error = ex;\\n }\\n if (error && !(error instanceof Error)) {\\n printWarning(\\n (componentName || 'React class') + ': type specification of ' +\\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\\n 'You may have forgotten to pass an argument to the type checker ' +\\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\\n 'shape all require an argument).'\\n )\\n\\n }\\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\\n // Only monitor this failure once because there tends to be a lot of the\\n // same error.\\n loggedTypeFailures[error.message] = true;\\n\\n var stack = getStack ? getStack() : '';\\n\\n printWarning(\\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\\n );\\n }\\n }\\n }\\n }\\n}\\n\\nmodule.exports = checkPropTypes;\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/checkPropTypes.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/factoryWithTypeCheckers.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/prop-types/factoryWithTypeCheckers.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\n\\n\\nvar assign = __webpack_require__(/*! object-assign */ \\\"./node_modules/prop-types/node_modules/object-assign/index.js\\\");\\n\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \\\"./node_modules/prop-types/lib/ReactPropTypesSecret.js\\\");\\nvar checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ \\\"./node_modules/prop-types/checkPropTypes.js\\\");\\n\\nvar printWarning = function() {};\\n\\nif (true) {\\n printWarning = function(text) {\\n var message = 'Warning: ' + text;\\n if (typeof console !== 'undefined') {\\n console.error(message);\\n }\\n try {\\n // --- Welcome to debugging React ---\\n // This error was thrown as a convenience so that you can use this stack\\n // to find the callsite that caused this warning to fire.\\n throw new Error(message);\\n } catch (x) {}\\n };\\n}\\n\\nfunction emptyFunctionThatReturnsNull() {\\n return null;\\n}\\n\\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\\n /* global Symbol */\\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\\n\\n /**\\n * Returns the iterator method function contained on the iterable object.\\n *\\n * Be sure to invoke the function with the iterable as context:\\n *\\n * var iteratorFn = getIteratorFn(myIterable);\\n * if (iteratorFn) {\\n * var iterator = iteratorFn.call(myIterable);\\n * ...\\n * }\\n *\\n * @param {?object} maybeIterable\\n * @return {?function}\\n */\\n function getIteratorFn(maybeIterable) {\\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\\n if (typeof iteratorFn === 'function') {\\n return iteratorFn;\\n }\\n }\\n\\n /**\\n * Collection of methods that allow declaration and validation of props that are\\n * supplied to React components. Example usage:\\n *\\n * var Props = require('ReactPropTypes');\\n * var MyArticle = React.createClass({\\n * propTypes: {\\n * // An optional string prop named \\\"description\\\".\\n * description: Props.string,\\n *\\n * // A required enum prop named \\\"category\\\".\\n * category: Props.oneOf(['News','Photos']).isRequired,\\n *\\n * // A prop named \\\"dialog\\\" that requires an instance of Dialog.\\n * dialog: Props.instanceOf(Dialog).isRequired\\n * },\\n * render: function() { ... }\\n * });\\n *\\n * A more formal specification of how these methods are used:\\n *\\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\\n * decl := ReactPropTypes.{type}(.isRequired)?\\n *\\n * Each and every declaration produces a function with the same signature. This\\n * allows the creation of custom validation functions. For example:\\n *\\n * var MyLink = React.createClass({\\n * propTypes: {\\n * // An optional string or URI prop named \\\"href\\\".\\n * href: function(props, propName, componentName) {\\n * var propValue = props[propName];\\n * if (propValue != null && typeof propValue !== 'string' &&\\n * !(propValue instanceof URI)) {\\n * return new Error(\\n * 'Expected a string or an URI for ' + propName + ' in ' +\\n * componentName\\n * );\\n * }\\n * }\\n * },\\n * render: function() {...}\\n * });\\n *\\n * @internal\\n */\\n\\n var ANONYMOUS = '<<anonymous>>';\\n\\n // Important!\\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\\n var ReactPropTypes = {\\n array: createPrimitiveTypeChecker('array'),\\n bool: createPrimitiveTypeChecker('boolean'),\\n func: createPrimitiveTypeChecker('function'),\\n number: createPrimitiveTypeChecker('number'),\\n object: createPrimitiveTypeChecker('object'),\\n string: createPrimitiveTypeChecker('string'),\\n symbol: createPrimitiveTypeChecker('symbol'),\\n\\n any: createAnyTypeChecker(),\\n arrayOf: createArrayOfTypeChecker,\\n element: createElementTypeChecker(),\\n instanceOf: createInstanceTypeChecker,\\n node: createNodeChecker(),\\n objectOf: createObjectOfTypeChecker,\\n oneOf: createEnumTypeChecker,\\n oneOfType: createUnionTypeChecker,\\n shape: createShapeTypeChecker,\\n exact: createStrictShapeTypeChecker,\\n };\\n\\n /**\\n * inlined Object.is polyfill to avoid requiring consumers ship their own\\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\\n */\\n /*eslint-disable no-self-compare*/\\n function is(x, y) {\\n // SameValue algorithm\\n if (x === y) {\\n // Steps 1-5, 7-10\\n // Steps 6.b-6.e: +0 != -0\\n return x !== 0 || 1 / x === 1 / y;\\n } else {\\n // Step 6.a: NaN == NaN\\n return x !== x && y !== y;\\n }\\n }\\n /*eslint-enable no-self-compare*/\\n\\n /**\\n * We use an Error-like object for backward compatibility as people may call\\n * PropTypes directly and inspect their output. However, we don't use real\\n * Errors anymore. We don't inspect their stack anyway, and creating them\\n * is prohibitively expensive if they are created too often, such as what\\n * happens in oneOfType() for any type before the one that matched.\\n */\\n function PropTypeError(message) {\\n this.message = message;\\n this.stack = '';\\n }\\n // Make `instanceof Error` still work for returned errors.\\n PropTypeError.prototype = Error.prototype;\\n\\n function createChainableTypeChecker(validate) {\\n if (true) {\\n var manualPropTypeCallCache = {};\\n var manualPropTypeWarningCount = 0;\\n }\\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\\n componentName = componentName || ANONYMOUS;\\n propFullName = propFullName || propName;\\n\\n if (secret !== ReactPropTypesSecret) {\\n if (throwOnDirectAccess) {\\n // New behavior only for users of `prop-types` package\\n var err = new Error(\\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\\n 'Read more at http://fb.me/use-check-prop-types'\\n );\\n err.name = 'Invariant Violation';\\n throw err;\\n } else if ( true && typeof console !== 'undefined') {\\n // Old behavior for people using React.PropTypes\\n var cacheKey = componentName + ':' + propName;\\n if (\\n !manualPropTypeCallCache[cacheKey] &&\\n // Avoid spamming the console because they are often not actionable except for lib authors\\n manualPropTypeWarningCount < 3\\n ) {\\n printWarning(\\n 'You are manually calling a React.PropTypes validation ' +\\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\\n 'and will throw in the standalone `prop-types` package. ' +\\n 'You may be seeing this warning due to a third-party PropTypes ' +\\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\\n );\\n manualPropTypeCallCache[cacheKey] = true;\\n manualPropTypeWarningCount++;\\n }\\n }\\n }\\n if (props[propName] == null) {\\n if (isRequired) {\\n if (props[propName] === null) {\\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\\n }\\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\\n }\\n return null;\\n } else {\\n return validate(props, propName, componentName, location, propFullName);\\n }\\n }\\n\\n var chainedCheckType = checkType.bind(null, false);\\n chainedCheckType.isRequired = checkType.bind(null, true);\\n\\n return chainedCheckType;\\n }\\n\\n function createPrimitiveTypeChecker(expectedType) {\\n function validate(props, propName, componentName, location, propFullName, secret) {\\n var propValue = props[propName];\\n var propType = getPropType(propValue);\\n if (propType !== expectedType) {\\n // `propValue` being instance of, say, date/regexp, pass the 'object'\\n // check, but we can offer a more precise error message here rather than\\n // 'of type `object`'.\\n var preciseType = getPreciseType(propValue);\\n\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createAnyTypeChecker() {\\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\\n }\\n\\n function createArrayOfTypeChecker(typeChecker) {\\n function validate(props, propName, componentName, location, propFullName) {\\n if (typeof typeChecker !== 'function') {\\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\\n }\\n var propValue = props[propName];\\n if (!Array.isArray(propValue)) {\\n var propType = getPropType(propValue);\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\\n }\\n for (var i = 0; i < propValue.length; i++) {\\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\\n if (error instanceof Error) {\\n return error;\\n }\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createElementTypeChecker() {\\n function validate(props, propName, componentName, location, propFullName) {\\n var propValue = props[propName];\\n if (!isValidElement(propValue)) {\\n var propType = getPropType(propValue);\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createInstanceTypeChecker(expectedClass) {\\n function validate(props, propName, componentName, location, propFullName) {\\n if (!(props[propName] instanceof expectedClass)) {\\n var expectedClassName = expectedClass.name || ANONYMOUS;\\n var actualClassName = getClassName(props[propName]);\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createEnumTypeChecker(expectedValues) {\\n if (!Array.isArray(expectedValues)) {\\n true ? printWarning('Invalid argument supplied to oneOf, expected an instance of array.') : undefined;\\n return emptyFunctionThatReturnsNull;\\n }\\n\\n function validate(props, propName, componentName, location, propFullName) {\\n var propValue = props[propName];\\n for (var i = 0; i < expectedValues.length; i++) {\\n if (is(propValue, expectedValues[i])) {\\n return null;\\n }\\n }\\n\\n var valuesString = JSON.stringify(expectedValues);\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createObjectOfTypeChecker(typeChecker) {\\n function validate(props, propName, componentName, location, propFullName) {\\n if (typeof typeChecker !== 'function') {\\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\\n }\\n var propValue = props[propName];\\n var propType = getPropType(propValue);\\n if (propType !== 'object') {\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\\n }\\n for (var key in propValue) {\\n if (propValue.hasOwnProperty(key)) {\\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n if (error instanceof Error) {\\n return error;\\n }\\n }\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createUnionTypeChecker(arrayOfTypeCheckers) {\\n if (!Array.isArray(arrayOfTypeCheckers)) {\\n true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : undefined;\\n return emptyFunctionThatReturnsNull;\\n }\\n\\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\\n var checker = arrayOfTypeCheckers[i];\\n if (typeof checker !== 'function') {\\n printWarning(\\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\\n );\\n return emptyFunctionThatReturnsNull;\\n }\\n }\\n\\n function validate(props, propName, componentName, location, propFullName) {\\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\\n var checker = arrayOfTypeCheckers[i];\\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\\n return null;\\n }\\n }\\n\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createNodeChecker() {\\n function validate(props, propName, componentName, location, propFullName) {\\n if (!isNode(props[propName])) {\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createShapeTypeChecker(shapeTypes) {\\n function validate(props, propName, componentName, location, propFullName) {\\n var propValue = props[propName];\\n var propType = getPropType(propValue);\\n if (propType !== 'object') {\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\\n }\\n for (var key in shapeTypes) {\\n var checker = shapeTypes[key];\\n if (!checker) {\\n continue;\\n }\\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n if (error) {\\n return error;\\n }\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createStrictShapeTypeChecker(shapeTypes) {\\n function validate(props, propName, componentName, location, propFullName) {\\n var propValue = props[propName];\\n var propType = getPropType(propValue);\\n if (propType !== 'object') {\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\\n }\\n // We need to check all keys in case some are required but missing from\\n // props.\\n var allKeys = assign({}, props[propName], shapeTypes);\\n for (var key in allKeys) {\\n var checker = shapeTypes[key];\\n if (!checker) {\\n return new PropTypeError(\\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\\n '\\\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\\n '\\\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\\n );\\n }\\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n if (error) {\\n return error;\\n }\\n }\\n return null;\\n }\\n\\n return createChainableTypeChecker(validate);\\n }\\n\\n function isNode(propValue) {\\n switch (typeof propValue) {\\n case 'number':\\n case 'string':\\n case 'undefined':\\n return true;\\n case 'boolean':\\n return !propValue;\\n case 'object':\\n if (Array.isArray(propValue)) {\\n return propValue.every(isNode);\\n }\\n if (propValue === null || isValidElement(propValue)) {\\n return true;\\n }\\n\\n var iteratorFn = getIteratorFn(propValue);\\n if (iteratorFn) {\\n var iterator = iteratorFn.call(propValue);\\n var step;\\n if (iteratorFn !== propValue.entries) {\\n while (!(step = iterator.next()).done) {\\n if (!isNode(step.value)) {\\n return false;\\n }\\n }\\n } else {\\n // Iterator will provide entry [k,v] tuples rather than values.\\n while (!(step = iterator.next()).done) {\\n var entry = step.value;\\n if (entry) {\\n if (!isNode(entry[1])) {\\n return false;\\n }\\n }\\n }\\n }\\n } else {\\n return false;\\n }\\n\\n return true;\\n default:\\n return false;\\n }\\n }\\n\\n function isSymbol(propType, propValue) {\\n // Native Symbol.\\n if (propType === 'symbol') {\\n return true;\\n }\\n\\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\\n if (propValue['@@toStringTag'] === 'Symbol') {\\n return true;\\n }\\n\\n // Fallback for non-spec compliant Symbols which are polyfilled.\\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n // Equivalent of `typeof` but with special handling for array and regexp.\\n function getPropType(propValue) {\\n var propType = typeof propValue;\\n if (Array.isArray(propValue)) {\\n return 'array';\\n }\\n if (propValue instanceof RegExp) {\\n // Old webkits (at least until Android 4.0) return 'function' rather than\\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\\n // passes PropTypes.object.\\n return 'object';\\n }\\n if (isSymbol(propType, propValue)) {\\n return 'symbol';\\n }\\n return propType;\\n }\\n\\n // This handles more types than `getPropType`. Only used for error messages.\\n // See `createPrimitiveTypeChecker`.\\n function getPreciseType(propValue) {\\n if (typeof propValue === 'undefined' || propValue === null) {\\n return '' + propValue;\\n }\\n var propType = getPropType(propValue);\\n if (propType === 'object') {\\n if (propValue instanceof Date) {\\n return 'date';\\n } else if (propValue instanceof RegExp) {\\n return 'regexp';\\n }\\n }\\n return propType;\\n }\\n\\n // Returns a string that is postfixed to a warning about an invalid type.\\n // For example, \\\"undefined\\\" or \\\"of type array\\\"\\n function getPostfixForTypeWarning(value) {\\n var type = getPreciseType(value);\\n switch (type) {\\n case 'array':\\n case 'object':\\n return 'an ' + type;\\n case 'boolean':\\n case 'date':\\n case 'regexp':\\n return 'a ' + type;\\n default:\\n return type;\\n }\\n }\\n\\n // Returns class name of the object, if any.\\n function getClassName(propValue) {\\n if (!propValue.constructor || !propValue.constructor.name) {\\n return ANONYMOUS;\\n }\\n return propValue.constructor.name;\\n }\\n\\n ReactPropTypes.checkPropTypes = checkPropTypes;\\n ReactPropTypes.PropTypes = ReactPropTypes;\\n\\n return ReactPropTypes;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/factoryWithTypeCheckers.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/index.js\":\n/*!******************************************!*\\\n !*** ./node_modules/prop-types/index.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\nif (true) {\\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\\n Symbol.for &&\\n Symbol.for('react.element')) ||\\n 0xeac7;\\n\\n var isValidElement = function(object) {\\n return typeof object === 'object' &&\\n object !== null &&\\n object.$$typeof === REACT_ELEMENT_TYPE;\\n };\\n\\n // By explicitly using `prop-types` you are opting into new development behavior.\\n // http://fb.me/prop-types-in-prod\\n var throwOnDirectAccess = true;\\n module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ \\\"./node_modules/prop-types/factoryWithTypeCheckers.js\\\")(isValidElement, throwOnDirectAccess);\\n} else {}\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\n\\n\\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\\n\\nmodule.exports = ReactPropTypesSecret;\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/node_modules/object-assign/index.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/prop-types/node_modules/object-assign/index.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/*\\nobject-assign\\n(c) Sindre Sorhus\\n@license MIT\\n*/\\n\\n\\n/* eslint-disable no-unused-vars */\\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\\n\\nfunction toObject(val) {\\n\\tif (val === null || val === undefined) {\\n\\t\\tthrow new TypeError('Object.assign cannot be called with null or undefined');\\n\\t}\\n\\n\\treturn Object(val);\\n}\\n\\nfunction shouldUseNative() {\\n\\ttry {\\n\\t\\tif (!Object.assign) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// Detect buggy property enumeration order in older V8 versions.\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\\n\\t\\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\\n\\t\\ttest1[5] = 'de';\\n\\t\\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test2 = {};\\n\\t\\tfor (var i = 0; i < 10; i++) {\\n\\t\\t\\ttest2['_' + String.fromCharCode(i)] = i;\\n\\t\\t}\\n\\t\\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\\n\\t\\t\\treturn test2[n];\\n\\t\\t});\\n\\t\\tif (order2.join('') !== '0123456789') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test3 = {};\\n\\t\\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\\n\\t\\t\\ttest3[letter] = letter;\\n\\t\\t});\\n\\t\\tif (Object.keys(Object.assign({}, test3)).join('') !==\\n\\t\\t\\t\\t'abcdefghijklmnopqrst') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\treturn true;\\n\\t} catch (err) {\\n\\t\\t// We don't expect any of the above to throw, but better to be safe.\\n\\t\\treturn false;\\n\\t}\\n}\\n\\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\\n\\tvar from;\\n\\tvar to = toObject(target);\\n\\tvar symbols;\\n\\n\\tfor (var s = 1; s < arguments.length; s++) {\\n\\t\\tfrom = Object(arguments[s]);\\n\\n\\t\\tfor (var key in from) {\\n\\t\\t\\tif (hasOwnProperty.call(from, key)) {\\n\\t\\t\\t\\tto[key] = from[key];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (getOwnPropertySymbols) {\\n\\t\\t\\tsymbols = getOwnPropertySymbols(from);\\n\\t\\t\\tfor (var i = 0; i < symbols.length; i++) {\\n\\t\\t\\t\\tif (propIsEnumerable.call(from, symbols[i])) {\\n\\t\\t\\t\\t\\tto[symbols[i]] = from[symbols[i]];\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn to;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/node_modules/object-assign/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protocol-buffers-schema/index.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/protocol-buffers-schema/index.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var parse = __webpack_require__(/*! ./parse */ \\\"./node_modules/protocol-buffers-schema/parse.js\\\")\\nvar stringify = __webpack_require__(/*! ./stringify */ \\\"./node_modules/protocol-buffers-schema/stringify.js\\\")\\n\\nmodule.exports = parse\\nmodule.exports.parse = parse\\nmodule.exports.stringify = stringify\\n\\n\\n//# sourceURL=webpack:///./node_modules/protocol-buffers-schema/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protocol-buffers-schema/parse.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/protocol-buffers-schema/parse.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var tokenize = __webpack_require__(/*! ./tokenize */ \\\"./node_modules/protocol-buffers-schema/tokenize.js\\\")\\nvar MAX_RANGE = 0x1FFFFFFF\\n\\n// \\\"Only repeated fields of primitive numeric types (types which use the varint, 32-bit, or 64-bit wire types) can be declared \\\"packed\\\".\\\"\\n// https://developers.google.com/protocol-buffers/docs/encoding#optional\\nvar PACKABLE_TYPES = [\\n // varint wire types\\n 'int32', 'int64', 'uint32', 'uint64', 'sint32', 'sint64', 'bool',\\n // + ENUMS\\n // 64-bit wire types\\n 'fixed64', 'sfixed64', 'double',\\n // 32-bit wire types\\n 'fixed32', 'sfixed32', 'float'\\n]\\n\\nvar onfieldoptions = function (tokens) {\\n var opts = {}\\n\\n while (tokens.length) {\\n switch (tokens[0]) {\\n case '[':\\n case ',':\\n tokens.shift()\\n var name = tokens.shift()\\n if (name === '(') { // handling [(A) = B]\\n name = tokens.shift()\\n tokens.shift() // remove the end of bracket\\n }\\n if (tokens[0] !== '=') throw new Error('Unexpected token in field options: ' + tokens[0])\\n tokens.shift()\\n if (tokens[0] === ']') throw new Error('Unexpected ] in field option')\\n opts[name] = tokens.shift()\\n break\\n case ']':\\n tokens.shift()\\n return opts\\n\\n default:\\n throw new Error('Unexpected token in field options: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No closing tag for field options')\\n}\\n\\nvar onfield = function (tokens) {\\n var field = {\\n name: null,\\n type: null,\\n tag: -1,\\n map: null,\\n oneof: null,\\n required: false,\\n repeated: false,\\n options: {}\\n }\\n\\n while (tokens.length) {\\n switch (tokens[0]) {\\n case '=':\\n tokens.shift()\\n field.tag = Number(tokens.shift())\\n break\\n\\n case 'map':\\n field.type = 'map'\\n field.map = {from: null, to: null}\\n tokens.shift()\\n if (tokens[0] !== '<') throw new Error('Unexpected token in map type: ' + tokens[0])\\n tokens.shift()\\n field.map.from = tokens.shift()\\n if (tokens[0] !== ',') throw new Error('Unexpected token in map type: ' + tokens[0])\\n tokens.shift()\\n field.map.to = tokens.shift()\\n if (tokens[0] !== '>') throw new Error('Unexpected token in map type: ' + tokens[0])\\n tokens.shift()\\n field.name = tokens.shift()\\n break\\n\\n case 'repeated':\\n case 'required':\\n case 'optional':\\n var t = tokens.shift()\\n field.required = t === 'required'\\n field.repeated = t === 'repeated'\\n field.type = tokens.shift()\\n field.name = tokens.shift()\\n break\\n\\n case '[':\\n field.options = onfieldoptions(tokens)\\n break\\n\\n case ';':\\n if (field.name === null) throw new Error('Missing field name')\\n if (field.type === null) throw new Error('Missing type in message field: ' + field.name)\\n if (field.tag === -1) throw new Error('Missing tag number in message field: ' + field.name)\\n tokens.shift()\\n return field\\n\\n default:\\n throw new Error('Unexpected token in message field: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No ; found for message field')\\n}\\n\\nvar onmessagebody = function (tokens) {\\n var body = {\\n enums: [],\\n messages: [],\\n fields: [],\\n extends: [],\\n extensions: null\\n }\\n\\n while (tokens.length) {\\n switch (tokens[0]) {\\n case 'map':\\n case 'repeated':\\n case 'optional':\\n case 'required':\\n body.fields.push(onfield(tokens))\\n break\\n\\n case 'enum':\\n body.enums.push(onenum(tokens))\\n break\\n\\n case 'message':\\n body.messages.push(onmessage(tokens))\\n break\\n\\n case 'extensions':\\n body.extensions = onextensions(tokens)\\n break\\n\\n case 'oneof':\\n tokens.shift()\\n var name = tokens.shift()\\n if (tokens[0] !== '{') throw new Error('Unexpected token in oneof: ' + tokens[0])\\n tokens.shift()\\n while (tokens[0] !== '}') {\\n tokens.unshift('optional')\\n var field = onfield(tokens)\\n field.oneof = name\\n body.fields.push(field)\\n }\\n tokens.shift()\\n break\\n\\n case 'extend':\\n body.extends.push(onextend(tokens))\\n break\\n\\n case ';':\\n tokens.shift()\\n break\\n\\n case 'reserved':\\n case 'option':\\n tokens.shift()\\n while (tokens[0] !== ';') {\\n tokens.shift()\\n }\\n break\\n\\n default:\\n // proto3 does not require the use of optional/required, assumed as optional\\n // \\\"singular: a well-formed message can have zero or one of this field (but not more than one).\\\"\\n // https://developers.google.com/protocol-buffers/docs/proto3#specifying-field-rules\\n tokens.unshift('optional')\\n body.fields.push(onfield(tokens))\\n }\\n }\\n\\n return body\\n}\\n\\nvar onextend = function (tokens) {\\n var out = {\\n name: tokens[1],\\n message: onmessage(tokens)\\n }\\n return out\\n}\\n\\nvar onextensions = function (tokens) {\\n tokens.shift()\\n var from = Number(tokens.shift())\\n if (isNaN(from)) throw new Error('Invalid from in extensions definition')\\n if (tokens.shift() !== 'to') throw new Error(\\\"Expected keyword 'to' in extensions definition\\\")\\n var to = tokens.shift()\\n if (to === 'max') to = MAX_RANGE\\n to = Number(to)\\n if (isNaN(to)) throw new Error('Invalid to in extensions definition')\\n if (tokens.shift() !== ';') throw new Error('Missing ; in extensions definition')\\n return {from: from, to: to}\\n}\\nvar onmessage = function (tokens) {\\n tokens.shift()\\n\\n var lvl = 1\\n var body = []\\n var msg = {\\n name: tokens.shift(),\\n enums: [],\\n extends: [],\\n messages: [],\\n fields: []\\n }\\n\\n if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])\\n tokens.shift()\\n\\n while (tokens.length) {\\n if (tokens[0] === '{') lvl++\\n else if (tokens[0] === '}') lvl--\\n\\n if (!lvl) {\\n tokens.shift()\\n body = onmessagebody(body)\\n msg.enums = body.enums\\n msg.messages = body.messages\\n msg.fields = body.fields\\n msg.extends = body.extends\\n msg.extensions = body.extensions\\n return msg\\n }\\n\\n body.push(tokens.shift())\\n }\\n\\n if (lvl) throw new Error('No closing tag for message')\\n}\\n\\nvar onpackagename = function (tokens) {\\n tokens.shift()\\n var name = tokens.shift()\\n if (tokens[0] !== ';') throw new Error('Expected ; but found ' + tokens[0])\\n tokens.shift()\\n return name\\n}\\n\\nvar onsyntaxversion = function (tokens) {\\n tokens.shift()\\n\\n if (tokens[0] !== '=') throw new Error('Expected = but found ' + tokens[0])\\n tokens.shift()\\n\\n var version = tokens.shift()\\n switch (version) {\\n case '\\\"proto2\\\"':\\n version = 2\\n break\\n\\n case '\\\"proto3\\\"':\\n version = 3\\n break\\n\\n default:\\n throw new Error('Expected protobuf syntax version but found ' + version)\\n }\\n\\n if (tokens[0] !== ';') throw new Error('Expected ; but found ' + tokens[0])\\n tokens.shift()\\n\\n return version\\n}\\n\\nvar onenumvalue = function (tokens) {\\n if (tokens.length < 4) throw new Error('Invalid enum value: ' + tokens.slice(0, 3).join(' '))\\n if (tokens[1] !== '=') throw new Error('Expected = but found ' + tokens[1])\\n if (tokens[3] !== ';' && tokens[3] !== '[') throw new Error('Expected ; or [ but found ' + tokens[1])\\n\\n var name = tokens.shift()\\n tokens.shift()\\n var val = {\\n value: null,\\n options: {}\\n }\\n val.value = Number(tokens.shift())\\n if (tokens[0] === '[') {\\n val.options = onfieldoptions(tokens)\\n }\\n tokens.shift() // expecting the semicolon here\\n\\n return {\\n name: name,\\n val: val\\n }\\n}\\n\\nvar onenum = function (tokens) {\\n tokens.shift()\\n var options = {}\\n var e = {\\n name: tokens.shift(),\\n values: {},\\n options: {}\\n }\\n\\n if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])\\n tokens.shift()\\n\\n while (tokens.length) {\\n if (tokens[0] === '}') {\\n tokens.shift()\\n // there goes optional semicolon after the enclosing \\\"}\\\"\\n if (tokens[0] === ';') tokens.shift()\\n return e\\n }\\n if (tokens[0] === 'option') {\\n options = onoption(tokens)\\n e.options[options.name] = options.value\\n continue\\n }\\n var val = onenumvalue(tokens)\\n e.values[val.name] = val.val\\n }\\n\\n throw new Error('No closing tag for enum')\\n}\\n\\nvar onoption = function (tokens) {\\n var name = null\\n var value = null\\n\\n var parse = function (value) {\\n if (value === 'true') return true\\n if (value === 'false') return false\\n return value.replace(/^\\\"+|\\\"+$/gm, '')\\n }\\n\\n while (tokens.length) {\\n if (tokens[0] === ';') {\\n tokens.shift()\\n return {name: name, value: value}\\n }\\n switch (tokens[0]) {\\n case 'option':\\n tokens.shift()\\n\\n var hasBracket = tokens[0] === '('\\n if (hasBracket) tokens.shift()\\n\\n name = tokens.shift()\\n\\n if (hasBracket) {\\n if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])\\n tokens.shift()\\n }\\n\\n if (tokens[0][0] === '.') {\\n name += tokens.shift()\\n }\\n\\n break\\n\\n case '=':\\n tokens.shift()\\n if (name === null) throw new Error('Expected key for option with value: ' + tokens[0])\\n value = parse(tokens.shift())\\n\\n if (name === 'optimize_for' && !/^(SPEED|CODE_SIZE|LITE_RUNTIME)$/.test(value)) {\\n throw new Error('Unexpected value for option optimize_for: ' + value)\\n } else if (value === '{') {\\n // option foo = {bar: baz}\\n value = onoptionMap(tokens)\\n }\\n break\\n\\n default:\\n throw new Error('Unexpected token in option: ' + tokens[0])\\n }\\n }\\n}\\n\\nvar onoptionMap = function (tokens) {\\n var parse = function (value) {\\n if (value === 'true') return true\\n if (value === 'false') return false\\n return value.replace(/^\\\"+|\\\"+$/gm, '')\\n }\\n\\n var map = {}\\n\\n while (tokens.length) {\\n if (tokens[0] === '}') {\\n tokens.shift()\\n return map\\n }\\n\\n var hasBracket = tokens[0] === '('\\n if (hasBracket) tokens.shift()\\n\\n var key = tokens.shift()\\n if (hasBracket) {\\n if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])\\n tokens.shift()\\n }\\n\\n var value = null\\n\\n switch (tokens[0]) {\\n case ':':\\n if (map[key] !== undefined) throw new Error('Duplicate option map key ' + key)\\n\\n tokens.shift()\\n\\n value = parse(tokens.shift())\\n\\n if (value === '{') {\\n // option foo = {bar: baz}\\n value = onoptionMap(tokens)\\n }\\n\\n map[key] = value\\n\\n if (tokens[0] === ';') {\\n tokens.shift()\\n }\\n break\\n\\n case '{':\\n tokens.shift()\\n value = onoptionMap(tokens)\\n\\n if (map[key] === undefined) map[key] = []\\n if (!Array.isArray(map[key])) throw new Error('Duplicate option map key ' + key)\\n\\n map[key].push(value)\\n break\\n\\n default:\\n throw new Error('Unexpected token in option map: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No closing tag for option map')\\n}\\n\\nvar onimport = function (tokens) {\\n tokens.shift()\\n var file = tokens.shift().replace(/^\\\"+|\\\"+$/gm, '')\\n\\n if (tokens[0] !== ';') throw new Error('Unexpected token: ' + tokens[0] + '. Expected \\\";\\\"')\\n\\n tokens.shift()\\n return file\\n}\\n\\nvar onservice = function (tokens) {\\n tokens.shift()\\n\\n var service = {\\n name: tokens.shift(),\\n methods: [],\\n options: {}\\n }\\n\\n if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])\\n tokens.shift()\\n\\n while (tokens.length) {\\n if (tokens[0] === '}') {\\n tokens.shift()\\n // there goes optional semicolon after the enclosing \\\"}\\\"\\n if (tokens[0] === ';') tokens.shift()\\n return service\\n }\\n\\n switch (tokens[0]) {\\n case 'option':\\n var opt = onoption(tokens)\\n if (service.options[opt.name] !== undefined) throw new Error('Duplicate option ' + opt.name)\\n service.options[opt.name] = opt.value\\n break\\n case 'rpc':\\n service.methods.push(onrpc(tokens))\\n break\\n default:\\n throw new Error('Unexpected token in service: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No closing tag for service')\\n}\\n\\nvar onrpc = function (tokens) {\\n tokens.shift()\\n\\n var rpc = {\\n name: tokens.shift(),\\n input_type: null,\\n output_type: null,\\n client_streaming: false,\\n server_streaming: false,\\n options: {}\\n }\\n\\n if (tokens[0] !== '(') throw new Error('Expected ( but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] === 'stream') {\\n tokens.shift()\\n rpc.client_streaming = true\\n }\\n\\n rpc.input_type = tokens.shift()\\n\\n if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] !== 'returns') throw new Error('Expected returns but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] !== '(') throw new Error('Expected ( but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] === 'stream') {\\n tokens.shift()\\n rpc.server_streaming = true\\n }\\n\\n rpc.output_type = tokens.shift()\\n\\n if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] === ';') {\\n tokens.shift()\\n return rpc\\n }\\n\\n if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])\\n tokens.shift()\\n\\n while (tokens.length) {\\n if (tokens[0] === '}') {\\n tokens.shift()\\n // there goes optional semicolon after the enclosing \\\"}\\\"\\n if (tokens[0] === ';') tokens.shift()\\n return rpc\\n }\\n\\n if (tokens[0] === 'option') {\\n var opt = onoption(tokens)\\n if (rpc.options[opt.name] !== undefined) throw new Error('Duplicate option ' + opt.name)\\n rpc.options[opt.name] = opt.value\\n } else {\\n throw new Error('Unexpected token in rpc options: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No closing tag for rpc')\\n}\\n\\nvar parse = function (buf) {\\n var tokens = tokenize(buf.toString())\\n // check for isolated strings in tokens by looking for opening quote\\n for (var i = 0; i < tokens.length; i++) {\\n if (/^(\\\"|')([^'\\\"]*)$/.test(tokens[i])) {\\n var j\\n if (tokens[i].length === 1) {\\n j = i + 1\\n } else {\\n j = i\\n }\\n // look ahead for the closing quote and collapse all\\n // in-between tokens into a single token\\n for (j; j < tokens.length; j++) {\\n if (/^([^'\\\"]*)(\\\"|')$/.test(tokens[j])) {\\n tokens = tokens.slice(0, i).concat(tokens.slice(i, j + 1).join('')).concat(tokens.slice(j + 1))\\n break\\n }\\n }\\n }\\n }\\n var schema = {\\n syntax: 3,\\n package: null,\\n imports: [],\\n enums: [],\\n messages: [],\\n options: {},\\n extends: []\\n }\\n\\n var firstline = true\\n\\n while (tokens.length) {\\n switch (tokens[0]) {\\n case 'package':\\n schema.package = onpackagename(tokens)\\n break\\n\\n case 'syntax':\\n if (!firstline) throw new Error('Protobuf syntax version should be first thing in file')\\n schema.syntax = onsyntaxversion(tokens)\\n break\\n\\n case 'message':\\n schema.messages.push(onmessage(tokens))\\n break\\n\\n case 'enum':\\n schema.enums.push(onenum(tokens))\\n break\\n\\n case 'option':\\n var opt = onoption(tokens)\\n if (schema.options[opt.name]) throw new Error('Duplicate option ' + opt.name)\\n schema.options[opt.name] = opt.value\\n break\\n\\n case 'import':\\n schema.imports.push(onimport(tokens))\\n break\\n\\n case 'extend':\\n schema.extends.push(onextend(tokens))\\n break\\n\\n case 'service':\\n if (!schema.services) schema.services = []\\n schema.services.push(onservice(tokens))\\n break\\n\\n default:\\n throw new Error('Unexpected token: ' + tokens[0])\\n }\\n firstline = false\\n }\\n\\n // now iterate over messages and propagate extends\\n schema.extends.forEach(function (ext) {\\n schema.messages.forEach(function (msg) {\\n if (msg.name === ext.name) {\\n ext.message.fields.forEach(function (field) {\\n if (!msg.extensions || field.tag < msg.extensions.from || field.tag > msg.extensions.to) {\\n throw new Error(msg.name + ' does not declare ' + field.tag + ' as an extension number')\\n }\\n msg.fields.push(field)\\n })\\n }\\n })\\n })\\n\\n schema.messages.forEach(function (msg) {\\n msg.fields.forEach(function (field) {\\n var fieldSplit\\n var messageName\\n var nestedEnumName\\n var message\\n\\n function enumNameIsFieldType (en) {\\n return en.name === field.type\\n }\\n\\n function enumNameIsNestedEnumName (en) {\\n return en.name === nestedEnumName\\n }\\n\\n if (field.options && field.options.packed === 'true') {\\n if (PACKABLE_TYPES.indexOf(field.type) === -1) {\\n // let's see if it's an enum\\n if (field.type.indexOf('.') === -1) {\\n if (msg.enums && msg.enums.some(enumNameIsFieldType)) {\\n return\\n }\\n } else {\\n fieldSplit = field.type.split('.')\\n if (fieldSplit.length > 2) {\\n throw new Error('what is this?')\\n }\\n\\n messageName = fieldSplit[0]\\n nestedEnumName = fieldSplit[1]\\n\\n schema.messages.some(function (msg) {\\n if (msg.name === messageName) {\\n message = msg\\n return msg\\n }\\n })\\n\\n if (message && message.enums && message.enums.some(enumNameIsNestedEnumName)) {\\n return\\n }\\n }\\n\\n throw new Error(\\n 'Fields of type ' + field.type + ' cannot be declared [packed=true]. ' +\\n 'Only repeated fields of primitive numeric types (types which use ' +\\n 'the varint, 32-bit, or 64-bit wire types) can be declared \\\"packed\\\". ' +\\n 'See https://developers.google.com/protocol-buffers/docs/encoding#optional'\\n )\\n }\\n }\\n })\\n })\\n\\n return schema\\n}\\n\\nmodule.exports = parse\\n\\n\\n//# sourceURL=webpack:///./node_modules/protocol-buffers-schema/parse.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protocol-buffers-schema/stringify.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/protocol-buffers-schema/stringify.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"var onfield = function (f, result) {\\n var prefix = f.repeated ? 'repeated' : f.required ? 'required' : 'optional'\\n if (f.type === 'map') prefix = 'map<' + f.map.from + ',' + f.map.to + '>'\\n if (f.oneof) prefix = ''\\n\\n var opts = Object.keys(f.options || {}).map(function (key) {\\n return key + ' = ' + f.options[key]\\n }).join(',')\\n\\n if (opts) opts = ' [' + opts + ']'\\n\\n result.push((prefix ? prefix + ' ' : '') + (f.map === 'map' ? '' : f.type + ' ') + f.name + ' = ' + f.tag + opts + ';')\\n return result\\n}\\n\\nvar onmessage = function (m, result) {\\n result.push('message ' + m.name + ' {')\\n\\n if (!m.enums) m.enums = []\\n m.enums.forEach(function (e) {\\n result.push(onenum(e, []))\\n })\\n\\n if (!m.messages) m.messages = []\\n m.messages.forEach(function (m) {\\n result.push(onmessage(m, []))\\n })\\n\\n var oneofs = {}\\n\\n if (!m.fields) m.fields = []\\n m.fields.forEach(function (f) {\\n if (f.oneof) {\\n if (!oneofs[f.oneof]) oneofs[f.oneof] = []\\n oneofs[f.oneof].push(onfield(f, []))\\n } else {\\n result.push(onfield(f, []))\\n }\\n })\\n\\n Object.keys(oneofs).forEach(function (n) {\\n oneofs[n].unshift('oneof ' + n + ' {')\\n oneofs[n].push('}')\\n result.push(oneofs[n])\\n })\\n\\n result.push('}', '')\\n return result\\n}\\n\\nvar onenum = function (e, result) {\\n result.push('enum ' + e.name + ' {')\\n if (!e.options) e.options = {}\\n var options = onoption(e.options, [])\\n if (options.length > 1) {\\n result.push(options.slice(0, -1))\\n }\\n Object.keys(e.values).map(function (v) {\\n var val = onenumvalue(e.values[v])\\n result.push([v + ' = ' + val + ';'])\\n })\\n result.push('}', '')\\n return result\\n}\\n\\nvar onenumvalue = function (v, result) {\\n var opts = Object.keys(v.options || {}).map(function (key) {\\n return key + ' = ' + v.options[key]\\n }).join(',')\\n\\n if (opts) opts = ' [' + opts + ']'\\n var val = v.value + opts\\n return val\\n}\\n\\nvar onoption = function (o, result) {\\n var keys = Object.keys(o)\\n keys.forEach(function (option) {\\n var v = o[option]\\n if (~option.indexOf('.')) option = '(' + option + ')'\\n\\n var type = typeof v\\n\\n if (type === 'object') {\\n v = onoptionMap(v, [])\\n if (v.length) result.push('option ' + option + ' = {', v, '};')\\n } else {\\n if (type === 'string' && option !== 'optimize_for') v = '\\\"' + v + '\\\"'\\n result.push('option ' + option + ' = ' + v + ';')\\n }\\n })\\n if (keys.length > 0) {\\n result.push('')\\n }\\n\\n return result\\n}\\n\\nvar onoptionMap = function (o, result) {\\n var keys = Object.keys(o)\\n keys.forEach(function (k) {\\n var v = o[k]\\n\\n var type = typeof v\\n\\n if (type === 'object') {\\n if (Array.isArray(v)) {\\n v.forEach(function (v) {\\n v = onoptionMap(v, [])\\n if (v.length) result.push(k + ' {', v, '}')\\n })\\n } else {\\n v = onoptionMap(v, [])\\n if (v.length) result.push(k + ' {', v, '}')\\n }\\n } else {\\n if (type === 'string') v = '\\\"' + v + '\\\"'\\n result.push(k + ': ' + v)\\n }\\n })\\n\\n return result\\n}\\n\\nvar onservices = function (s, result) {\\n result.push('service ' + s.name + ' {')\\n\\n if (!s.options) s.options = {}\\n onoption(s.options, result)\\n if (!s.methods) s.methods = []\\n s.methods.forEach(function (m) {\\n result.push(onrpc(m, []))\\n })\\n\\n result.push('}', '')\\n return result\\n}\\n\\nvar onrpc = function (rpc, result) {\\n var def = 'rpc ' + rpc.name + '('\\n if (rpc.client_streaming) def += 'stream '\\n def += rpc.input_type + ') returns ('\\n if (rpc.server_streaming) def += 'stream '\\n def += rpc.output_type + ')'\\n\\n if (!rpc.options) rpc.options = {}\\n\\n var options = onoption(rpc.options, [])\\n if (options.length > 1) {\\n result.push(def + ' {', options.slice(0, -1), '}')\\n } else {\\n result.push(def + ';')\\n }\\n\\n return result\\n}\\n\\nvar indent = function (lvl) {\\n return function (line) {\\n if (Array.isArray(line)) return line.map(indent(lvl + ' ')).join('\\\\n')\\n return lvl + line\\n }\\n}\\n\\nmodule.exports = function (schema) {\\n var result = []\\n\\n result.push('syntax = \\\"proto' + schema.syntax + '\\\";', '')\\n\\n if (schema.package) result.push('package ' + schema.package + ';', '')\\n\\n if (!schema.options) schema.options = {}\\n\\n onoption(schema.options, result)\\n\\n if (!schema.enums) schema.enums = []\\n schema.enums.forEach(function (e) {\\n onenum(e, result)\\n })\\n\\n if (!schema.messages) schema.messages = []\\n schema.messages.forEach(function (m) {\\n onmessage(m, result)\\n })\\n\\n if (schema.services) {\\n schema.services.forEach(function (s) {\\n onservices(s, result)\\n })\\n }\\n return result.map(indent('')).join('\\\\n')\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/protocol-buffers-schema/stringify.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protocol-buffers-schema/tokenize.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/protocol-buffers-schema/tokenize.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = function (sch) {\\n var noComments = function (line) {\\n var i = line.indexOf('//')\\n return i > -1 ? line.slice(0, i) : line\\n }\\n\\n var noMultilineComments = function () {\\n var inside = false\\n return function (token) {\\n if (token === '/*') {\\n inside = true\\n return false\\n }\\n if (token === '*/') {\\n inside = false\\n return false\\n }\\n return !inside\\n }\\n }\\n\\n var trim = function (line) {\\n return line.trim()\\n }\\n\\n return sch\\n .replace(/([;,{}()=:[\\\\]<>]|\\\\/\\\\*|\\\\*\\\\/)/g, ' $1 ')\\n .split(/\\\\n/)\\n .map(trim)\\n .filter(Boolean)\\n .map(noComments)\\n .map(trim)\\n .filter(Boolean)\\n .join('\\\\n')\\n .split(/\\\\s+|\\\\n+/gm)\\n .filter(noMultilineComments())\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/protocol-buffers-schema/tokenize.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/decode.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/protons/src/compile/decode.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* eslint max-depth: 1 */\\n\\n\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nvar defined = __webpack_require__(/*! ./utils */ \\\"./node_modules/protons/src/compile/utils.js\\\").defined\\n\\nfunction compileDecode (m, resolve, enc) {\\n var requiredFields = []\\n var fields = {}\\n var oneofFields = []\\n var vals = []\\n\\n for (var i = 0; i < enc.length; i++) {\\n var field = m.fields[i]\\n\\n fields[field.tag] = i\\n\\n var def = field.options && field.options.default\\n var resolved = resolve(field.type, m.id, false)\\n vals[i] = [def, resolved && resolved.values]\\n\\n m.fields[i].packed = field.repeated && field.options && field.options.packed && field.options.packed !== 'false'\\n\\n if (field.required) {\\n requiredFields.push(field.name)\\n }\\n\\n if (field.oneof) {\\n oneofFields.push(field.name)\\n }\\n }\\n\\n function decodeField (e, field, obj, buf, offset, i) {\\n var name = field.name\\n\\n if (field.oneof) {\\n // clear already defined oneof fields\\n var props = Object.keys(obj)\\n for (var j = 0; j < props.length; j++) {\\n if (oneofFields.indexOf(props[j]) > -1) {\\n delete obj[props[j]]\\n }\\n }\\n }\\n\\n if (e.message) {\\n var len = varint.decode(buf, offset)\\n offset += varint.decode.bytes\\n\\n var decoded = e.decode(buf, offset, offset + len)\\n\\n if (field.map) {\\n obj[name] = obj[name] || {}\\n obj[name][decoded.key] = decoded.value\\n } else if (field.repeated) {\\n obj[name] = obj[name] || []\\n obj[name].push(decoded)\\n } else {\\n obj[name] = decoded\\n }\\n } else {\\n if (field.repeated) {\\n obj[name] = obj[name] || []\\n obj[name].push(e.decode(buf, offset))\\n } else {\\n obj[name] = e.decode(buf, offset)\\n }\\n }\\n\\n offset += e.decode.bytes\\n return offset\\n }\\n\\n return function decode (buf, offset, end) {\\n if (offset == null) {\\n offset = 0\\n }\\n\\n if (end == null) {\\n end = buf.length\\n }\\n\\n if (!(end <= buf.length && offset <= buf.length)) {\\n throw new Error('Decoded message is not valid')\\n }\\n\\n var oldOffset = offset\\n var obj = {}\\n var field\\n\\n while (true) {\\n if (end <= offset) {\\n // finished\\n\\n // check required methods\\n var name = ''\\n var j = 0\\n for (j = 0; j < requiredFields.length; j++) {\\n name = requiredFields[j]\\n if (!defined(obj[name])) {\\n throw new Error('Decoded message is not valid, missing required field: ' + name)\\n }\\n }\\n\\n // fill out missing defaults\\n var val\\n var def\\n for (j = 0; j < enc.length; j++) {\\n field = m.fields[j]\\n def = vals[j][0]\\n val = vals[j][1]\\n name = field.name\\n\\n if (defined(obj[name])) {\\n continue\\n }\\n\\n var done = false\\n if (field.oneof) {\\n var props = Object.keys(obj)\\n for (var k = 0; k < props.length; k++) {\\n if (oneofFields.indexOf(props[k]) > -1) {\\n done = true\\n break\\n }\\n }\\n }\\n\\n if (done) {\\n continue\\n }\\n\\n if (val) { // is enum\\n if (field.repeated) {\\n obj[name] = []\\n } else {\\n def = (def && val[def]) ? val[def].value : val[Object.keys(val)[0]].value\\n obj[name] = parseInt(def || 0, 10)\\n }\\n } else {\\n obj[name] = defaultValue(field, def)\\n }\\n }\\n\\n decode.bytes = offset - oldOffset\\n return obj\\n }\\n\\n var prefix = varint.decode(buf, offset)\\n offset += varint.decode.bytes\\n var tag = prefix >> 3\\n\\n var i = fields[tag]\\n\\n if (i == null) {\\n offset = skip(prefix & 7, buf, offset)\\n continue\\n }\\n\\n var e = enc[i]\\n field = m.fields[i]\\n\\n if (field.packed) {\\n var packedEnd = varint.decode(buf, offset)\\n offset += varint.decode.bytes\\n packedEnd += offset\\n\\n while (offset < packedEnd) {\\n offset = decodeField(e, field, obj, buf, offset, i)\\n }\\n } else {\\n offset = decodeField(e, field, obj, buf, offset, i)\\n }\\n }\\n }\\n}\\n\\nvar skip = function (type, buffer, offset) {\\n switch (type) {\\n case 0:\\n varint.decode(buffer, offset)\\n return offset + varint.decode.bytes\\n\\n case 1:\\n return offset + 8\\n\\n case 2:\\n var len = varint.decode(buffer, offset)\\n return offset + varint.decode.bytes + len\\n\\n case 3:\\n case 4:\\n throw new Error('Groups are not supported')\\n\\n case 5:\\n return offset + 4\\n default:\\n throw new Error('Unknown wire type: ' + type)\\n }\\n}\\n\\nvar defaultValue = function (f, def) {\\n if (f.map) return {}\\n if (f.repeated) return []\\n\\n switch (f.type) {\\n case 'string':\\n return def != null ? def : ''\\n\\n case 'bool':\\n return def === 'true'\\n\\n case 'float':\\n case 'double':\\n case 'sfixed32':\\n case 'fixed32':\\n case 'varint':\\n case 'enum':\\n case 'uint64':\\n case 'uint32':\\n case 'int64':\\n case 'int32':\\n case 'sint64':\\n case 'sint32':\\n return parseInt(def || 0, 10)\\n\\n default:\\n return null\\n }\\n}\\n\\nmodule.exports = compileDecode\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/decode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/encode.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/protons/src/compile/encode.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nvar defined = __webpack_require__(/*! ./utils */ \\\"./node_modules/protons/src/compile/utils.js\\\").defined\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nfunction compileEncode (m, resolve, enc, oneofs, encodingLength) {\\n var oneofsKeys = Object.keys(oneofs)\\n var encLength = enc.length\\n var ints = {}\\n for (var i = 0; i < encLength; i++) {\\n ints[i] = {\\n p: varint.encode(m.fields[i].tag << 3 | 2),\\n h: varint.encode(m.fields[i].tag << 3 | enc[i].type)\\n }\\n\\n var field = m.fields[i]\\n m.fields[i].packed = field.repeated && field.options && field.options.packed && field.options.packed !== 'false'\\n }\\n\\n function encodeField (buf, offset, h, e, packed, innerVal) {\\n var j = 0\\n if (!packed) {\\n for (j = 0; j < h.length; j++) {\\n buf[offset++] = h[j]\\n }\\n }\\n\\n if (e.message) {\\n varint.encode(e.encodingLength(innerVal), buf, offset)\\n offset += varint.encode.bytes\\n }\\n\\n e.encode(innerVal, buf, offset)\\n return offset + e.encode.bytes\\n }\\n\\n return function encode (obj, buf, offset) {\\n if (offset == null) {\\n offset = 0\\n }\\n if (buf == null) {\\n buf = Buffer.allocUnsafe(encodingLength(obj))\\n }\\n\\n var oldOffset = offset\\n var objKeys = Object.keys(obj)\\n var i = 0\\n\\n // oneof checks\\n\\n var match = false\\n for (i = 0; i < oneofsKeys.length; i++) {\\n var name = oneofsKeys[i]\\n var prop = oneofs[i]\\n if (objKeys.indexOf(prop) > -1) {\\n if (match) {\\n throw new Error('only one of the properties defined in oneof ' + name + ' can be set')\\n }\\n\\n match = true\\n }\\n }\\n\\n for (i = 0; i < encLength; i++) {\\n var e = enc[i]\\n var field = m.fields[i] // was f\\n var val = obj[field.name]\\n var j = 0\\n\\n if (!defined(val)) {\\n if (field.required) {\\n throw new Error(field.name + ' is required')\\n }\\n continue\\n }\\n var p = ints[i].p\\n var h = ints[i].h\\n\\n var packed = field.packed\\n\\n if (field.map) {\\n var tmp = Object.keys(val)\\n for (j = 0; j < tmp.length; j++) {\\n tmp[j] = {\\n key: tmp[j],\\n value: val[tmp[j]]\\n }\\n }\\n val = tmp\\n }\\n\\n if (packed) {\\n var packedLen = 0\\n for (j = 0; j < val.length; j++) {\\n if (!defined(val[j])) {\\n continue\\n }\\n\\n packedLen += e.encodingLength(val[j])\\n }\\n\\n if (packedLen) {\\n for (j = 0; j < h.length; j++) {\\n buf[offset++] = p[j]\\n }\\n varint.encode(packedLen, buf, offset)\\n offset += varint.encode.bytes\\n }\\n }\\n\\n if (field.repeated) {\\n var innerVal\\n for (j = 0; j < val.length; j++) {\\n innerVal = val[j]\\n if (!defined(innerVal)) {\\n continue\\n }\\n offset = encodeField(buf, offset, h, e, packed, innerVal)\\n }\\n } else {\\n offset = encodeField(buf, offset, h, e, packed, val)\\n }\\n }\\n\\n encode.bytes = offset - oldOffset\\n return buf\\n }\\n}\\n\\nmodule.exports = compileEncode\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/encode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/encoding-length.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/protons/src/compile/encoding-length.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar defined = __webpack_require__(/*! ./utils */ \\\"./node_modules/protons/src/compile/utils.js\\\").defined\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nfunction compileEncodingLength (m, enc, oneofs) {\\n var oneofsKeys = Object.keys(oneofs)\\n var encLength = enc.length\\n\\n var hls = new Array(encLength)\\n\\n for (var i = 0; i < m.fields.length; i++) {\\n hls[i] = varint.encodingLength(m.fields[i].tag << 3 | enc[i].type)\\n\\n var field = m.fields[i]\\n m.fields[i].packed = field.repeated && field.options && field.options.packed && field.options.packed !== 'false'\\n }\\n\\n return function encodingLength (obj) {\\n var length = 0\\n var i = 0\\n var j = 0\\n\\n for (i = 0; i < oneofsKeys.length; i++) {\\n var name = oneofsKeys[i]\\n var props = oneofs[name]\\n\\n var match = false\\n for (j = 0; j < props.length; j++) {\\n if (defined(obj[props[j]])) {\\n if (match) {\\n throw new Error('only one of the properties defined in oneof ' + name + ' can be set')\\n }\\n match = true\\n }\\n }\\n }\\n\\n for (i = 0; i < encLength; i++) {\\n var e = enc[i]\\n var field = m.fields[i]\\n var val = obj[field.name]\\n var hl = hls[i]\\n var len\\n\\n if (!defined(val)) {\\n if (field.required) {\\n throw new Error(field.name + ' is required')\\n }\\n\\n continue\\n }\\n\\n if (field.map) {\\n var tmp = Object.keys(val)\\n for (j = 0; j < tmp.length; j++) {\\n tmp[j] = {\\n key: tmp[j],\\n value: val[tmp[j]]\\n }\\n }\\n\\n val = tmp\\n }\\n\\n if (field.packed) {\\n var packedLen = 0\\n for (j = 0; j < val.length; j++) {\\n if (!defined(val[j])) {\\n continue\\n }\\n len = e.encodingLength(val[j])\\n packedLen += len\\n\\n if (e.message) {\\n packedLen += varint.encodingLength(len)\\n }\\n }\\n\\n if (packedLen) {\\n length += hl + packedLen + varint.encodingLength(packedLen)\\n }\\n } else if (field.repeated) {\\n for (j = 0; j < val.length; j++) {\\n if (!defined(val[j])) {\\n continue\\n }\\n\\n len = e.encodingLength(val[j])\\n length += hl + len + (e.message ? varint.encodingLength(len) : 0)\\n }\\n } else {\\n len = e.encodingLength(val)\\n length += hl + len + (e.message ? varint.encodingLength(len) : 0)\\n }\\n }\\n\\n return length\\n }\\n}\\n\\nmodule.exports = compileEncodingLength\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/encoding-length.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/encodings.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/protons/src/compile/encodings.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nvar svarint = __webpack_require__(/*! signed-varint */ \\\"./node_modules/signed-varint/index.js\\\")\\nvar Buffer = __webpack_require__(/*! safe-buffer */ \\\"./node_modules/safe-buffer/index.js\\\").Buffer\\n\\nvar encoder = function (type, encode, decode, encodingLength) {\\n encode.bytes = decode.bytes = 0\\n\\n return {\\n type: type,\\n encode: encode,\\n decode: decode,\\n encodingLength: encodingLength\\n }\\n}\\n\\nexports.make = encoder\\n\\nexports.bytes = (function (tag) {\\n var bufferLength = function (val) {\\n return Buffer.isBuffer(val) ? val.length : Buffer.byteLength(val)\\n }\\n\\n var encodingLength = function (val) {\\n var len = bufferLength(val)\\n return varint.encodingLength(len) + len\\n }\\n\\n var encode = function (val, buffer, offset) {\\n var oldOffset = offset\\n var len = bufferLength(val)\\n\\n varint.encode(len, buffer, offset)\\n offset += varint.encode.bytes\\n\\n if (Buffer.isBuffer(val)) val.copy(buffer, offset)\\n else buffer.write(val, offset, len)\\n offset += len\\n\\n encode.bytes = offset - oldOffset\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var oldOffset = offset\\n\\n var len = varint.decode(buffer, offset)\\n offset += varint.decode.bytes\\n\\n var val = buffer.slice(offset, offset + len)\\n offset += val.length\\n\\n decode.bytes = offset - oldOffset\\n return val\\n }\\n\\n return encoder(2, encode, decode, encodingLength)\\n})()\\n\\nexports.string = (function () {\\n var encodingLength = function (val) {\\n var len = Buffer.byteLength(val)\\n return varint.encodingLength(len) + len\\n }\\n\\n var encode = function (val, buffer, offset) {\\n var oldOffset = offset\\n var len = Buffer.byteLength(val)\\n\\n varint.encode(len, buffer, offset, 'utf-8')\\n offset += varint.encode.bytes\\n\\n buffer.write(val, offset, len)\\n offset += len\\n\\n encode.bytes = offset - oldOffset\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var oldOffset = offset\\n\\n var len = varint.decode(buffer, offset)\\n offset += varint.decode.bytes\\n\\n var val = buffer.toString('utf-8', offset, offset + len)\\n offset += len\\n\\n decode.bytes = offset - oldOffset\\n return val\\n }\\n\\n return encoder(2, encode, decode, encodingLength)\\n})()\\n\\nexports.bool = (function () {\\n var encodingLength = function (val) {\\n return 1\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer[offset] = val ? 1 : 0\\n encode.bytes = 1\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var bool = buffer[offset] > 0\\n decode.bytes = 1\\n return bool\\n }\\n\\n return encoder(0, encode, decode, encodingLength)\\n})()\\n\\nexports.int32 = (function () {\\n var decode = function (buffer, offset) {\\n var val = varint.decode(buffer, offset)\\n decode.bytes = varint.decode.bytes\\n return val > 2147483647 ? val - 4294967296 : val\\n }\\n\\n var encode = function (val, buffer, offset) {\\n varint.encode(val < 0 ? val + 4294967296 : val, buffer, offset)\\n encode.bytes = varint.encode.bytes\\n return buffer\\n }\\n\\n var encodingLength = function (val) {\\n return varint.encodingLength(val < 0 ? val + 4294967296 : val)\\n }\\n\\n return encoder(0, varint.encode, decode, encodingLength)\\n})()\\n\\nexports.int64 = (function () {\\n var decode = function (buffer, offset) {\\n var val = varint.decode(buffer, offset)\\n if (val >= Math.pow(2, 63)) {\\n var limit = 9\\n while (buffer[offset + limit - 1] === 0xff) limit--\\n limit = limit || 9\\n var subset = Buffer.allocUnsafe(limit)\\n buffer.copy(subset, 0, offset, offset + limit)\\n subset[limit - 1] = subset[limit - 1] & 0x7f\\n val = -1 * varint.decode(subset, 0)\\n decode.bytes = 10\\n } else {\\n decode.bytes = varint.decode.bytes\\n }\\n return val\\n }\\n\\n var encode = function (val, buffer, offset) {\\n if (val < 0) {\\n var last = offset + 9\\n varint.encode(val * -1, buffer, offset)\\n offset += varint.encode.bytes - 1\\n buffer[offset] = buffer[offset] | 0x80\\n while (offset < last - 1) {\\n offset++\\n buffer[offset] = 0xff\\n }\\n buffer[last] = 0x01\\n encode.bytes = 10\\n } else {\\n varint.encode(val, buffer, offset)\\n encode.bytes = varint.encode.bytes\\n }\\n return buffer\\n }\\n\\n var encodingLength = function (val) {\\n return val < 0 ? 10 : varint.encodingLength(val)\\n }\\n\\n return encoder(0, encode, decode, encodingLength)\\n})()\\n\\nexports.sint32 =\\nexports.sint64 = (function () {\\n return encoder(0, svarint.encode, svarint.decode, svarint.encodingLength)\\n})()\\n\\nexports.uint32 =\\nexports.uint64 =\\nexports.enum =\\nexports.varint = (function () {\\n return encoder(0, varint.encode, varint.decode, varint.encodingLength)\\n})()\\n\\n// we cannot represent these in javascript so we just use buffers\\nexports.fixed64 =\\nexports.sfixed64 = (function () {\\n var encodingLength = function (val) {\\n return 8\\n }\\n\\n var encode = function (val, buffer, offset) {\\n val.copy(buffer, offset)\\n encode.bytes = 8\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.slice(offset, offset + 8)\\n decode.bytes = 8\\n return val\\n }\\n\\n return encoder(1, encode, decode, encodingLength)\\n})()\\n\\nexports.double = (function () {\\n var encodingLength = function (val) {\\n return 8\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer.writeDoubleLE(val, offset)\\n encode.bytes = 8\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.readDoubleLE(offset)\\n decode.bytes = 8\\n return val\\n }\\n\\n return encoder(1, encode, decode, encodingLength)\\n})()\\n\\nexports.fixed32 = (function () {\\n var encodingLength = function (val) {\\n return 4\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer.writeUInt32LE(val, offset)\\n encode.bytes = 4\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.readUInt32LE(offset)\\n decode.bytes = 4\\n return val\\n }\\n\\n return encoder(5, encode, decode, encodingLength)\\n})()\\n\\nexports.sfixed32 = (function () {\\n var encodingLength = function (val) {\\n return 4\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer.writeInt32LE(val, offset)\\n encode.bytes = 4\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.readInt32LE(offset)\\n decode.bytes = 4\\n return val\\n }\\n\\n return encoder(5, encode, decode, encodingLength)\\n})()\\n\\nexports.float = (function () {\\n var encodingLength = function (val) {\\n return 4\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer.writeFloatLE(val, offset)\\n encode.bytes = 4\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.readFloatLE(offset)\\n decode.bytes = 4\\n return val\\n }\\n\\n return encoder(5, encode, decode, encodingLength)\\n})()\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/encodings.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/index.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/protons/src/compile/index.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar encodings = __webpack_require__(/*! ./encodings */ \\\"./node_modules/protons/src/compile/encodings.js\\\")\\nvar compileDecode = __webpack_require__(/*! ./decode */ \\\"./node_modules/protons/src/compile/decode.js\\\")\\nvar compileEncode = __webpack_require__(/*! ./encode */ \\\"./node_modules/protons/src/compile/encode.js\\\")\\nvar compileEncodingLength = __webpack_require__(/*! ./encoding-length */ \\\"./node_modules/protons/src/compile/encoding-length.js\\\")\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nvar flatten = function (values) {\\n if (!values) return null\\n var result = {}\\n Object.keys(values).forEach(function (k) {\\n result[k] = values[k].value\\n })\\n return result\\n}\\n\\nmodule.exports = function (schema, extraEncodings) {\\n var messages = {}\\n var enums = {}\\n var cache = {}\\n\\n var visit = function (schema, prefix) {\\n if (schema.enums) {\\n schema.enums.forEach(function (e) {\\n e.id = prefix + (prefix ? '.' : '') + e.name\\n enums[e.id] = e\\n visit(e, e.id)\\n })\\n }\\n if (schema.messages) {\\n schema.messages.forEach(function (m) {\\n m.id = prefix + (prefix ? '.' : '') + m.name\\n messages[m.id] = m\\n m.fields.forEach(function (f) {\\n if (!f.map) return\\n\\n var name = 'Map_' + f.map.from + '_' + f.map.to\\n var map = {\\n name: name,\\n enums: [],\\n messages: [],\\n fields: [{\\n name: 'key',\\n type: f.map.from,\\n tag: 1,\\n repeated: false,\\n required: true\\n }, {\\n name: 'value',\\n type: f.map.to,\\n tag: 2,\\n repeated: false,\\n required: false\\n }],\\n extensions: null,\\n id: prefix + (prefix ? '.' : '') + name\\n }\\n\\n if (!messages[map.id]) {\\n messages[map.id] = map\\n schema.messages.push(map)\\n }\\n f.type = name\\n f.repeated = true\\n })\\n visit(m, m.id)\\n })\\n }\\n }\\n\\n visit(schema, '')\\n\\n var compileEnum = function (e) {\\n var values = Object.keys(e.values || []).map(function (k) {\\n return parseInt(e.values[k].value, 10)\\n })\\n\\n var encode = function encode (val, buf, offset) {\\n if (!values.length || values.indexOf(val) === -1) {\\n throw new Error('Invalid enum value: ' + val)\\n }\\n varint.encode(val, buf, offset)\\n encode.bytes = varint.encode.bytes\\n return buf\\n }\\n\\n var decode = function decode (buf, offset) {\\n var val = varint.decode(buf, offset)\\n if (!values.length || values.indexOf(val) === -1) {\\n throw new Error('Invalid enum value: ' + val)\\n }\\n decode.bytes = varint.decode.bytes\\n return val\\n }\\n\\n return encodings.make(0, encode, decode, varint.encodingLength)\\n }\\n\\n var compileMessage = function (m, exports) {\\n m.messages.forEach(function (nested) {\\n exports[nested.name] = resolve(nested.name, m.id)\\n })\\n\\n m.enums.forEach(function (val) {\\n exports[val.name] = flatten(val.values)\\n })\\n\\n exports.type = 2\\n exports.message = true\\n exports.name = m.name\\n\\n var oneofs = {}\\n\\n m.fields.forEach(function (f) {\\n if (!f.oneof) return\\n if (!oneofs[f.oneof]) oneofs[f.oneof] = []\\n oneofs[f.oneof].push(f.name)\\n })\\n\\n var enc = m.fields.map(function (f) {\\n return resolve(f.type, m.id)\\n })\\n\\n var encodingLength = compileEncodingLength(m, enc, oneofs)\\n var encode = compileEncode(m, resolve, enc, oneofs, encodingLength)\\n var decode = compileDecode(m, resolve, enc)\\n\\n // end of compilation - return all the things\\n\\n encode.bytes = decode.bytes = 0\\n\\n exports.buffer = true\\n exports.encode = encode\\n exports.decode = decode\\n exports.encodingLength = encodingLength\\n\\n return exports\\n }\\n\\n var resolve = function (name, from, compile) {\\n if (extraEncodings && extraEncodings[name]) return extraEncodings[name]\\n if (encodings[name]) return encodings[name]\\n\\n var m = (from ? from + '.' + name : name).split('.')\\n .map(function (part, i, list) {\\n return list.slice(0, i).concat(name).join('.')\\n })\\n .reverse()\\n .reduce(function (result, id) {\\n return result || messages[id] || enums[id]\\n }, null)\\n\\n if (compile === false) return m\\n if (!m) throw new Error('Could not resolve ' + name)\\n\\n if (m.values) return compileEnum(m)\\n var res = cache[m.id] || compileMessage(m, cache[m.id] = {})\\n return res\\n }\\n\\n return (schema.enums || []).concat((schema.messages || []).map(function (message) {\\n return resolve(message.id)\\n }))\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/utils.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/protons/src/compile/utils.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.defined = function (val) {\\n return val !== null && val !== undefined && (typeof val !== 'number' || !isNaN(val))\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/protons/src/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nvar schema = __webpack_require__(/*! protocol-buffers-schema */ \\\"./node_modules/protocol-buffers-schema/index.js\\\")\\nvar compile = __webpack_require__(/*! ./compile */ \\\"./node_modules/protons/src/compile/index.js\\\")\\n\\nvar flatten = function (values) {\\n if (!values) return null\\n var result = {}\\n Object.keys(values).forEach(function (k) {\\n result[k] = values[k].value\\n })\\n return result\\n}\\n\\nmodule.exports = function (proto, opts) {\\n if (!opts) opts = {}\\n if (!proto) throw new Error('Pass in a .proto string or a protobuf-schema parsed object')\\n\\n var sch = (typeof proto === 'object' && !Buffer.isBuffer(proto)) ? proto : schema.parse(proto)\\n\\n // to not make toString,toJSON enumarable we make a fire-and-forget prototype\\n var Messages = function () {\\n var self = this\\n\\n compile(sch, opts.encodings || {}).forEach(function (m) {\\n self[m.name] = flatten(m.values) || m\\n })\\n }\\n\\n Messages.prototype.toString = function () {\\n return schema.stringify(sch)\\n }\\n\\n Messages.prototype.toJSON = function () {\\n return sch\\n }\\n\\n return new Messages()\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/react/cjs/react.development.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/react/cjs/react.development.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/** @license React v16.8.6\\n * react.development.js\\n *\\n * Copyright (c) Facebook, Inc. and its affiliates.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\n\\n\\n\\n\\nif (true) {\\n (function() {\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ \\\"./node_modules/react/node_modules/object-assign/index.js\\\");\\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \\\"./node_modules/prop-types/checkPropTypes.js\\\");\\n\\n// TODO: this is special because it gets imported during build.\\n\\nvar ReactVersion = '16.8.6';\\n\\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\\n// nor polyfill, then a plain number is used for performance.\\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\\n\\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace;\\n\\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\\n\\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\\n\\nfunction getIteratorFn(maybeIterable) {\\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\\n return null;\\n }\\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\\n if (typeof maybeIterator === 'function') {\\n return maybeIterator;\\n }\\n return null;\\n}\\n\\n/**\\n * Use invariant() to assert state which your program assumes to be true.\\n *\\n * Provide sprintf-style format (only %s is supported) and arguments\\n * to provide information about what broke and what you were\\n * expecting.\\n *\\n * The invariant message will be stripped in production, but the invariant\\n * will remain to ensure logic does not differ in production.\\n */\\n\\nvar validateFormat = function () {};\\n\\n{\\n validateFormat = function (format) {\\n if (format === undefined) {\\n throw new Error('invariant requires an error message argument');\\n }\\n };\\n}\\n\\nfunction invariant(condition, format, a, b, c, d, e, f) {\\n validateFormat(format);\\n\\n if (!condition) {\\n var error = void 0;\\n if (format === undefined) {\\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\\n } else {\\n var args = [a, b, c, d, e, f];\\n var argIndex = 0;\\n error = new Error(format.replace(/%s/g, function () {\\n return args[argIndex++];\\n }));\\n error.name = 'Invariant Violation';\\n }\\n\\n error.framesToPop = 1; // we don't care about invariant's own frame\\n throw error;\\n }\\n}\\n\\n// Relying on the `invariant()` implementation lets us\\n// preserve the format and params in the www builds.\\n\\n/**\\n * Forked from fbjs/warning:\\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\\n *\\n * Only change is we use console.warn instead of console.error,\\n * and do nothing when 'console' is not supported.\\n * This really simplifies the code.\\n * ---\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar lowPriorityWarning = function () {};\\n\\n{\\n var printWarning = function (format) {\\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n args[_key - 1] = arguments[_key];\\n }\\n\\n var argIndex = 0;\\n var message = 'Warning: ' + format.replace(/%s/g, function () {\\n return args[argIndex++];\\n });\\n if (typeof console !== 'undefined') {\\n console.warn(message);\\n }\\n try {\\n // --- Welcome to debugging React ---\\n // This error was thrown as a convenience so that you can use this stack\\n // to find the callsite that caused this warning to fire.\\n throw new Error(message);\\n } catch (x) {}\\n };\\n\\n lowPriorityWarning = function (condition, format) {\\n if (format === undefined) {\\n throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument');\\n }\\n if (!condition) {\\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\\n args[_key2 - 2] = arguments[_key2];\\n }\\n\\n printWarning.apply(undefined, [format].concat(args));\\n }\\n };\\n}\\n\\nvar lowPriorityWarning$1 = lowPriorityWarning;\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warningWithoutStack = function () {};\\n\\n{\\n warningWithoutStack = function (condition, format) {\\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\\n args[_key - 2] = arguments[_key];\\n }\\n\\n if (format === undefined) {\\n throw new Error('`warningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');\\n }\\n if (args.length > 8) {\\n // Check before the condition to catch violations early.\\n throw new Error('warningWithoutStack() currently supports at most 8 arguments.');\\n }\\n if (condition) {\\n return;\\n }\\n if (typeof console !== 'undefined') {\\n var argsWithFormat = args.map(function (item) {\\n return '' + item;\\n });\\n argsWithFormat.unshift('Warning: ' + format);\\n\\n // We intentionally don't use spread (or .apply) directly because it\\n // breaks IE9: https://github.com/facebook/react/issues/13610\\n Function.prototype.apply.call(console.error, console, argsWithFormat);\\n }\\n try {\\n // --- Welcome to debugging React ---\\n // This error was thrown as a convenience so that you can use this stack\\n // to find the callsite that caused this warning to fire.\\n var argIndex = 0;\\n var message = 'Warning: ' + format.replace(/%s/g, function () {\\n return args[argIndex++];\\n });\\n throw new Error(message);\\n } catch (x) {}\\n };\\n}\\n\\nvar warningWithoutStack$1 = warningWithoutStack;\\n\\nvar didWarnStateUpdateForUnmountedComponent = {};\\n\\nfunction warnNoop(publicInstance, callerName) {\\n {\\n var _constructor = publicInstance.constructor;\\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\\n var warningKey = componentName + '.' + callerName;\\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\\n return;\\n }\\n warningWithoutStack$1(false, \\\"Can't call %s on a component that is not yet mounted. \\\" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\\n }\\n}\\n\\n/**\\n * This is the abstract API for an update queue.\\n */\\nvar ReactNoopUpdateQueue = {\\n /**\\n * Checks whether or not this composite component is mounted.\\n * @param {ReactClass} publicInstance The instance we want to test.\\n * @return {boolean} True if mounted, false otherwise.\\n * @protected\\n * @final\\n */\\n isMounted: function (publicInstance) {\\n return false;\\n },\\n\\n /**\\n * Forces an update. This should only be invoked when it is known with\\n * certainty that we are **not** in a DOM transaction.\\n *\\n * You may want to call this when you know that some deeper aspect of the\\n * component's state has changed but `setState` was not called.\\n *\\n * This will not invoke `shouldComponentUpdate`, but it will invoke\\n * `componentWillUpdate` and `componentDidUpdate`.\\n *\\n * @param {ReactClass} publicInstance The instance that should rerender.\\n * @param {?function} callback Called after component is updated.\\n * @param {?string} callerName name of the calling function in the public API.\\n * @internal\\n */\\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\\n warnNoop(publicInstance, 'forceUpdate');\\n },\\n\\n /**\\n * Replaces all of the state. Always use this or `setState` to mutate state.\\n * You should treat `this.state` as immutable.\\n *\\n * There is no guarantee that `this.state` will be immediately updated, so\\n * accessing `this.state` after calling this method may return the old value.\\n *\\n * @param {ReactClass} publicInstance The instance that should rerender.\\n * @param {object} completeState Next state.\\n * @param {?function} callback Called after component is updated.\\n * @param {?string} callerName name of the calling function in the public API.\\n * @internal\\n */\\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\\n warnNoop(publicInstance, 'replaceState');\\n },\\n\\n /**\\n * Sets a subset of the state. This only exists because _pendingState is\\n * internal. This provides a merging strategy that is not available to deep\\n * properties which is confusing. TODO: Expose pendingState or don't use it\\n * during the merge.\\n *\\n * @param {ReactClass} publicInstance The instance that should rerender.\\n * @param {object} partialState Next partial state to be merged with state.\\n * @param {?function} callback Called after component is updated.\\n * @param {?string} Name of the calling function in the public API.\\n * @internal\\n */\\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\\n warnNoop(publicInstance, 'setState');\\n }\\n};\\n\\nvar emptyObject = {};\\n{\\n Object.freeze(emptyObject);\\n}\\n\\n/**\\n * Base class helpers for the updating state of a component.\\n */\\nfunction Component(props, context, updater) {\\n this.props = props;\\n this.context = context;\\n // If a component has string refs, we will assign a different object later.\\n this.refs = emptyObject;\\n // We initialize the default updater but the real one gets injected by the\\n // renderer.\\n this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nComponent.prototype.isReactComponent = {};\\n\\n/**\\n * Sets a subset of the state. Always use this to mutate\\n * state. You should treat `this.state` as immutable.\\n *\\n * There is no guarantee that `this.state` will be immediately updated, so\\n * accessing `this.state` after calling this method may return the old value.\\n *\\n * There is no guarantee that calls to `setState` will run synchronously,\\n * as they may eventually be batched together. You can provide an optional\\n * callback that will be executed when the call to setState is actually\\n * completed.\\n *\\n * When a function is provided to setState, it will be called at some point in\\n * the future (not synchronously). It will be called with the up to date\\n * component arguments (state, props, context). These values can be different\\n * from this.* because your function may be called after receiveProps but before\\n * shouldComponentUpdate, and this new state, props, and context will not yet be\\n * assigned to this.\\n *\\n * @param {object|function} partialState Next partial state or function to\\n * produce next partial state to be merged with current state.\\n * @param {?function} callback Called after state is updated.\\n * @final\\n * @protected\\n */\\nComponent.prototype.setState = function (partialState, callback) {\\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : void 0;\\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\\n};\\n\\n/**\\n * Forces an update. This should only be invoked when it is known with\\n * certainty that we are **not** in a DOM transaction.\\n *\\n * You may want to call this when you know that some deeper aspect of the\\n * component's state has changed but `setState` was not called.\\n *\\n * This will not invoke `shouldComponentUpdate`, but it will invoke\\n * `componentWillUpdate` and `componentDidUpdate`.\\n *\\n * @param {?function} callback Called after update is complete.\\n * @final\\n * @protected\\n */\\nComponent.prototype.forceUpdate = function (callback) {\\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\\n};\\n\\n/**\\n * Deprecated APIs. These APIs used to exist on classic React classes but since\\n * we would like to deprecate them, we're not going to move them over to this\\n * modern base class. Instead, we define a getter that warns if it's accessed.\\n */\\n{\\n var deprecatedAPIs = {\\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\\n };\\n var defineDeprecationWarning = function (methodName, info) {\\n Object.defineProperty(Component.prototype, methodName, {\\n get: function () {\\n lowPriorityWarning$1(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\\n return undefined;\\n }\\n });\\n };\\n for (var fnName in deprecatedAPIs) {\\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\\n }\\n }\\n}\\n\\nfunction ComponentDummy() {}\\nComponentDummy.prototype = Component.prototype;\\n\\n/**\\n * Convenience component with default shallow equality check for sCU.\\n */\\nfunction PureComponent(props, context, updater) {\\n this.props = props;\\n this.context = context;\\n // If a component has string refs, we will assign a different object later.\\n this.refs = emptyObject;\\n this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\\npureComponentPrototype.constructor = PureComponent;\\n// Avoid an extra prototype jump for these methods.\\n_assign(pureComponentPrototype, Component.prototype);\\npureComponentPrototype.isPureReactComponent = true;\\n\\n// an immutable object with a single mutable value\\nfunction createRef() {\\n var refObject = {\\n current: null\\n };\\n {\\n Object.seal(refObject);\\n }\\n return refObject;\\n}\\n\\n/**\\n * Keeps track of the current dispatcher.\\n */\\nvar ReactCurrentDispatcher = {\\n /**\\n * @internal\\n * @type {ReactComponent}\\n */\\n current: null\\n};\\n\\n/**\\n * Keeps track of the current owner.\\n *\\n * The current owner is the component who should own any components that are\\n * currently being constructed.\\n */\\nvar ReactCurrentOwner = {\\n /**\\n * @internal\\n * @type {ReactComponent}\\n */\\n current: null\\n};\\n\\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\\\\\\\/]/;\\n\\nvar describeComponentFrame = function (name, source, ownerName) {\\n var sourceInfo = '';\\n if (source) {\\n var path = source.fileName;\\n var fileName = path.replace(BEFORE_SLASH_RE, '');\\n {\\n // In DEV, include code for a common special case:\\n // prefer \\\"folder/index.js\\\" instead of just \\\"index.js\\\".\\n if (/^index\\\\./.test(fileName)) {\\n var match = path.match(BEFORE_SLASH_RE);\\n if (match) {\\n var pathBeforeSlash = match[1];\\n if (pathBeforeSlash) {\\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\\n fileName = folderName + '/' + fileName;\\n }\\n }\\n }\\n }\\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\\n } else if (ownerName) {\\n sourceInfo = ' (created by ' + ownerName + ')';\\n }\\n return '\\\\n in ' + (name || 'Unknown') + sourceInfo;\\n};\\n\\nvar Resolved = 1;\\n\\n\\nfunction refineResolvedLazyComponent(lazyComponent) {\\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\\n}\\n\\nfunction getWrappedName(outerType, innerType, wrapperName) {\\n var functionName = innerType.displayName || innerType.name || '';\\n return outerType.displayName || (functionName !== '' ? wrapperName + '(' + functionName + ')' : wrapperName);\\n}\\n\\nfunction getComponentName(type) {\\n if (type == null) {\\n // Host root, text node or just invalid type.\\n return null;\\n }\\n {\\n if (typeof type.tag === 'number') {\\n warningWithoutStack$1(false, 'Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\\n }\\n }\\n if (typeof type === 'function') {\\n return type.displayName || type.name || null;\\n }\\n if (typeof type === 'string') {\\n return type;\\n }\\n switch (type) {\\n case REACT_CONCURRENT_MODE_TYPE:\\n return 'ConcurrentMode';\\n case REACT_FRAGMENT_TYPE:\\n return 'Fragment';\\n case REACT_PORTAL_TYPE:\\n return 'Portal';\\n case REACT_PROFILER_TYPE:\\n return 'Profiler';\\n case REACT_STRICT_MODE_TYPE:\\n return 'StrictMode';\\n case REACT_SUSPENSE_TYPE:\\n return 'Suspense';\\n }\\n if (typeof type === 'object') {\\n switch (type.$$typeof) {\\n case REACT_CONTEXT_TYPE:\\n return 'Context.Consumer';\\n case REACT_PROVIDER_TYPE:\\n return 'Context.Provider';\\n case REACT_FORWARD_REF_TYPE:\\n return getWrappedName(type, type.render, 'ForwardRef');\\n case REACT_MEMO_TYPE:\\n return getComponentName(type.type);\\n case REACT_LAZY_TYPE:\\n {\\n var thenable = type;\\n var resolvedThenable = refineResolvedLazyComponent(thenable);\\n if (resolvedThenable) {\\n return getComponentName(resolvedThenable);\\n }\\n }\\n }\\n }\\n return null;\\n}\\n\\nvar ReactDebugCurrentFrame = {};\\n\\nvar currentlyValidatingElement = null;\\n\\nfunction setCurrentlyValidatingElement(element) {\\n {\\n currentlyValidatingElement = element;\\n }\\n}\\n\\n{\\n // Stack implementation injected by the current renderer.\\n ReactDebugCurrentFrame.getCurrentStack = null;\\n\\n ReactDebugCurrentFrame.getStackAddendum = function () {\\n var stack = '';\\n\\n // Add an extra top frame while an element is being validated\\n if (currentlyValidatingElement) {\\n var name = getComponentName(currentlyValidatingElement.type);\\n var owner = currentlyValidatingElement._owner;\\n stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\\n }\\n\\n // Delegate to the injected renderer-specific implementation\\n var impl = ReactDebugCurrentFrame.getCurrentStack;\\n if (impl) {\\n stack += impl() || '';\\n }\\n\\n return stack;\\n };\\n}\\n\\nvar ReactSharedInternals = {\\n ReactCurrentDispatcher: ReactCurrentDispatcher,\\n ReactCurrentOwner: ReactCurrentOwner,\\n // Used by renderers to avoid bundling object-assign twice in UMD bundles:\\n assign: _assign\\n};\\n\\n{\\n _assign(ReactSharedInternals, {\\n // These should not be included in production.\\n ReactDebugCurrentFrame: ReactDebugCurrentFrame,\\n // Shim for React DOM 16.0.0 which still destructured (but not used) this.\\n // TODO: remove in React 17.0.\\n ReactComponentTreeHook: {}\\n });\\n}\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warning = warningWithoutStack$1;\\n\\n{\\n warning = function (condition, format) {\\n if (condition) {\\n return;\\n }\\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\\n var stack = ReactDebugCurrentFrame.getStackAddendum();\\n // eslint-disable-next-line react-internal/warning-and-invariant-args\\n\\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\\n args[_key - 2] = arguments[_key];\\n }\\n\\n warningWithoutStack$1.apply(undefined, [false, format + '%s'].concat(args, [stack]));\\n };\\n}\\n\\nvar warning$1 = warning;\\n\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\nvar RESERVED_PROPS = {\\n key: true,\\n ref: true,\\n __self: true,\\n __source: true\\n};\\n\\nvar specialPropKeyWarningShown = void 0;\\nvar specialPropRefWarningShown = void 0;\\n\\nfunction hasValidRef(config) {\\n {\\n if (hasOwnProperty.call(config, 'ref')) {\\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\\n if (getter && getter.isReactWarning) {\\n return false;\\n }\\n }\\n }\\n return config.ref !== undefined;\\n}\\n\\nfunction hasValidKey(config) {\\n {\\n if (hasOwnProperty.call(config, 'key')) {\\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\\n if (getter && getter.isReactWarning) {\\n return false;\\n }\\n }\\n }\\n return config.key !== undefined;\\n}\\n\\nfunction defineKeyPropWarningGetter(props, displayName) {\\n var warnAboutAccessingKey = function () {\\n if (!specialPropKeyWarningShown) {\\n specialPropKeyWarningShown = true;\\n warningWithoutStack$1(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\\n }\\n };\\n warnAboutAccessingKey.isReactWarning = true;\\n Object.defineProperty(props, 'key', {\\n get: warnAboutAccessingKey,\\n configurable: true\\n });\\n}\\n\\nfunction defineRefPropWarningGetter(props, displayName) {\\n var warnAboutAccessingRef = function () {\\n if (!specialPropRefWarningShown) {\\n specialPropRefWarningShown = true;\\n warningWithoutStack$1(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\\n }\\n };\\n warnAboutAccessingRef.isReactWarning = true;\\n Object.defineProperty(props, 'ref', {\\n get: warnAboutAccessingRef,\\n configurable: true\\n });\\n}\\n\\n/**\\n * Factory method to create a new React element. This no longer adheres to\\n * the class pattern, so do not use new to call it. Also, no instanceof check\\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\\n * if something is a React Element.\\n *\\n * @param {*} type\\n * @param {*} key\\n * @param {string|object} ref\\n * @param {*} self A *temporary* helper to detect places where `this` is\\n * different from the `owner` when React.createElement is called, so that we\\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\\n * functions, and as long as `this` and owner are the same, there will be no\\n * change in behavior.\\n * @param {*} source An annotation object (added by a transpiler or otherwise)\\n * indicating filename, line number, and/or other information.\\n * @param {*} owner\\n * @param {*} props\\n * @internal\\n */\\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\\n var element = {\\n // This tag allows us to uniquely identify this as a React Element\\n $$typeof: REACT_ELEMENT_TYPE,\\n\\n // Built-in properties that belong on the element\\n type: type,\\n key: key,\\n ref: ref,\\n props: props,\\n\\n // Record the component responsible for creating this element.\\n _owner: owner\\n };\\n\\n {\\n // The validation flag is currently mutative. We put it on\\n // an external backing store so that we can freeze the whole object.\\n // This can be replaced with a WeakMap once they are implemented in\\n // commonly used development environments.\\n element._store = {};\\n\\n // To make comparing ReactElements easier for testing purposes, we make\\n // the validation flag non-enumerable (where possible, which should\\n // include every environment we run tests in), so the test framework\\n // ignores it.\\n Object.defineProperty(element._store, 'validated', {\\n configurable: false,\\n enumerable: false,\\n writable: true,\\n value: false\\n });\\n // self and source are DEV only properties.\\n Object.defineProperty(element, '_self', {\\n configurable: false,\\n enumerable: false,\\n writable: false,\\n value: self\\n });\\n // Two elements created in two different places should be considered\\n // equal for testing purposes and therefore we hide it from enumeration.\\n Object.defineProperty(element, '_source', {\\n configurable: false,\\n enumerable: false,\\n writable: false,\\n value: source\\n });\\n if (Object.freeze) {\\n Object.freeze(element.props);\\n Object.freeze(element);\\n }\\n }\\n\\n return element;\\n};\\n\\n/**\\n * Create and return a new ReactElement of the given type.\\n * See https://reactjs.org/docs/react-api.html#createelement\\n */\\nfunction createElement(type, config, children) {\\n var propName = void 0;\\n\\n // Reserved names are extracted\\n var props = {};\\n\\n var key = null;\\n var ref = null;\\n var self = null;\\n var source = null;\\n\\n if (config != null) {\\n if (hasValidRef(config)) {\\n ref = config.ref;\\n }\\n if (hasValidKey(config)) {\\n key = '' + config.key;\\n }\\n\\n self = config.__self === undefined ? null : config.__self;\\n source = config.__source === undefined ? null : config.__source;\\n // Remaining properties are added to a new props object\\n for (propName in config) {\\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n props[propName] = config[propName];\\n }\\n }\\n }\\n\\n // Children can be more than one argument, and those are transferred onto\\n // the newly allocated props object.\\n var childrenLength = arguments.length - 2;\\n if (childrenLength === 1) {\\n props.children = children;\\n } else if (childrenLength > 1) {\\n var childArray = Array(childrenLength);\\n for (var i = 0; i < childrenLength; i++) {\\n childArray[i] = arguments[i + 2];\\n }\\n {\\n if (Object.freeze) {\\n Object.freeze(childArray);\\n }\\n }\\n props.children = childArray;\\n }\\n\\n // Resolve default props\\n if (type && type.defaultProps) {\\n var defaultProps = type.defaultProps;\\n for (propName in defaultProps) {\\n if (props[propName] === undefined) {\\n props[propName] = defaultProps[propName];\\n }\\n }\\n }\\n {\\n if (key || ref) {\\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\\n if (key) {\\n defineKeyPropWarningGetter(props, displayName);\\n }\\n if (ref) {\\n defineRefPropWarningGetter(props, displayName);\\n }\\n }\\n }\\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\\n}\\n\\n/**\\n * Return a function that produces ReactElements of a given type.\\n * See https://reactjs.org/docs/react-api.html#createfactory\\n */\\n\\n\\nfunction cloneAndReplaceKey(oldElement, newKey) {\\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\\n\\n return newElement;\\n}\\n\\n/**\\n * Clone and return a new ReactElement using element as the starting point.\\n * See https://reactjs.org/docs/react-api.html#cloneelement\\n */\\nfunction cloneElement(element, config, children) {\\n !!(element === null || element === undefined) ? invariant(false, 'React.cloneElement(...): The argument must be a React element, but you passed %s.', element) : void 0;\\n\\n var propName = void 0;\\n\\n // Original props are copied\\n var props = _assign({}, element.props);\\n\\n // Reserved names are extracted\\n var key = element.key;\\n var ref = element.ref;\\n // Self is preserved since the owner is preserved.\\n var self = element._self;\\n // Source is preserved since cloneElement is unlikely to be targeted by a\\n // transpiler, and the original source is probably a better indicator of the\\n // true owner.\\n var source = element._source;\\n\\n // Owner will be preserved, unless ref is overridden\\n var owner = element._owner;\\n\\n if (config != null) {\\n if (hasValidRef(config)) {\\n // Silently steal the ref from the parent.\\n ref = config.ref;\\n owner = ReactCurrentOwner.current;\\n }\\n if (hasValidKey(config)) {\\n key = '' + config.key;\\n }\\n\\n // Remaining properties override existing props\\n var defaultProps = void 0;\\n if (element.type && element.type.defaultProps) {\\n defaultProps = element.type.defaultProps;\\n }\\n for (propName in config) {\\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n if (config[propName] === undefined && defaultProps !== undefined) {\\n // Resolve default props\\n props[propName] = defaultProps[propName];\\n } else {\\n props[propName] = config[propName];\\n }\\n }\\n }\\n }\\n\\n // Children can be more than one argument, and those are transferred onto\\n // the newly allocated props object.\\n var childrenLength = arguments.length - 2;\\n if (childrenLength === 1) {\\n props.children = children;\\n } else if (childrenLength > 1) {\\n var childArray = Array(childrenLength);\\n for (var i = 0; i < childrenLength; i++) {\\n childArray[i] = arguments[i + 2];\\n }\\n props.children = childArray;\\n }\\n\\n return ReactElement(element.type, key, ref, self, source, owner, props);\\n}\\n\\n/**\\n * Verifies the object is a ReactElement.\\n * See https://reactjs.org/docs/react-api.html#isvalidelement\\n * @param {?object} object\\n * @return {boolean} True if `object` is a ReactElement.\\n * @final\\n */\\nfunction isValidElement(object) {\\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\\n}\\n\\nvar SEPARATOR = '.';\\nvar SUBSEPARATOR = ':';\\n\\n/**\\n * Escape and wrap key so it is safe to use as a reactid\\n *\\n * @param {string} key to be escaped.\\n * @return {string} the escaped key.\\n */\\nfunction escape(key) {\\n var escapeRegex = /[=:]/g;\\n var escaperLookup = {\\n '=': '=0',\\n ':': '=2'\\n };\\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\\n return escaperLookup[match];\\n });\\n\\n return '$' + escapedString;\\n}\\n\\n/**\\n * TODO: Test that a single child and an array with one item have the same key\\n * pattern.\\n */\\n\\nvar didWarnAboutMaps = false;\\n\\nvar userProvidedKeyEscapeRegex = /\\\\/+/g;\\nfunction escapeUserProvidedKey(text) {\\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\\n}\\n\\nvar POOL_SIZE = 10;\\nvar traverseContextPool = [];\\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\\n if (traverseContextPool.length) {\\n var traverseContext = traverseContextPool.pop();\\n traverseContext.result = mapResult;\\n traverseContext.keyPrefix = keyPrefix;\\n traverseContext.func = mapFunction;\\n traverseContext.context = mapContext;\\n traverseContext.count = 0;\\n return traverseContext;\\n } else {\\n return {\\n result: mapResult,\\n keyPrefix: keyPrefix,\\n func: mapFunction,\\n context: mapContext,\\n count: 0\\n };\\n }\\n}\\n\\nfunction releaseTraverseContext(traverseContext) {\\n traverseContext.result = null;\\n traverseContext.keyPrefix = null;\\n traverseContext.func = null;\\n traverseContext.context = null;\\n traverseContext.count = 0;\\n if (traverseContextPool.length < POOL_SIZE) {\\n traverseContextPool.push(traverseContext);\\n }\\n}\\n\\n/**\\n * @param {?*} children Children tree container.\\n * @param {!string} nameSoFar Name of the key path so far.\\n * @param {!function} callback Callback to invoke with each child found.\\n * @param {?*} traverseContext Used to pass information throughout the traversal\\n * process.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\\n var type = typeof children;\\n\\n if (type === 'undefined' || type === 'boolean') {\\n // All of the above are perceived as null.\\n children = null;\\n }\\n\\n var invokeCallback = false;\\n\\n if (children === null) {\\n invokeCallback = true;\\n } else {\\n switch (type) {\\n case 'string':\\n case 'number':\\n invokeCallback = true;\\n break;\\n case 'object':\\n switch (children.$$typeof) {\\n case REACT_ELEMENT_TYPE:\\n case REACT_PORTAL_TYPE:\\n invokeCallback = true;\\n }\\n }\\n }\\n\\n if (invokeCallback) {\\n callback(traverseContext, children,\\n // If it's the only child, treat the name as if it was wrapped in an array\\n // so that it's consistent if the number of children grows.\\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\\n return 1;\\n }\\n\\n var child = void 0;\\n var nextName = void 0;\\n var subtreeCount = 0; // Count of children found in the current subtree.\\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\\n\\n if (Array.isArray(children)) {\\n for (var i = 0; i < children.length; i++) {\\n child = children[i];\\n nextName = nextNamePrefix + getComponentKey(child, i);\\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n }\\n } else {\\n var iteratorFn = getIteratorFn(children);\\n if (typeof iteratorFn === 'function') {\\n {\\n // Warn about using Maps as children\\n if (iteratorFn === children.entries) {\\n !didWarnAboutMaps ? warning$1(false, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.') : void 0;\\n didWarnAboutMaps = true;\\n }\\n }\\n\\n var iterator = iteratorFn.call(children);\\n var step = void 0;\\n var ii = 0;\\n while (!(step = iterator.next()).done) {\\n child = step.value;\\n nextName = nextNamePrefix + getComponentKey(child, ii++);\\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n }\\n } else if (type === 'object') {\\n var addendum = '';\\n {\\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\\n }\\n var childrenString = '' + children;\\n invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum);\\n }\\n }\\n\\n return subtreeCount;\\n}\\n\\n/**\\n * Traverses children that are typically specified as `props.children`, but\\n * might also be specified through attributes:\\n *\\n * - `traverseAllChildren(this.props.children, ...)`\\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\\n *\\n * The `traverseContext` is an optional argument that is passed through the\\n * entire traversal. It can be used to store accumulations or anything else that\\n * the callback might find relevant.\\n *\\n * @param {?*} children Children tree object.\\n * @param {!function} callback To invoke upon traversing each child.\\n * @param {?*} traverseContext Context for traversal.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildren(children, callback, traverseContext) {\\n if (children == null) {\\n return 0;\\n }\\n\\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\\n}\\n\\n/**\\n * Generate a key string that identifies a component within a set.\\n *\\n * @param {*} component A component that could contain a manual key.\\n * @param {number} index Index that is used if a manual key is not provided.\\n * @return {string}\\n */\\nfunction getComponentKey(component, index) {\\n // Do some typechecking here since we call this blindly. We want to ensure\\n // that we don't block potential future ES APIs.\\n if (typeof component === 'object' && component !== null && component.key != null) {\\n // Explicit key\\n return escape(component.key);\\n }\\n // Implicit key determined by the index in the set\\n return index.toString(36);\\n}\\n\\nfunction forEachSingleChild(bookKeeping, child, name) {\\n var func = bookKeeping.func,\\n context = bookKeeping.context;\\n\\n func.call(context, child, bookKeeping.count++);\\n}\\n\\n/**\\n * Iterates through children that are typically specified as `props.children`.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} forEachFunc\\n * @param {*} forEachContext Context for forEachContext.\\n */\\nfunction forEachChildren(children, forEachFunc, forEachContext) {\\n if (children == null) {\\n return children;\\n }\\n var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\\n traverseAllChildren(children, forEachSingleChild, traverseContext);\\n releaseTraverseContext(traverseContext);\\n}\\n\\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\\n var result = bookKeeping.result,\\n keyPrefix = bookKeeping.keyPrefix,\\n func = bookKeeping.func,\\n context = bookKeeping.context;\\n\\n\\n var mappedChild = func.call(context, child, bookKeeping.count++);\\n if (Array.isArray(mappedChild)) {\\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\\n return c;\\n });\\n } else if (mappedChild != null) {\\n if (isValidElement(mappedChild)) {\\n mappedChild = cloneAndReplaceKey(mappedChild,\\n // Keep both the (mapped) and old keys if they differ, just as\\n // traverseAllChildren used to do for objects as children\\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\\n }\\n result.push(mappedChild);\\n }\\n}\\n\\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\\n var escapedPrefix = '';\\n if (prefix != null) {\\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\\n }\\n var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\\n releaseTraverseContext(traverseContext);\\n}\\n\\n/**\\n * Maps children that are typically specified as `props.children`.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\\n *\\n * The provided mapFunction(child, key, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} func The map function.\\n * @param {*} context Context for mapFunction.\\n * @return {object} Object containing the ordered map of results.\\n */\\nfunction mapChildren(children, func, context) {\\n if (children == null) {\\n return children;\\n }\\n var result = [];\\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\\n return result;\\n}\\n\\n/**\\n * Count the number of children that are typically specified as\\n * `props.children`.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\\n *\\n * @param {?*} children Children tree container.\\n * @return {number} The number of children.\\n */\\nfunction countChildren(children) {\\n return traverseAllChildren(children, function () {\\n return null;\\n }, null);\\n}\\n\\n/**\\n * Flatten a children object (typically specified as `props.children`) and\\n * return an array with appropriately re-keyed children.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\\n */\\nfunction toArray(children) {\\n var result = [];\\n mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\\n return child;\\n });\\n return result;\\n}\\n\\n/**\\n * Returns the first child in a collection of children and verifies that there\\n * is only one child in the collection.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\\n *\\n * The current implementation of this function assumes that a single child gets\\n * passed without a wrapper, but the purpose of this helper function is to\\n * abstract away the particular structure of children.\\n *\\n * @param {?object} children Child collection structure.\\n * @return {ReactElement} The first and only `ReactElement` contained in the\\n * structure.\\n */\\nfunction onlyChild(children) {\\n !isValidElement(children) ? invariant(false, 'React.Children.only expected to receive a single React element child.') : void 0;\\n return children;\\n}\\n\\nfunction createContext(defaultValue, calculateChangedBits) {\\n if (calculateChangedBits === undefined) {\\n calculateChangedBits = null;\\n } else {\\n {\\n !(calculateChangedBits === null || typeof calculateChangedBits === 'function') ? warningWithoutStack$1(false, 'createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits) : void 0;\\n }\\n }\\n\\n var context = {\\n $$typeof: REACT_CONTEXT_TYPE,\\n _calculateChangedBits: calculateChangedBits,\\n // As a workaround to support multiple concurrent renderers, we categorize\\n // some renderers as primary and others as secondary. We only expect\\n // there to be two concurrent renderers at most: React Native (primary) and\\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\\n // Secondary renderers store their context values on separate fields.\\n _currentValue: defaultValue,\\n _currentValue2: defaultValue,\\n // Used to track how many concurrent renderers this context currently\\n // supports within in a single renderer. Such as parallel server rendering.\\n _threadCount: 0,\\n // These are circular\\n Provider: null,\\n Consumer: null\\n };\\n\\n context.Provider = {\\n $$typeof: REACT_PROVIDER_TYPE,\\n _context: context\\n };\\n\\n var hasWarnedAboutUsingNestedContextConsumers = false;\\n var hasWarnedAboutUsingConsumerProvider = false;\\n\\n {\\n // A separate object, but proxies back to the original context object for\\n // backwards compatibility. It has a different $$typeof, so we can properly\\n // warn for the incorrect usage of Context as a Consumer.\\n var Consumer = {\\n $$typeof: REACT_CONTEXT_TYPE,\\n _context: context,\\n _calculateChangedBits: context._calculateChangedBits\\n };\\n // $FlowFixMe: Flow complains about not setting a value, which is intentional here\\n Object.defineProperties(Consumer, {\\n Provider: {\\n get: function () {\\n if (!hasWarnedAboutUsingConsumerProvider) {\\n hasWarnedAboutUsingConsumerProvider = true;\\n warning$1(false, 'Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\\n }\\n return context.Provider;\\n },\\n set: function (_Provider) {\\n context.Provider = _Provider;\\n }\\n },\\n _currentValue: {\\n get: function () {\\n return context._currentValue;\\n },\\n set: function (_currentValue) {\\n context._currentValue = _currentValue;\\n }\\n },\\n _currentValue2: {\\n get: function () {\\n return context._currentValue2;\\n },\\n set: function (_currentValue2) {\\n context._currentValue2 = _currentValue2;\\n }\\n },\\n _threadCount: {\\n get: function () {\\n return context._threadCount;\\n },\\n set: function (_threadCount) {\\n context._threadCount = _threadCount;\\n }\\n },\\n Consumer: {\\n get: function () {\\n if (!hasWarnedAboutUsingNestedContextConsumers) {\\n hasWarnedAboutUsingNestedContextConsumers = true;\\n warning$1(false, 'Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\\n }\\n return context.Consumer;\\n }\\n }\\n });\\n // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\\n context.Consumer = Consumer;\\n }\\n\\n {\\n context._currentRenderer = null;\\n context._currentRenderer2 = null;\\n }\\n\\n return context;\\n}\\n\\nfunction lazy(ctor) {\\n var lazyType = {\\n $$typeof: REACT_LAZY_TYPE,\\n _ctor: ctor,\\n // React uses these fields to store the result.\\n _status: -1,\\n _result: null\\n };\\n\\n {\\n // In production, this would just set it on the object.\\n var defaultProps = void 0;\\n var propTypes = void 0;\\n Object.defineProperties(lazyType, {\\n defaultProps: {\\n configurable: true,\\n get: function () {\\n return defaultProps;\\n },\\n set: function (newDefaultProps) {\\n warning$1(false, 'React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\\n defaultProps = newDefaultProps;\\n // Match production behavior more closely:\\n Object.defineProperty(lazyType, 'defaultProps', {\\n enumerable: true\\n });\\n }\\n },\\n propTypes: {\\n configurable: true,\\n get: function () {\\n return propTypes;\\n },\\n set: function (newPropTypes) {\\n warning$1(false, 'React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\\n propTypes = newPropTypes;\\n // Match production behavior more closely:\\n Object.defineProperty(lazyType, 'propTypes', {\\n enumerable: true\\n });\\n }\\n }\\n });\\n }\\n\\n return lazyType;\\n}\\n\\nfunction forwardRef(render) {\\n {\\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\\n warningWithoutStack$1(false, 'forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\\n } else if (typeof render !== 'function') {\\n warningWithoutStack$1(false, 'forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\\n } else {\\n !(\\n // Do not warn for 0 arguments because it could be due to usage of the 'arguments' object\\n render.length === 0 || render.length === 2) ? warningWithoutStack$1(false, 'forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.') : void 0;\\n }\\n\\n if (render != null) {\\n !(render.defaultProps == null && render.propTypes == null) ? warningWithoutStack$1(false, 'forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?') : void 0;\\n }\\n }\\n\\n return {\\n $$typeof: REACT_FORWARD_REF_TYPE,\\n render: render\\n };\\n}\\n\\nfunction isValidElementType(type) {\\n return typeof type === 'string' || typeof type === 'function' ||\\n // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE);\\n}\\n\\nfunction memo(type, compare) {\\n {\\n if (!isValidElementType(type)) {\\n warningWithoutStack$1(false, 'memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\\n }\\n }\\n return {\\n $$typeof: REACT_MEMO_TYPE,\\n type: type,\\n compare: compare === undefined ? null : compare\\n };\\n}\\n\\nfunction resolveDispatcher() {\\n var dispatcher = ReactCurrentDispatcher.current;\\n !(dispatcher !== null) ? invariant(false, 'Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\\\n2. You might be breaking the Rules of Hooks\\\\n3. You might have more than one copy of React in the same app\\\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.') : void 0;\\n return dispatcher;\\n}\\n\\nfunction useContext(Context, unstable_observedBits) {\\n var dispatcher = resolveDispatcher();\\n {\\n !(unstable_observedBits === undefined) ? warning$1(false, 'useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\\\\n\\\\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '') : void 0;\\n\\n // TODO: add a more generic warning for invalid values.\\n if (Context._context !== undefined) {\\n var realContext = Context._context;\\n // Don't deduplicate because this legitimately causes bugs\\n // and nobody should be using this in existing code.\\n if (realContext.Consumer === Context) {\\n warning$1(false, 'Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\\n } else if (realContext.Provider === Context) {\\n warning$1(false, 'Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\\n }\\n }\\n }\\n return dispatcher.useContext(Context, unstable_observedBits);\\n}\\n\\nfunction useState(initialState) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useState(initialState);\\n}\\n\\nfunction useReducer(reducer, initialArg, init) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useReducer(reducer, initialArg, init);\\n}\\n\\nfunction useRef(initialValue) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useRef(initialValue);\\n}\\n\\nfunction useEffect(create, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useEffect(create, inputs);\\n}\\n\\nfunction useLayoutEffect(create, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useLayoutEffect(create, inputs);\\n}\\n\\nfunction useCallback(callback, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useCallback(callback, inputs);\\n}\\n\\nfunction useMemo(create, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useMemo(create, inputs);\\n}\\n\\nfunction useImperativeHandle(ref, create, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useImperativeHandle(ref, create, inputs);\\n}\\n\\nfunction useDebugValue(value, formatterFn) {\\n {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useDebugValue(value, formatterFn);\\n }\\n}\\n\\n/**\\n * ReactElementValidator provides a wrapper around a element factory\\n * which validates the props passed to the element. This is intended to be\\n * used only in DEV and could be replaced by a static type checker for languages\\n * that support it.\\n */\\n\\nvar propTypesMisspellWarningShown = void 0;\\n\\n{\\n propTypesMisspellWarningShown = false;\\n}\\n\\nfunction getDeclarationErrorAddendum() {\\n if (ReactCurrentOwner.current) {\\n var name = getComponentName(ReactCurrentOwner.current.type);\\n if (name) {\\n return '\\\\n\\\\nCheck the render method of `' + name + '`.';\\n }\\n }\\n return '';\\n}\\n\\nfunction getSourceInfoErrorAddendum(elementProps) {\\n if (elementProps !== null && elementProps !== undefined && elementProps.__source !== undefined) {\\n var source = elementProps.__source;\\n var fileName = source.fileName.replace(/^.*[\\\\\\\\\\\\/]/, '');\\n var lineNumber = source.lineNumber;\\n return '\\\\n\\\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\\n }\\n return '';\\n}\\n\\n/**\\n * Warn if there's no key explicitly set on dynamic arrays of children or\\n * object keys are not valid. This allows us to keep track of children between\\n * updates.\\n */\\nvar ownerHasKeyUseWarning = {};\\n\\nfunction getCurrentComponentErrorInfo(parentType) {\\n var info = getDeclarationErrorAddendum();\\n\\n if (!info) {\\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\\n if (parentName) {\\n info = '\\\\n\\\\nCheck the top-level render call using <' + parentName + '>.';\\n }\\n }\\n return info;\\n}\\n\\n/**\\n * Warn if the element doesn't have an explicit key assigned to it.\\n * This element is in an array. The array could grow and shrink or be\\n * reordered. All children that haven't already been validated are required to\\n * have a \\\"key\\\" property assigned to it. Error statuses are cached so a warning\\n * will only be shown once.\\n *\\n * @internal\\n * @param {ReactElement} element Element that requires a key.\\n * @param {*} parentType element's parent's type.\\n */\\nfunction validateExplicitKey(element, parentType) {\\n if (!element._store || element._store.validated || element.key != null) {\\n return;\\n }\\n element._store.validated = true;\\n\\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\\n return;\\n }\\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\\n\\n // Usually the current owner is the offender, but if it accepts children as a\\n // property, it may be the creator of the child that's responsible for\\n // assigning it a key.\\n var childOwner = '';\\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\\n // Give the component that originally created this child.\\n childOwner = ' It was passed a child from ' + getComponentName(element._owner.type) + '.';\\n }\\n\\n setCurrentlyValidatingElement(element);\\n {\\n warning$1(false, 'Each child in a list should have a unique \\\"key\\\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);\\n }\\n setCurrentlyValidatingElement(null);\\n}\\n\\n/**\\n * Ensure that every element either is passed in a static location, in an\\n * array with an explicit keys property defined, or in an object literal\\n * with valid key property.\\n *\\n * @internal\\n * @param {ReactNode} node Statically passed child of any type.\\n * @param {*} parentType node's parent's type.\\n */\\nfunction validateChildKeys(node, parentType) {\\n if (typeof node !== 'object') {\\n return;\\n }\\n if (Array.isArray(node)) {\\n for (var i = 0; i < node.length; i++) {\\n var child = node[i];\\n if (isValidElement(child)) {\\n validateExplicitKey(child, parentType);\\n }\\n }\\n } else if (isValidElement(node)) {\\n // This element was passed in a valid location.\\n if (node._store) {\\n node._store.validated = true;\\n }\\n } else if (node) {\\n var iteratorFn = getIteratorFn(node);\\n if (typeof iteratorFn === 'function') {\\n // Entry iterators used to provide implicit keys,\\n // but now we print a separate warning for them later.\\n if (iteratorFn !== node.entries) {\\n var iterator = iteratorFn.call(node);\\n var step = void 0;\\n while (!(step = iterator.next()).done) {\\n if (isValidElement(step.value)) {\\n validateExplicitKey(step.value, parentType);\\n }\\n }\\n }\\n }\\n }\\n}\\n\\n/**\\n * Given an element, validate that its props follow the propTypes definition,\\n * provided by the type.\\n *\\n * @param {ReactElement} element\\n */\\nfunction validatePropTypes(element) {\\n var type = element.type;\\n if (type === null || type === undefined || typeof type === 'string') {\\n return;\\n }\\n var name = getComponentName(type);\\n var propTypes = void 0;\\n if (typeof type === 'function') {\\n propTypes = type.propTypes;\\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE ||\\n // Note: Memo only checks outer props here.\\n // Inner props are checked in the reconciler.\\n type.$$typeof === REACT_MEMO_TYPE)) {\\n propTypes = type.propTypes;\\n } else {\\n return;\\n }\\n if (propTypes) {\\n setCurrentlyValidatingElement(element);\\n checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\\n setCurrentlyValidatingElement(null);\\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\\n propTypesMisspellWarningShown = true;\\n warningWithoutStack$1(false, 'Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\\n }\\n if (typeof type.getDefaultProps === 'function') {\\n !type.getDefaultProps.isReactClassApproved ? warningWithoutStack$1(false, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\\n }\\n}\\n\\n/**\\n * Given a fragment, validate that it can only be provided with fragment props\\n * @param {ReactElement} fragment\\n */\\nfunction validateFragmentProps(fragment) {\\n setCurrentlyValidatingElement(fragment);\\n\\n var keys = Object.keys(fragment.props);\\n for (var i = 0; i < keys.length; i++) {\\n var key = keys[i];\\n if (key !== 'children' && key !== 'key') {\\n warning$1(false, 'Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\\n break;\\n }\\n }\\n\\n if (fragment.ref !== null) {\\n warning$1(false, 'Invalid attribute `ref` supplied to `React.Fragment`.');\\n }\\n\\n setCurrentlyValidatingElement(null);\\n}\\n\\nfunction createElementWithValidation(type, props, children) {\\n var validType = isValidElementType(type);\\n\\n // We warn in this case but don't throw. We expect the element creation to\\n // succeed and there will likely be errors in render.\\n if (!validType) {\\n var info = '';\\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\\n info += ' You likely forgot to export your component from the file ' + \\\"it's defined in, or you might have mixed up default and named imports.\\\";\\n }\\n\\n var sourceInfo = getSourceInfoErrorAddendum(props);\\n if (sourceInfo) {\\n info += sourceInfo;\\n } else {\\n info += getDeclarationErrorAddendum();\\n }\\n\\n var typeString = void 0;\\n if (type === null) {\\n typeString = 'null';\\n } else if (Array.isArray(type)) {\\n typeString = 'array';\\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\\n typeString = '<' + (getComponentName(type.type) || 'Unknown') + ' />';\\n info = ' Did you accidentally export a JSX literal instead of a component?';\\n } else {\\n typeString = typeof type;\\n }\\n\\n warning$1(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\\n }\\n\\n var element = createElement.apply(this, arguments);\\n\\n // The result can be nullish if a mock or a custom function is used.\\n // TODO: Drop this when these are no longer allowed as the type argument.\\n if (element == null) {\\n return element;\\n }\\n\\n // Skip key warning if the type isn't valid since our key validation logic\\n // doesn't expect a non-string/function type and can throw confusing errors.\\n // We don't want exception behavior to differ between dev and prod.\\n // (Rendering will throw with a helpful message and as soon as the type is\\n // fixed, the key warnings will appear.)\\n if (validType) {\\n for (var i = 2; i < arguments.length; i++) {\\n validateChildKeys(arguments[i], type);\\n }\\n }\\n\\n if (type === REACT_FRAGMENT_TYPE) {\\n validateFragmentProps(element);\\n } else {\\n validatePropTypes(element);\\n }\\n\\n return element;\\n}\\n\\nfunction createFactoryWithValidation(type) {\\n var validatedFactory = createElementWithValidation.bind(null, type);\\n validatedFactory.type = type;\\n // Legacy hook: remove it\\n {\\n Object.defineProperty(validatedFactory, 'type', {\\n enumerable: false,\\n get: function () {\\n lowPriorityWarning$1(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\\n Object.defineProperty(this, 'type', {\\n value: type\\n });\\n return type;\\n }\\n });\\n }\\n\\n return validatedFactory;\\n}\\n\\nfunction cloneElementWithValidation(element, props, children) {\\n var newElement = cloneElement.apply(this, arguments);\\n for (var i = 2; i < arguments.length; i++) {\\n validateChildKeys(arguments[i], newElement.type);\\n }\\n validatePropTypes(newElement);\\n return newElement;\\n}\\n\\n// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:\\n\\n\\n// In some cases, StrictMode should also double-render lifecycles.\\n// This can be confusing for tests though,\\n// And it can be bad for performance in production.\\n// This feature flag can be used to control the behavior:\\n\\n\\n// To preserve the \\\"Pause on caught exceptions\\\" behavior of the debugger, we\\n// replay the begin phase of a failed component inside invokeGuardedCallback.\\n\\n\\n// Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\\n\\n\\n// Gather advanced timing metrics for Profiler subtrees.\\n\\n\\n// Trace which interactions trigger each commit.\\n\\n\\n// Only used in www builds.\\n // TODO: true? Here it might just be false.\\n\\n// Only used in www builds.\\n\\n\\n// Only used in www builds.\\n\\n\\n// React Fire: prevent the value and checked attributes from syncing\\n// with their related DOM properties\\n\\n\\n// These APIs will no longer be \\\"unstable\\\" in the upcoming 16.7 release,\\n// Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\\nvar enableStableConcurrentModeAPIs = false;\\n\\nvar React = {\\n Children: {\\n map: mapChildren,\\n forEach: forEachChildren,\\n count: countChildren,\\n toArray: toArray,\\n only: onlyChild\\n },\\n\\n createRef: createRef,\\n Component: Component,\\n PureComponent: PureComponent,\\n\\n createContext: createContext,\\n forwardRef: forwardRef,\\n lazy: lazy,\\n memo: memo,\\n\\n useCallback: useCallback,\\n useContext: useContext,\\n useEffect: useEffect,\\n useImperativeHandle: useImperativeHandle,\\n useDebugValue: useDebugValue,\\n useLayoutEffect: useLayoutEffect,\\n useMemo: useMemo,\\n useReducer: useReducer,\\n useRef: useRef,\\n useState: useState,\\n\\n Fragment: REACT_FRAGMENT_TYPE,\\n StrictMode: REACT_STRICT_MODE_TYPE,\\n Suspense: REACT_SUSPENSE_TYPE,\\n\\n createElement: createElementWithValidation,\\n cloneElement: cloneElementWithValidation,\\n createFactory: createFactoryWithValidation,\\n isValidElement: isValidElement,\\n\\n version: ReactVersion,\\n\\n unstable_ConcurrentMode: REACT_CONCURRENT_MODE_TYPE,\\n unstable_Profiler: REACT_PROFILER_TYPE,\\n\\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactSharedInternals\\n};\\n\\n// Note: some APIs are added with feature flags.\\n// Make sure that stable builds for open source\\n// don't modify the React object to avoid deopts.\\n// Also let's not expose their names in stable builds.\\n\\nif (enableStableConcurrentModeAPIs) {\\n React.ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\\n React.Profiler = REACT_PROFILER_TYPE;\\n React.unstable_ConcurrentMode = undefined;\\n React.unstable_Profiler = undefined;\\n}\\n\\n\\n\\nvar React$2 = Object.freeze({\\n\\tdefault: React\\n});\\n\\nvar React$3 = ( React$2 && React ) || React$2;\\n\\n// TODO: decide on the top-level export form.\\n// This is hacky but makes it work with both Rollup and Jest.\\nvar react = React$3.default || React$3;\\n\\nmodule.exports = react;\\n })();\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/react/cjs/react.development.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/react/index.js\":\n/*!*************************************!*\\\n !*** ./node_modules/react/index.js ***!\n \\*************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nif (false) {} else {\\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \\\"./node_modules/react/cjs/react.development.js\\\");\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/react/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/react/node_modules/object-assign/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/react/node_modules/object-assign/index.js ***!\n \\****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/*\\nobject-assign\\n(c) Sindre Sorhus\\n@license MIT\\n*/\\n\\n\\n/* eslint-disable no-unused-vars */\\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\\n\\nfunction toObject(val) {\\n\\tif (val === null || val === undefined) {\\n\\t\\tthrow new TypeError('Object.assign cannot be called with null or undefined');\\n\\t}\\n\\n\\treturn Object(val);\\n}\\n\\nfunction shouldUseNative() {\\n\\ttry {\\n\\t\\tif (!Object.assign) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// Detect buggy property enumeration order in older V8 versions.\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\\n\\t\\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\\n\\t\\ttest1[5] = 'de';\\n\\t\\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test2 = {};\\n\\t\\tfor (var i = 0; i < 10; i++) {\\n\\t\\t\\ttest2['_' + String.fromCharCode(i)] = i;\\n\\t\\t}\\n\\t\\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\\n\\t\\t\\treturn test2[n];\\n\\t\\t});\\n\\t\\tif (order2.join('') !== '0123456789') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test3 = {};\\n\\t\\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\\n\\t\\t\\ttest3[letter] = letter;\\n\\t\\t});\\n\\t\\tif (Object.keys(Object.assign({}, test3)).join('') !==\\n\\t\\t\\t\\t'abcdefghijklmnopqrst') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\treturn true;\\n\\t} catch (err) {\\n\\t\\t// We don't expect any of the above to throw, but better to be safe.\\n\\t\\treturn false;\\n\\t}\\n}\\n\\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\\n\\tvar from;\\n\\tvar to = toObject(target);\\n\\tvar symbols;\\n\\n\\tfor (var s = 1; s < arguments.length; s++) {\\n\\t\\tfrom = Object(arguments[s]);\\n\\n\\t\\tfor (var key in from) {\\n\\t\\t\\tif (hasOwnProperty.call(from, key)) {\\n\\t\\t\\t\\tto[key] = from[key];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (getOwnPropertySymbols) {\\n\\t\\t\\tsymbols = getOwnPropertySymbols(from);\\n\\t\\t\\tfor (var i = 0; i < symbols.length; i++) {\\n\\t\\t\\t\\tif (propIsEnumerable.call(from, symbols[i])) {\\n\\t\\t\\t\\t\\tto[symbols[i]] = from[symbols[i]];\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn to;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/react/node_modules/object-assign/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/regenerator-runtime/runtime.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/regenerator-runtime/runtime.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/**\\n * Copyright (c) 2014-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\nvar runtime = (function (exports) {\\n \\\"use strict\\\";\\n\\n var Op = Object.prototype;\\n var hasOwn = Op.hasOwnProperty;\\n var undefined; // More compressible than void 0.\\n var $Symbol = typeof Symbol === \\\"function\\\" ? Symbol : {};\\n var iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\";\\n var asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\";\\n var toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\";\\n\\n function wrap(innerFn, outerFn, self, tryLocsList) {\\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\\n var generator = Object.create(protoGenerator.prototype);\\n var context = new Context(tryLocsList || []);\\n\\n // The ._invoke method unifies the implementations of the .next,\\n // .throw, and .return methods.\\n generator._invoke = makeInvokeMethod(innerFn, self, context);\\n\\n return generator;\\n }\\n exports.wrap = wrap;\\n\\n // Try/catch helper to minimize deoptimizations. Returns a completion\\n // record like context.tryEntries[i].completion. This interface could\\n // have been (and was previously) designed to take a closure to be\\n // invoked without arguments, but in all the cases we care about we\\n // already have an existing method we want to call, so there's no need\\n // to create a new function object. We can even get away with assuming\\n // the method takes exactly one argument, since that happens to be true\\n // in every case, so we don't have to touch the arguments object. The\\n // only additional allocation required is the completion record, which\\n // has a stable shape and so hopefully should be cheap to allocate.\\n function tryCatch(fn, obj, arg) {\\n try {\\n return { type: \\\"normal\\\", arg: fn.call(obj, arg) };\\n } catch (err) {\\n return { type: \\\"throw\\\", arg: err };\\n }\\n }\\n\\n var GenStateSuspendedStart = \\\"suspendedStart\\\";\\n var GenStateSuspendedYield = \\\"suspendedYield\\\";\\n var GenStateExecuting = \\\"executing\\\";\\n var GenStateCompleted = \\\"completed\\\";\\n\\n // Returning this object from the innerFn has the same effect as\\n // breaking out of the dispatch switch statement.\\n var ContinueSentinel = {};\\n\\n // Dummy constructor functions that we use as the .constructor and\\n // .constructor.prototype properties for functions that return Generator\\n // objects. For full spec compliance, you may wish to configure your\\n // minifier not to mangle the names of these two functions.\\n function Generator() {}\\n function GeneratorFunction() {}\\n function GeneratorFunctionPrototype() {}\\n\\n // This is a polyfill for %IteratorPrototype% for environments that\\n // don't natively support it.\\n var IteratorPrototype = {};\\n IteratorPrototype[iteratorSymbol] = function () {\\n return this;\\n };\\n\\n var getProto = Object.getPrototypeOf;\\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\\n if (NativeIteratorPrototype &&\\n NativeIteratorPrototype !== Op &&\\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\\n // This environment has a native %IteratorPrototype%; use it instead\\n // of the polyfill.\\n IteratorPrototype = NativeIteratorPrototype;\\n }\\n\\n var Gp = GeneratorFunctionPrototype.prototype =\\n Generator.prototype = Object.create(IteratorPrototype);\\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\\n GeneratorFunctionPrototype[toStringTagSymbol] =\\n GeneratorFunction.displayName = \\\"GeneratorFunction\\\";\\n\\n // Helper for defining the .next, .throw, and .return methods of the\\n // Iterator interface in terms of a single ._invoke method.\\n function defineIteratorMethods(prototype) {\\n [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function(method) {\\n prototype[method] = function(arg) {\\n return this._invoke(method, arg);\\n };\\n });\\n }\\n\\n exports.isGeneratorFunction = function(genFun) {\\n var ctor = typeof genFun === \\\"function\\\" && genFun.constructor;\\n return ctor\\n ? ctor === GeneratorFunction ||\\n // For the native GeneratorFunction constructor, the best we can\\n // do is to check its .name property.\\n (ctor.displayName || ctor.name) === \\\"GeneratorFunction\\\"\\n : false;\\n };\\n\\n exports.mark = function(genFun) {\\n if (Object.setPrototypeOf) {\\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\\n } else {\\n genFun.__proto__ = GeneratorFunctionPrototype;\\n if (!(toStringTagSymbol in genFun)) {\\n genFun[toStringTagSymbol] = \\\"GeneratorFunction\\\";\\n }\\n }\\n genFun.prototype = Object.create(Gp);\\n return genFun;\\n };\\n\\n // Within the body of any async function, `await x` is transformed to\\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\\n // `hasOwn.call(value, \\\"__await\\\")` to determine if the yielded value is\\n // meant to be awaited.\\n exports.awrap = function(arg) {\\n return { __await: arg };\\n };\\n\\n function AsyncIterator(generator, PromiseImpl) {\\n function invoke(method, arg, resolve, reject) {\\n var record = tryCatch(generator[method], generator, arg);\\n if (record.type === \\\"throw\\\") {\\n reject(record.arg);\\n } else {\\n var result = record.arg;\\n var value = result.value;\\n if (value &&\\n typeof value === \\\"object\\\" &&\\n hasOwn.call(value, \\\"__await\\\")) {\\n return PromiseImpl.resolve(value.__await).then(function(value) {\\n invoke(\\\"next\\\", value, resolve, reject);\\n }, function(err) {\\n invoke(\\\"throw\\\", err, resolve, reject);\\n });\\n }\\n\\n return PromiseImpl.resolve(value).then(function(unwrapped) {\\n // When a yielded Promise is resolved, its final value becomes\\n // the .value of the Promise<{value,done}> result for the\\n // current iteration.\\n result.value = unwrapped;\\n resolve(result);\\n }, function(error) {\\n // If a rejected Promise was yielded, throw the rejection back\\n // into the async generator function so it can be handled there.\\n return invoke(\\\"throw\\\", error, resolve, reject);\\n });\\n }\\n }\\n\\n var previousPromise;\\n\\n function enqueue(method, arg) {\\n function callInvokeWithMethodAndArg() {\\n return new PromiseImpl(function(resolve, reject) {\\n invoke(method, arg, resolve, reject);\\n });\\n }\\n\\n return previousPromise =\\n // If enqueue has been called before, then we want to wait until\\n // all previous Promises have been resolved before calling invoke,\\n // so that results are always delivered in the correct order. If\\n // enqueue has not been called before, then it is important to\\n // call invoke immediately, without waiting on a callback to fire,\\n // so that the async generator function has the opportunity to do\\n // any necessary setup in a predictable way. This predictability\\n // is why the Promise constructor synchronously invokes its\\n // executor callback, and why async functions synchronously\\n // execute code before the first await. Since we implement simple\\n // async functions in terms of async generators, it is especially\\n // important to get this right, even though it requires care.\\n previousPromise ? previousPromise.then(\\n callInvokeWithMethodAndArg,\\n // Avoid propagating failures to Promises returned by later\\n // invocations of the iterator.\\n callInvokeWithMethodAndArg\\n ) : callInvokeWithMethodAndArg();\\n }\\n\\n // Define the unified helper method that is used to implement .next,\\n // .throw, and .return (see defineIteratorMethods).\\n this._invoke = enqueue;\\n }\\n\\n defineIteratorMethods(AsyncIterator.prototype);\\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\\n return this;\\n };\\n exports.AsyncIterator = AsyncIterator;\\n\\n // Note that simple async functions are implemented on top of\\n // AsyncIterator objects; they just return a Promise for the value of\\n // the final result produced by the iterator.\\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\\n if (PromiseImpl === void 0) PromiseImpl = Promise;\\n\\n var iter = new AsyncIterator(\\n wrap(innerFn, outerFn, self, tryLocsList),\\n PromiseImpl\\n );\\n\\n return exports.isGeneratorFunction(outerFn)\\n ? iter // If outerFn is a generator, return the full iterator.\\n : iter.next().then(function(result) {\\n return result.done ? result.value : iter.next();\\n });\\n };\\n\\n function makeInvokeMethod(innerFn, self, context) {\\n var state = GenStateSuspendedStart;\\n\\n return function invoke(method, arg) {\\n if (state === GenStateExecuting) {\\n throw new Error(\\\"Generator is already running\\\");\\n }\\n\\n if (state === GenStateCompleted) {\\n if (method === \\\"throw\\\") {\\n throw arg;\\n }\\n\\n // Be forgiving, per 25.3.3.3.3 of the spec:\\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\\n return doneResult();\\n }\\n\\n context.method = method;\\n context.arg = arg;\\n\\n while (true) {\\n var delegate = context.delegate;\\n if (delegate) {\\n var delegateResult = maybeInvokeDelegate(delegate, context);\\n if (delegateResult) {\\n if (delegateResult === ContinueSentinel) continue;\\n return delegateResult;\\n }\\n }\\n\\n if (context.method === \\\"next\\\") {\\n // Setting context._sent for legacy support of Babel's\\n // function.sent implementation.\\n context.sent = context._sent = context.arg;\\n\\n } else if (context.method === \\\"throw\\\") {\\n if (state === GenStateSuspendedStart) {\\n state = GenStateCompleted;\\n throw context.arg;\\n }\\n\\n context.dispatchException(context.arg);\\n\\n } else if (context.method === \\\"return\\\") {\\n context.abrupt(\\\"return\\\", context.arg);\\n }\\n\\n state = GenStateExecuting;\\n\\n var record = tryCatch(innerFn, self, context);\\n if (record.type === \\\"normal\\\") {\\n // If an exception is thrown from innerFn, we leave state ===\\n // GenStateExecuting and loop back for another invocation.\\n state = context.done\\n ? GenStateCompleted\\n : GenStateSuspendedYield;\\n\\n if (record.arg === ContinueSentinel) {\\n continue;\\n }\\n\\n return {\\n value: record.arg,\\n done: context.done\\n };\\n\\n } else if (record.type === \\\"throw\\\") {\\n state = GenStateCompleted;\\n // Dispatch the exception by looping back around to the\\n // context.dispatchException(context.arg) call above.\\n context.method = \\\"throw\\\";\\n context.arg = record.arg;\\n }\\n }\\n };\\n }\\n\\n // Call delegate.iterator[context.method](context.arg) and handle the\\n // result, either by returning a { value, done } result from the\\n // delegate iterator, or by modifying context.method and context.arg,\\n // setting context.delegate to null, and returning the ContinueSentinel.\\n function maybeInvokeDelegate(delegate, context) {\\n var method = delegate.iterator[context.method];\\n if (method === undefined) {\\n // A .throw or .return when the delegate iterator has no .throw\\n // method always terminates the yield* loop.\\n context.delegate = null;\\n\\n if (context.method === \\\"throw\\\") {\\n // Note: [\\\"return\\\"] must be used for ES3 parsing compatibility.\\n if (delegate.iterator[\\\"return\\\"]) {\\n // If the delegate iterator has a return method, give it a\\n // chance to clean up.\\n context.method = \\\"return\\\";\\n context.arg = undefined;\\n maybeInvokeDelegate(delegate, context);\\n\\n if (context.method === \\\"throw\\\") {\\n // If maybeInvokeDelegate(context) changed context.method from\\n // \\\"return\\\" to \\\"throw\\\", let that override the TypeError below.\\n return ContinueSentinel;\\n }\\n }\\n\\n context.method = \\\"throw\\\";\\n context.arg = new TypeError(\\n \\\"The iterator does not provide a 'throw' method\\\");\\n }\\n\\n return ContinueSentinel;\\n }\\n\\n var record = tryCatch(method, delegate.iterator, context.arg);\\n\\n if (record.type === \\\"throw\\\") {\\n context.method = \\\"throw\\\";\\n context.arg = record.arg;\\n context.delegate = null;\\n return ContinueSentinel;\\n }\\n\\n var info = record.arg;\\n\\n if (! info) {\\n context.method = \\\"throw\\\";\\n context.arg = new TypeError(\\\"iterator result is not an object\\\");\\n context.delegate = null;\\n return ContinueSentinel;\\n }\\n\\n if (info.done) {\\n // Assign the result of the finished delegate to the temporary\\n // variable specified by delegate.resultName (see delegateYield).\\n context[delegate.resultName] = info.value;\\n\\n // Resume execution at the desired location (see delegateYield).\\n context.next = delegate.nextLoc;\\n\\n // If context.method was \\\"throw\\\" but the delegate handled the\\n // exception, let the outer generator proceed normally. If\\n // context.method was \\\"next\\\", forget context.arg since it has been\\n // \\\"consumed\\\" by the delegate iterator. If context.method was\\n // \\\"return\\\", allow the original .return call to continue in the\\n // outer generator.\\n if (context.method !== \\\"return\\\") {\\n context.method = \\\"next\\\";\\n context.arg = undefined;\\n }\\n\\n } else {\\n // Re-yield the result returned by the delegate method.\\n return info;\\n }\\n\\n // The delegate iterator is finished, so forget it and continue with\\n // the outer generator.\\n context.delegate = null;\\n return ContinueSentinel;\\n }\\n\\n // Define Generator.prototype.{next,throw,return} in terms of the\\n // unified ._invoke helper method.\\n defineIteratorMethods(Gp);\\n\\n Gp[toStringTagSymbol] = \\\"Generator\\\";\\n\\n // A Generator should always return itself as the iterator object when the\\n // @@iterator function is called on it. Some browsers' implementations of the\\n // iterator prototype chain incorrectly implement this, causing the Generator\\n // object to not be returned from this call. This ensures that doesn't happen.\\n // See https://github.com/facebook/regenerator/issues/274 for more details.\\n Gp[iteratorSymbol] = function() {\\n return this;\\n };\\n\\n Gp.toString = function() {\\n return \\\"[object Generator]\\\";\\n };\\n\\n function pushTryEntry(locs) {\\n var entry = { tryLoc: locs[0] };\\n\\n if (1 in locs) {\\n entry.catchLoc = locs[1];\\n }\\n\\n if (2 in locs) {\\n entry.finallyLoc = locs[2];\\n entry.afterLoc = locs[3];\\n }\\n\\n this.tryEntries.push(entry);\\n }\\n\\n function resetTryEntry(entry) {\\n var record = entry.completion || {};\\n record.type = \\\"normal\\\";\\n delete record.arg;\\n entry.completion = record;\\n }\\n\\n function Context(tryLocsList) {\\n // The root entry object (effectively a try statement without a catch\\n // or a finally block) gives us a place to store values thrown from\\n // locations where there is no enclosing try statement.\\n this.tryEntries = [{ tryLoc: \\\"root\\\" }];\\n tryLocsList.forEach(pushTryEntry, this);\\n this.reset(true);\\n }\\n\\n exports.keys = function(object) {\\n var keys = [];\\n for (var key in object) {\\n keys.push(key);\\n }\\n keys.reverse();\\n\\n // Rather than returning an object with a next method, we keep\\n // things simple and return the next function itself.\\n return function next() {\\n while (keys.length) {\\n var key = keys.pop();\\n if (key in object) {\\n next.value = key;\\n next.done = false;\\n return next;\\n }\\n }\\n\\n // To avoid creating an additional object, we just hang the .value\\n // and .done properties off the next function object itself. This\\n // also ensures that the minifier will not anonymize the function.\\n next.done = true;\\n return next;\\n };\\n };\\n\\n function values(iterable) {\\n if (iterable) {\\n var iteratorMethod = iterable[iteratorSymbol];\\n if (iteratorMethod) {\\n return iteratorMethod.call(iterable);\\n }\\n\\n if (typeof iterable.next === \\\"function\\\") {\\n return iterable;\\n }\\n\\n if (!isNaN(iterable.length)) {\\n var i = -1, next = function next() {\\n while (++i < iterable.length) {\\n if (hasOwn.call(iterable, i)) {\\n next.value = iterable[i];\\n next.done = false;\\n return next;\\n }\\n }\\n\\n next.value = undefined;\\n next.done = true;\\n\\n return next;\\n };\\n\\n return next.next = next;\\n }\\n }\\n\\n // Return an iterator with no values.\\n return { next: doneResult };\\n }\\n exports.values = values;\\n\\n function doneResult() {\\n return { value: undefined, done: true };\\n }\\n\\n Context.prototype = {\\n constructor: Context,\\n\\n reset: function(skipTempReset) {\\n this.prev = 0;\\n this.next = 0;\\n // Resetting context._sent for legacy support of Babel's\\n // function.sent implementation.\\n this.sent = this._sent = undefined;\\n this.done = false;\\n this.delegate = null;\\n\\n this.method = \\\"next\\\";\\n this.arg = undefined;\\n\\n this.tryEntries.forEach(resetTryEntry);\\n\\n if (!skipTempReset) {\\n for (var name in this) {\\n // Not sure about the optimal order of these conditions:\\n if (name.charAt(0) === \\\"t\\\" &&\\n hasOwn.call(this, name) &&\\n !isNaN(+name.slice(1))) {\\n this[name] = undefined;\\n }\\n }\\n }\\n },\\n\\n stop: function() {\\n this.done = true;\\n\\n var rootEntry = this.tryEntries[0];\\n var rootRecord = rootEntry.completion;\\n if (rootRecord.type === \\\"throw\\\") {\\n throw rootRecord.arg;\\n }\\n\\n return this.rval;\\n },\\n\\n dispatchException: function(exception) {\\n if (this.done) {\\n throw exception;\\n }\\n\\n var context = this;\\n function handle(loc, caught) {\\n record.type = \\\"throw\\\";\\n record.arg = exception;\\n context.next = loc;\\n\\n if (caught) {\\n // If the dispatched exception was caught by a catch block,\\n // then let that catch block handle the exception normally.\\n context.method = \\\"next\\\";\\n context.arg = undefined;\\n }\\n\\n return !! caught;\\n }\\n\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n var record = entry.completion;\\n\\n if (entry.tryLoc === \\\"root\\\") {\\n // Exception thrown outside of any try block that could handle\\n // it, so set the completion value of the entire function to\\n // throw the exception.\\n return handle(\\\"end\\\");\\n }\\n\\n if (entry.tryLoc <= this.prev) {\\n var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\");\\n var hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\");\\n\\n if (hasCatch && hasFinally) {\\n if (this.prev < entry.catchLoc) {\\n return handle(entry.catchLoc, true);\\n } else if (this.prev < entry.finallyLoc) {\\n return handle(entry.finallyLoc);\\n }\\n\\n } else if (hasCatch) {\\n if (this.prev < entry.catchLoc) {\\n return handle(entry.catchLoc, true);\\n }\\n\\n } else if (hasFinally) {\\n if (this.prev < entry.finallyLoc) {\\n return handle(entry.finallyLoc);\\n }\\n\\n } else {\\n throw new Error(\\\"try statement without catch or finally\\\");\\n }\\n }\\n }\\n },\\n\\n abrupt: function(type, arg) {\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n if (entry.tryLoc <= this.prev &&\\n hasOwn.call(entry, \\\"finallyLoc\\\") &&\\n this.prev < entry.finallyLoc) {\\n var finallyEntry = entry;\\n break;\\n }\\n }\\n\\n if (finallyEntry &&\\n (type === \\\"break\\\" ||\\n type === \\\"continue\\\") &&\\n finallyEntry.tryLoc <= arg &&\\n arg <= finallyEntry.finallyLoc) {\\n // Ignore the finally entry if control is not jumping to a\\n // location outside the try/catch block.\\n finallyEntry = null;\\n }\\n\\n var record = finallyEntry ? finallyEntry.completion : {};\\n record.type = type;\\n record.arg = arg;\\n\\n if (finallyEntry) {\\n this.method = \\\"next\\\";\\n this.next = finallyEntry.finallyLoc;\\n return ContinueSentinel;\\n }\\n\\n return this.complete(record);\\n },\\n\\n complete: function(record, afterLoc) {\\n if (record.type === \\\"throw\\\") {\\n throw record.arg;\\n }\\n\\n if (record.type === \\\"break\\\" ||\\n record.type === \\\"continue\\\") {\\n this.next = record.arg;\\n } else if (record.type === \\\"return\\\") {\\n this.rval = this.arg = record.arg;\\n this.method = \\\"return\\\";\\n this.next = \\\"end\\\";\\n } else if (record.type === \\\"normal\\\" && afterLoc) {\\n this.next = afterLoc;\\n }\\n\\n return ContinueSentinel;\\n },\\n\\n finish: function(finallyLoc) {\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n if (entry.finallyLoc === finallyLoc) {\\n this.complete(entry.completion, entry.afterLoc);\\n resetTryEntry(entry);\\n return ContinueSentinel;\\n }\\n }\\n },\\n\\n \\\"catch\\\": function(tryLoc) {\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n if (entry.tryLoc === tryLoc) {\\n var record = entry.completion;\\n if (record.type === \\\"throw\\\") {\\n var thrown = record.arg;\\n resetTryEntry(entry);\\n }\\n return thrown;\\n }\\n }\\n\\n // The context.catch method must only be called with a location\\n // argument that corresponds to a known catch block.\\n throw new Error(\\\"illegal catch attempt\\\");\\n },\\n\\n delegateYield: function(iterable, resultName, nextLoc) {\\n this.delegate = {\\n iterator: values(iterable),\\n resultName: resultName,\\n nextLoc: nextLoc\\n };\\n\\n if (this.method === \\\"next\\\") {\\n // Deliberately forget the last sent value so that we don't\\n // accidentally pass it on to the delegate.\\n this.arg = undefined;\\n }\\n\\n return ContinueSentinel;\\n }\\n };\\n\\n // Regardless of whether this script is executing as a CommonJS module\\n // or not, return the runtime object so that we can declare the variable\\n // regeneratorRuntime in the outer scope, which allows this module to be\\n // injected easily by `bin/regenerator --include-runtime script.js`.\\n return exports;\\n\\n}(\\n // If this script is executing as a CommonJS module, use module.exports\\n // as the regeneratorRuntime namespace. Otherwise create a new empty\\n // object. Either way, the resulting object will be used to initialize\\n // the regeneratorRuntime variable at the top of this file.\\n true ? module.exports : undefined\\n));\\n\\ntry {\\n regeneratorRuntime = runtime;\\n} catch (accidentalStrictMode) {\\n // This module should not be running in strict mode, so the above\\n // assignment should always work unless something is misconfigured. Just\\n // in case runtime.js accidentally runs in strict mode, we can escape\\n // strict mode using a global Function call. This could conceivably fail\\n // if a Content Security Policy forbids using Function, but in that case\\n // the proper solution is to fix the accidental strict mode problem. If\\n // you've misconfigured your bundler to force strict mode and applied a\\n // CSP to forbid Function, and you're not willing to fix either of those\\n // problems, please detail your unique predicament in a GitHub issue.\\n Function(\\\"r\\\", \\\"regeneratorRuntime = r\\\")(runtime);\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/regenerator-runtime/runtime.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/safe-buffer/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/safe-buffer/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* eslint-disable node/no-deprecated-api */\\nvar buffer = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\nvar Buffer = buffer.Buffer\\n\\n// alternative to using Object.keys for old browsers\\nfunction copyProps (src, dst) {\\n for (var key in src) {\\n dst[key] = src[key]\\n }\\n}\\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\\n module.exports = buffer\\n} else {\\n // Copy properties from require('buffer')\\n copyProps(buffer, exports)\\n exports.Buffer = SafeBuffer\\n}\\n\\nfunction SafeBuffer (arg, encodingOrOffset, length) {\\n return Buffer(arg, encodingOrOffset, length)\\n}\\n\\n// Copy static methods from Buffer\\ncopyProps(Buffer, SafeBuffer)\\n\\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\\n if (typeof arg === 'number') {\\n throw new TypeError('Argument must not be a number')\\n }\\n return Buffer(arg, encodingOrOffset, length)\\n}\\n\\nSafeBuffer.alloc = function (size, fill, encoding) {\\n if (typeof size !== 'number') {\\n throw new TypeError('Argument must be a number')\\n }\\n var buf = Buffer(size)\\n if (fill !== undefined) {\\n if (typeof encoding === 'string') {\\n buf.fill(fill, encoding)\\n } else {\\n buf.fill(fill)\\n }\\n } else {\\n buf.fill(0)\\n }\\n return buf\\n}\\n\\nSafeBuffer.allocUnsafe = function (size) {\\n if (typeof size !== 'number') {\\n throw new TypeError('Argument must be a number')\\n }\\n return Buffer(size)\\n}\\n\\nSafeBuffer.allocUnsafeSlow = function (size) {\\n if (typeof size !== 'number') {\\n throw new TypeError('Argument must be a number')\\n }\\n return buffer.SlowBuffer(size)\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/safe-buffer/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/scrypt-js/scrypt.js\":\n/*!******************************************!*\\\n !*** ./node_modules/scrypt-js/scrypt.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(setImmediate) {\\n\\n(function(root) {\\n const MAX_VALUE = 0x7fffffff;\\n\\n // The SHA256 and PBKDF2 implementation are from scrypt-async-js:\\n // See: https://github.com/dchest/scrypt-async-js\\n function SHA256(m) {\\n const K = new Uint32Array([\\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\\n ]);\\n\\n let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;\\n let h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;\\n const w = new Uint32Array(64);\\n\\n function blocks(p) {\\n let off = 0, len = p.length;\\n while (len >= 64) {\\n let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2;\\n\\n for (i = 0; i < 16; i++) {\\n j = off + i*4;\\n w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) |\\n ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff);\\n }\\n\\n for (i = 16; i < 64; i++) {\\n u = w[i-2];\\n t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10);\\n\\n u = w[i-15];\\n t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3);\\n\\n w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0;\\n }\\n\\n for (i = 0; i < 64; i++) {\\n t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^\\n ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) +\\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\\n\\n t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^\\n ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\\n\\n h = g;\\n g = f;\\n f = e;\\n e = (d + t1) | 0;\\n d = c;\\n c = b;\\n b = a;\\n a = (t1 + t2) | 0;\\n }\\n\\n h0 = (h0 + a) | 0;\\n h1 = (h1 + b) | 0;\\n h2 = (h2 + c) | 0;\\n h3 = (h3 + d) | 0;\\n h4 = (h4 + e) | 0;\\n h5 = (h5 + f) | 0;\\n h6 = (h6 + g) | 0;\\n h7 = (h7 + h) | 0;\\n\\n off += 64;\\n len -= 64;\\n }\\n }\\n\\n blocks(m);\\n\\n let i, bytesLeft = m.length % 64,\\n bitLenHi = (m.length / 0x20000000) | 0,\\n bitLenLo = m.length << 3,\\n numZeros = (bytesLeft < 56) ? 56 : 120,\\n p = m.slice(m.length - bytesLeft, m.length);\\n\\n p.push(0x80);\\n for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); }\\n p.push((bitLenHi >>> 24) & 0xff);\\n p.push((bitLenHi >>> 16) & 0xff);\\n p.push((bitLenHi >>> 8) & 0xff);\\n p.push((bitLenHi >>> 0) & 0xff);\\n p.push((bitLenLo >>> 24) & 0xff);\\n p.push((bitLenLo >>> 16) & 0xff);\\n p.push((bitLenLo >>> 8) & 0xff);\\n p.push((bitLenLo >>> 0) & 0xff);\\n\\n blocks(p);\\n\\n return [\\n (h0 >>> 24) & 0xff, (h0 >>> 16) & 0xff, (h0 >>> 8) & 0xff, (h0 >>> 0) & 0xff,\\n (h1 >>> 24) & 0xff, (h1 >>> 16) & 0xff, (h1 >>> 8) & 0xff, (h1 >>> 0) & 0xff,\\n (h2 >>> 24) & 0xff, (h2 >>> 16) & 0xff, (h2 >>> 8) & 0xff, (h2 >>> 0) & 0xff,\\n (h3 >>> 24) & 0xff, (h3 >>> 16) & 0xff, (h3 >>> 8) & 0xff, (h3 >>> 0) & 0xff,\\n (h4 >>> 24) & 0xff, (h4 >>> 16) & 0xff, (h4 >>> 8) & 0xff, (h4 >>> 0) & 0xff,\\n (h5 >>> 24) & 0xff, (h5 >>> 16) & 0xff, (h5 >>> 8) & 0xff, (h5 >>> 0) & 0xff,\\n (h6 >>> 24) & 0xff, (h6 >>> 16) & 0xff, (h6 >>> 8) & 0xff, (h6 >>> 0) & 0xff,\\n (h7 >>> 24) & 0xff, (h7 >>> 16) & 0xff, (h7 >>> 8) & 0xff, (h7 >>> 0) & 0xff\\n ];\\n }\\n\\n function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) {\\n // compress password if it's longer than hash block length\\n password = (password.length <= 64) ? password : SHA256(password);\\n\\n const innerLen = 64 + salt.length + 4;\\n const inner = new Array(innerLen);\\n const outerKey = new Array(64);\\n\\n let i;\\n let dk = [];\\n\\n // inner = (password ^ ipad) || salt || counter\\n for (i = 0; i < 64; i++) { inner[i] = 0x36; }\\n for (i = 0; i < password.length; i++) { inner[i] ^= password[i]; }\\n for (i = 0; i < salt.length; i++) { inner[64 + i] = salt[i]; }\\n for (i = innerLen - 4; i < innerLen; i++) { inner[i] = 0; }\\n\\n // outerKey = password ^ opad\\n for (i = 0; i < 64; i++) outerKey[i] = 0x5c;\\n for (i = 0; i < password.length; i++) outerKey[i] ^= password[i];\\n\\n // increments counter inside inner\\n function incrementCounter() {\\n for (let i = innerLen - 1; i >= innerLen - 4; i--) {\\n inner[i]++;\\n if (inner[i] <= 0xff) return;\\n inner[i] = 0;\\n }\\n }\\n\\n // output blocks = SHA256(outerKey || SHA256(inner)) ...\\n while (dkLen >= 32) {\\n incrementCounter();\\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))));\\n dkLen -= 32;\\n }\\n if (dkLen > 0) {\\n incrementCounter();\\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen));\\n }\\n\\n return dk;\\n }\\n\\n // The following is an adaptation of scryptsy\\n // See: https://www.npmjs.com/package/scryptsy\\n function blockmix_salsa8(BY, Yi, r, x, _X) {\\n let i;\\n\\n arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16);\\n for (i = 0; i < 2 * r; i++) {\\n blockxor(BY, i * 16, _X, 16);\\n salsa20_8(_X, x);\\n arraycopy(_X, 0, BY, Yi + (i * 16), 16);\\n }\\n\\n for (i = 0; i < r; i++) {\\n arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16);\\n }\\n\\n for (i = 0; i < r; i++) {\\n arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16);\\n }\\n }\\n\\n function R(a, b) {\\n return (a << b) | (a >>> (32 - b));\\n }\\n\\n function salsa20_8(B, x) {\\n arraycopy(B, 0, x, 0, 16);\\n\\n for (let i = 8; i > 0; i -= 2) {\\n x[ 4] ^= R(x[ 0] + x[12], 7);\\n x[ 8] ^= R(x[ 4] + x[ 0], 9);\\n x[12] ^= R(x[ 8] + x[ 4], 13);\\n x[ 0] ^= R(x[12] + x[ 8], 18);\\n x[ 9] ^= R(x[ 5] + x[ 1], 7);\\n x[13] ^= R(x[ 9] + x[ 5], 9);\\n x[ 1] ^= R(x[13] + x[ 9], 13);\\n x[ 5] ^= R(x[ 1] + x[13], 18);\\n x[14] ^= R(x[10] + x[ 6], 7);\\n x[ 2] ^= R(x[14] + x[10], 9);\\n x[ 6] ^= R(x[ 2] + x[14], 13);\\n x[10] ^= R(x[ 6] + x[ 2], 18);\\n x[ 3] ^= R(x[15] + x[11], 7);\\n x[ 7] ^= R(x[ 3] + x[15], 9);\\n x[11] ^= R(x[ 7] + x[ 3], 13);\\n x[15] ^= R(x[11] + x[ 7], 18);\\n x[ 1] ^= R(x[ 0] + x[ 3], 7);\\n x[ 2] ^= R(x[ 1] + x[ 0], 9);\\n x[ 3] ^= R(x[ 2] + x[ 1], 13);\\n x[ 0] ^= R(x[ 3] + x[ 2], 18);\\n x[ 6] ^= R(x[ 5] + x[ 4], 7);\\n x[ 7] ^= R(x[ 6] + x[ 5], 9);\\n x[ 4] ^= R(x[ 7] + x[ 6], 13);\\n x[ 5] ^= R(x[ 4] + x[ 7], 18);\\n x[11] ^= R(x[10] + x[ 9], 7);\\n x[ 8] ^= R(x[11] + x[10], 9);\\n x[ 9] ^= R(x[ 8] + x[11], 13);\\n x[10] ^= R(x[ 9] + x[ 8], 18);\\n x[12] ^= R(x[15] + x[14], 7);\\n x[13] ^= R(x[12] + x[15], 9);\\n x[14] ^= R(x[13] + x[12], 13);\\n x[15] ^= R(x[14] + x[13], 18);\\n }\\n\\n for (let i = 0; i < 16; ++i) {\\n B[i] += x[i];\\n }\\n }\\n\\n // naive approach... going back to loop unrolling may yield additional performance\\n function blockxor(S, Si, D, len) {\\n for (let i = 0; i < len; i++) {\\n D[i] ^= S[Si + i]\\n }\\n }\\n\\n function arraycopy(src, srcPos, dest, destPos, length) {\\n while (length--) {\\n dest[destPos++] = src[srcPos++];\\n }\\n }\\n\\n function checkBufferish(o) {\\n if (!o || typeof(o.length) !== 'number') { return false; }\\n\\n for (let i = 0; i < o.length; i++) {\\n const v = o[i];\\n if (typeof(v) !== 'number' || v % 1 || v < 0 || v >= 256) {\\n return false;\\n }\\n }\\n\\n return true;\\n }\\n\\n function ensureInteger(value, name) {\\n if (typeof(value) !== \\\"number\\\" || (value % 1)) { throw new Error('invalid ' + name); }\\n return value;\\n }\\n\\n // N = Cpu cost, r = Memory cost, p = parallelization cost\\n // callback(error, progress, key)\\n function _scrypt(password, salt, N, r, p, dkLen, callback) {\\n\\n N = ensureInteger(N, 'N');\\n r = ensureInteger(r, 'r');\\n p = ensureInteger(p, 'p');\\n\\n dkLen = ensureInteger(dkLen, 'dkLen');\\n\\n if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); }\\n\\n if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); }\\n if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); }\\n\\n if (!checkBufferish(password)) {\\n throw new Error('password must be an array or buffer');\\n }\\n password = Array.prototype.slice.call(password);\\n\\n if (!checkBufferish(salt)) {\\n throw new Error('salt must be an array or buffer');\\n }\\n salt = Array.prototype.slice.call(salt);\\n\\n let b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r);\\n const B = new Uint32Array(p * 32 * r)\\n for (let i = 0; i < B.length; i++) {\\n const j = i * 4;\\n B[i] = ((b[j + 3] & 0xff) << 24) |\\n ((b[j + 2] & 0xff) << 16) |\\n ((b[j + 1] & 0xff) << 8) |\\n ((b[j + 0] & 0xff) << 0);\\n }\\n\\n const XY = new Uint32Array(64 * r);\\n const V = new Uint32Array(32 * r * N);\\n\\n const Yi = 32 * r;\\n\\n // scratch space\\n const x = new Uint32Array(16); // salsa20_8\\n const _X = new Uint32Array(16); // blockmix_salsa8\\n\\n const totalOps = p * N * 2;\\n let currentOp = 0;\\n let lastPercent10 = null;\\n\\n // Set this to true to abandon the scrypt on the next step\\n let stop = false;\\n\\n // State information\\n let state = 0;\\n let i0 = 0, i1;\\n let Bi;\\n\\n // How many blockmix_salsa8 can we do per step?\\n const limit = callback ? parseInt(1000 / r): 0xffffffff;\\n\\n // Trick from scrypt-async; if there is a setImmediate shim in place, use it\\n const nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout;\\n\\n // This is really all I changed; making scryptsy a state machine so we occasionally\\n // stop and give other evnts on the evnt loop a chance to run. ~RicMoo\\n const incrementalSMix = function() {\\n if (stop) {\\n return callback(new Error('cancelled'), currentOp / totalOps);\\n }\\n\\n let steps;\\n\\n switch (state) {\\n case 0:\\n // for (var i = 0; i < p; i++)...\\n Bi = i0 * 32 * r;\\n\\n arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1\\n\\n state = 1; // Move to ROMix 2\\n i1 = 0;\\n\\n // Fall through\\n\\n case 1:\\n\\n // Run up to 1000 steps of the first inner smix loop\\n steps = N - i1;\\n if (steps > limit) { steps = limit; }\\n for (let i = 0; i < steps; i++) { // ROMix - 2\\n arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3\\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4\\n }\\n\\n // for (var i = 0; i < N; i++)\\n i1 += steps;\\n currentOp += steps;\\n\\n if (callback) {\\n // Call the callback with the progress (optionally stopping us)\\n const percent10 = parseInt(1000 * currentOp / totalOps);\\n if (percent10 !== lastPercent10) {\\n stop = callback(null, currentOp / totalOps);\\n if (stop) { break; }\\n lastPercent10 = percent10;\\n }\\n }\\n\\n if (i1 < N) { break; }\\n\\n i1 = 0; // Move to ROMix 6\\n state = 2;\\n\\n // Fall through\\n\\n case 2:\\n\\n // Run up to 1000 steps of the second inner smix loop\\n steps = N - i1;\\n if (steps > limit) { steps = limit; }\\n for (let i = 0; i < steps; i++) { // ROMix - 6\\n const offset = (2 * r - 1) * 16; // ROMix - 7\\n const j = XY[offset] & (N - 1);\\n blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner)\\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer)\\n }\\n\\n // for (var i = 0; i < N; i++)...\\n i1 += steps;\\n currentOp += steps;\\n\\n // Call the callback with the progress (optionally stopping us)\\n if (callback) {\\n const percent10 = parseInt(1000 * currentOp / totalOps);\\n if (percent10 !== lastPercent10) {\\n stop = callback(null, currentOp / totalOps);\\n if (stop) { break; }\\n lastPercent10 = percent10;\\n }\\n }\\n\\n if (i1 < N) { break; }\\n\\n arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10\\n\\n // for (var i = 0; i < p; i++)...\\n i0++;\\n if (i0 < p) {\\n state = 0;\\n break;\\n }\\n\\n b = [];\\n for (let i = 0; i < B.length; i++) {\\n b.push((B[i] >> 0) & 0xff);\\n b.push((B[i] >> 8) & 0xff);\\n b.push((B[i] >> 16) & 0xff);\\n b.push((B[i] >> 24) & 0xff);\\n }\\n\\n const derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen);\\n\\n // Send the result to the callback\\n if (callback) { callback(null, 1.0, derivedKey); }\\n\\n // Done; don't break (which would reschedule)\\n return derivedKey;\\n }\\n\\n // Schedule the next steps\\n if (callback) { nextTick(incrementalSMix); }\\n }\\n\\n // Run the smix state machine until completion\\n if (!callback) {\\n while (true) {\\n const derivedKey = incrementalSMix();\\n if (derivedKey != undefined) { return derivedKey; }\\n }\\n }\\n\\n // Bootstrap the async incremental smix\\n incrementalSMix();\\n }\\n\\n const lib = {\\n scrypt: function(password, salt, N, r, p, dkLen, progressCallback) {\\n return new Promise(function(resolve, reject) {\\n let lastProgress = 0;\\n if (progressCallback) { progressCallback(0); }\\n _scrypt(password, salt, N, r, p, dkLen, function(error, progress, key) {\\n if (error) {\\n reject(error);\\n } else if (key) {\\n if (progressCallback && lastProgress !== 1) {\\n progressCallback(1);\\n }\\n resolve(new Uint8Array(key));\\n } else if (progressCallback && progress !== lastProgress) {\\n lastProgress = progress;\\n return progressCallback(progress);\\n }\\n });\\n });\\n },\\n syncScrypt: function(password, salt, N, r, p, dkLen) {\\n return new Uint8Array(_scrypt(password, salt, N, r, p, dkLen));\\n }\\n };\\n\\n // node.js\\n if (true) {\\n module.exports = lib;\\n\\n // RequireJS/AMD\\n // http://www.requirejs.org/docs/api.html\\n // https://github.com/amdjs/amdjs-api/wiki/AMD\\n } else {}\\n\\n})(this);\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../timers-browserify/main.js */ \\\"./node_modules/timers-browserify/main.js\\\").setImmediate))\\n\\n//# sourceURL=webpack:///./node_modules/scrypt-js/scrypt.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/setimmediate/setImmediate.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/setimmediate/setImmediate.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\\n \\\"use strict\\\";\\n\\n if (global.setImmediate) {\\n return;\\n }\\n\\n var nextHandle = 1; // Spec says greater than zero\\n var tasksByHandle = {};\\n var currentlyRunningATask = false;\\n var doc = global.document;\\n var setImmediate;\\n\\n function addFromSetImmediateArguments(args) {\\n tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args);\\n return nextHandle++;\\n }\\n\\n // This function accepts the same arguments as setImmediate, but\\n // returns a function that requires no arguments.\\n function partiallyApplied(handler) {\\n var args = [].slice.call(arguments, 1);\\n return function() {\\n if (typeof handler === \\\"function\\\") {\\n handler.apply(undefined, args);\\n } else {\\n (new Function(\\\"\\\" + handler))();\\n }\\n };\\n }\\n\\n function runIfPresent(handle) {\\n // From the spec: \\\"Wait until any invocations of this algorithm started before this one have completed.\\\"\\n // So if we're currently running a task, we'll need to delay this invocation.\\n if (currentlyRunningATask) {\\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\\n // \\\"too much recursion\\\" error.\\n setTimeout(partiallyApplied(runIfPresent, handle), 0);\\n } else {\\n var task = tasksByHandle[handle];\\n if (task) {\\n currentlyRunningATask = true;\\n try {\\n task();\\n } finally {\\n clearImmediate(handle);\\n currentlyRunningATask = false;\\n }\\n }\\n }\\n }\\n\\n function clearImmediate(handle) {\\n delete tasksByHandle[handle];\\n }\\n\\n function installNextTickImplementation() {\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n process.nextTick(partiallyApplied(runIfPresent, handle));\\n return handle;\\n };\\n }\\n\\n function canUsePostMessage() {\\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\\n // where `global.postMessage` means something completely different and can't be used for this purpose.\\n if (global.postMessage && !global.importScripts) {\\n var postMessageIsAsynchronous = true;\\n var oldOnMessage = global.onmessage;\\n global.onmessage = function() {\\n postMessageIsAsynchronous = false;\\n };\\n global.postMessage(\\\"\\\", \\\"*\\\");\\n global.onmessage = oldOnMessage;\\n return postMessageIsAsynchronous;\\n }\\n }\\n\\n function installPostMessageImplementation() {\\n // Installs an event handler on `global` for the `message` event: see\\n // * https://developer.mozilla.org/en/DOM/window.postMessage\\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\\n\\n var messagePrefix = \\\"setImmediate$\\\" + Math.random() + \\\"$\\\";\\n var onGlobalMessage = function(event) {\\n if (event.source === global &&\\n typeof event.data === \\\"string\\\" &&\\n event.data.indexOf(messagePrefix) === 0) {\\n runIfPresent(+event.data.slice(messagePrefix.length));\\n }\\n };\\n\\n if (global.addEventListener) {\\n global.addEventListener(\\\"message\\\", onGlobalMessage, false);\\n } else {\\n global.attachEvent(\\\"onmessage\\\", onGlobalMessage);\\n }\\n\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n global.postMessage(messagePrefix + handle, \\\"*\\\");\\n return handle;\\n };\\n }\\n\\n function installMessageChannelImplementation() {\\n var channel = new MessageChannel();\\n channel.port1.onmessage = function(event) {\\n var handle = event.data;\\n runIfPresent(handle);\\n };\\n\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n channel.port2.postMessage(handle);\\n return handle;\\n };\\n }\\n\\n function installReadyStateChangeImplementation() {\\n var html = doc.documentElement;\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\\n var script = doc.createElement(\\\"script\\\");\\n script.onreadystatechange = function () {\\n runIfPresent(handle);\\n script.onreadystatechange = null;\\n html.removeChild(script);\\n script = null;\\n };\\n html.appendChild(script);\\n return handle;\\n };\\n }\\n\\n function installSetTimeoutImplementation() {\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n setTimeout(partiallyApplied(runIfPresent, handle), 0);\\n return handle;\\n };\\n }\\n\\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\\n\\n // Don't get fooled by e.g. browserify environments.\\n if ({}.toString.call(global.process) === \\\"[object process]\\\") {\\n // For Node.js before 0.9\\n installNextTickImplementation();\\n\\n } else if (canUsePostMessage()) {\\n // For non-IE10 modern browsers\\n installPostMessageImplementation();\\n\\n } else if (global.MessageChannel) {\\n // For web workers, where supported\\n installMessageChannelImplementation();\\n\\n } else if (doc && \\\"onreadystatechange\\\" in doc.createElement(\\\"script\\\")) {\\n // For IE 6–8\\n installReadyStateChangeImplementation();\\n\\n } else {\\n // For older browsers\\n installSetTimeoutImplementation();\\n }\\n\\n attachTo.setImmediate = setImmediate;\\n attachTo.clearImmediate = clearImmediate;\\n}(typeof self === \\\"undefined\\\" ? typeof global === \\\"undefined\\\" ? this : global : self));\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\"), __webpack_require__(/*! ./../process/browser.js */ \\\"./node_modules/process/browser.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/setimmediate/setImmediate.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/signed-varint/index.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/signed-varint/index.js ***!\n \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nexports.encode = function encode (v, b, o) {\\n v = v >= 0 ? v*2 : v*-2 - 1\\n var r = varint.encode(v, b, o)\\n encode.bytes = varint.encode.bytes\\n return r\\n}\\nexports.decode = function decode (b, o) {\\n var v = varint.decode(b, o)\\n decode.bytes = varint.decode.bytes\\n return v & 1 ? (v+1) / -2 : v / 2\\n}\\n\\nexports.encodingLength = function (v) {\\n return varint.encodingLength(v >= 0 ? v*2 : v*-2 - 1)\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/signed-varint/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/stable/stable.js\":\n/*!***************************************!*\\\n !*** ./node_modules/stable/stable.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"//! stable.js 0.1.8, https://github.com/Two-Screen/stable\\n//! © 2018 Angry Bytes and contributors. MIT licensed.\\n\\n(function (global, factory) {\\n true ? module.exports = factory() :\\n undefined;\\n}(this, (function () { 'use strict';\\n\\n // A stable array sort, because `Array#sort()` is not guaranteed stable.\\n // This is an implementation of merge sort, without recursion.\\n\\n var stable = function (arr, comp) {\\n return exec(arr.slice(), comp)\\n };\\n\\n stable.inplace = function (arr, comp) {\\n var result = exec(arr, comp);\\n\\n // This simply copies back if the result isn't in the original array,\\n // which happens on an odd number of passes.\\n if (result !== arr) {\\n pass(result, null, arr.length, arr);\\n }\\n\\n return arr\\n };\\n\\n // Execute the sort using the input array and a second buffer as work space.\\n // Returns one of those two, containing the final result.\\n function exec(arr, comp) {\\n if (typeof(comp) !== 'function') {\\n comp = function (a, b) {\\n return String(a).localeCompare(b)\\n };\\n }\\n\\n // Short-circuit when there's nothing to sort.\\n var len = arr.length;\\n if (len <= 1) {\\n return arr\\n }\\n\\n // Rather than dividing input, simply iterate chunks of 1, 2, 4, 8, etc.\\n // Chunks are the size of the left or right hand in merge sort.\\n // Stop when the left-hand covers all of the array.\\n var buffer = new Array(len);\\n for (var chk = 1; chk < len; chk *= 2) {\\n pass(arr, comp, chk, buffer);\\n\\n var tmp = arr;\\n arr = buffer;\\n buffer = tmp;\\n }\\n\\n return arr\\n }\\n\\n // Run a single pass with the given chunk size.\\n var pass = function (arr, comp, chk, result) {\\n var len = arr.length;\\n var i = 0;\\n // Step size / double chunk size.\\n var dbl = chk * 2;\\n // Bounds of the left and right chunks.\\n var l, r, e;\\n // Iterators over the left and right chunk.\\n var li, ri;\\n\\n // Iterate over pairs of chunks.\\n for (l = 0; l < len; l += dbl) {\\n r = l + chk;\\n e = r + chk;\\n if (r > len) r = len;\\n if (e > len) e = len;\\n\\n // Iterate both chunks in parallel.\\n li = l;\\n ri = r;\\n while (true) {\\n // Compare the chunks.\\n if (li < r && ri < e) {\\n // This works for a regular `sort()` compatible comparator,\\n // but also for a simple comparator like: `a > b`\\n if (comp(arr[li], arr[ri]) <= 0) {\\n result[i++] = arr[li++];\\n }\\n else {\\n result[i++] = arr[ri++];\\n }\\n }\\n // Nothing to compare, just flush what's left.\\n else if (li < r) {\\n result[i++] = arr[li++];\\n }\\n else if (ri < e) {\\n result[i++] = arr[ri++];\\n }\\n // Both iterators are at the chunk ends.\\n else {\\n break\\n }\\n }\\n }\\n };\\n\\n return stable;\\n\\n})));\\n\\n\\n//# sourceURL=webpack:///./node_modules/stable/stable.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/style-loader/index.js!./src/style.less\":\n/*!****************************************************!*\\\n !*** ./node_modules/style-loader!./src/style.less ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"\\nvar content = __webpack_require__(/*! !../node_modules/css-loader/dist/cjs.js??ref--5-0!../node_modules/less-loader/dist/cjs.js!./style.less */ \\\"./node_modules/css-loader/dist/cjs.js?!./node_modules/less-loader/dist/cjs.js!./src/style.less\\\");\\n\\nif(typeof content === 'string') content = [[module.i, content, '']];\\n\\nvar transform;\\nvar insertInto;\\n\\n\\n\\nvar options = {\\\"hmr\\\":true}\\n\\noptions.transform = transform\\noptions.insertInto = undefined;\\n\\nvar update = __webpack_require__(/*! ../node_modules/style-loader/lib/addStyles.js */ \\\"./node_modules/style-loader/lib/addStyles.js\\\")(content, options);\\n\\nif(content.locals) module.exports = content.locals;\\n\\nif(false) {}\\n\\n//# sourceURL=webpack:///./src/style.less?./node_modules/style-loader\");\n\n/***/ }),\n\n/***/ \"./node_modules/style-loader/lib/addStyles.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/style-loader/lib/addStyles.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/*\\n\\tMIT License http://www.opensource.org/licenses/mit-license.php\\n\\tAuthor Tobias Koppers @sokra\\n*/\\n\\nvar stylesInDom = {};\\n\\nvar\\tmemoize = function (fn) {\\n\\tvar memo;\\n\\n\\treturn function () {\\n\\t\\tif (typeof memo === \\\"undefined\\\") memo = fn.apply(this, arguments);\\n\\t\\treturn memo;\\n\\t};\\n};\\n\\nvar isOldIE = memoize(function () {\\n\\t// Test for IE <= 9 as proposed by Browserhacks\\n\\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\\n\\t// Tests for existence of standard globals is to allow style-loader\\n\\t// to operate correctly into non-standard environments\\n\\t// @see https://github.com/webpack-contrib/style-loader/issues/177\\n\\treturn window && document && document.all && !window.atob;\\n});\\n\\nvar getTarget = function (target, parent) {\\n if (parent){\\n return parent.querySelector(target);\\n }\\n return document.querySelector(target);\\n};\\n\\nvar getElement = (function (fn) {\\n\\tvar memo = {};\\n\\n\\treturn function(target, parent) {\\n // If passing function in options, then use it for resolve \\\"head\\\" element.\\n // Useful for Shadow Root style i.e\\n // {\\n // insertInto: function () { return document.querySelector(\\\"#foo\\\").shadowRoot }\\n // }\\n if (typeof target === 'function') {\\n return target();\\n }\\n if (typeof memo[target] === \\\"undefined\\\") {\\n\\t\\t\\tvar styleTarget = getTarget.call(this, target, parent);\\n\\t\\t\\t// Special case to return head of iframe instead of iframe itself\\n\\t\\t\\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\\n\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\t// This will throw an exception if access to iframe is blocked\\n\\t\\t\\t\\t\\t// due to cross-origin restrictions\\n\\t\\t\\t\\t\\tstyleTarget = styleTarget.contentDocument.head;\\n\\t\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\t\\tstyleTarget = null;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tmemo[target] = styleTarget;\\n\\t\\t}\\n\\t\\treturn memo[target]\\n\\t};\\n})();\\n\\nvar singleton = null;\\nvar\\tsingletonCounter = 0;\\nvar\\tstylesInsertedAtTop = [];\\n\\nvar\\tfixUrls = __webpack_require__(/*! ./urls */ \\\"./node_modules/style-loader/lib/urls.js\\\");\\n\\nmodule.exports = function(list, options) {\\n\\tif (typeof DEBUG !== \\\"undefined\\\" && DEBUG) {\\n\\t\\tif (typeof document !== \\\"object\\\") throw new Error(\\\"The style-loader cannot be used in a non-browser environment\\\");\\n\\t}\\n\\n\\toptions = options || {};\\n\\n\\toptions.attrs = typeof options.attrs === \\\"object\\\" ? options.attrs : {};\\n\\n\\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\\n\\t// tags it will allow on a page\\n\\tif (!options.singleton && typeof options.singleton !== \\\"boolean\\\") options.singleton = isOldIE();\\n\\n\\t// By default, add <style> tags to the <head> element\\n if (!options.insertInto) options.insertInto = \\\"head\\\";\\n\\n\\t// By default, add <style> tags to the bottom of the target\\n\\tif (!options.insertAt) options.insertAt = \\\"bottom\\\";\\n\\n\\tvar styles = listToStyles(list, options);\\n\\n\\taddStylesToDom(styles, options);\\n\\n\\treturn function update (newList) {\\n\\t\\tvar mayRemove = [];\\n\\n\\t\\tfor (var i = 0; i < styles.length; i++) {\\n\\t\\t\\tvar item = styles[i];\\n\\t\\t\\tvar domStyle = stylesInDom[item.id];\\n\\n\\t\\t\\tdomStyle.refs--;\\n\\t\\t\\tmayRemove.push(domStyle);\\n\\t\\t}\\n\\n\\t\\tif(newList) {\\n\\t\\t\\tvar newStyles = listToStyles(newList, options);\\n\\t\\t\\taddStylesToDom(newStyles, options);\\n\\t\\t}\\n\\n\\t\\tfor (var i = 0; i < mayRemove.length; i++) {\\n\\t\\t\\tvar domStyle = mayRemove[i];\\n\\n\\t\\t\\tif(domStyle.refs === 0) {\\n\\t\\t\\t\\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\\n\\n\\t\\t\\t\\tdelete stylesInDom[domStyle.id];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n};\\n\\nfunction addStylesToDom (styles, options) {\\n\\tfor (var i = 0; i < styles.length; i++) {\\n\\t\\tvar item = styles[i];\\n\\t\\tvar domStyle = stylesInDom[item.id];\\n\\n\\t\\tif(domStyle) {\\n\\t\\t\\tdomStyle.refs++;\\n\\n\\t\\t\\tfor(var j = 0; j < domStyle.parts.length; j++) {\\n\\t\\t\\t\\tdomStyle.parts[j](item.parts[j]);\\n\\t\\t\\t}\\n\\n\\t\\t\\tfor(; j < item.parts.length; j++) {\\n\\t\\t\\t\\tdomStyle.parts.push(addStyle(item.parts[j], options));\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tvar parts = [];\\n\\n\\t\\t\\tfor(var j = 0; j < item.parts.length; j++) {\\n\\t\\t\\t\\tparts.push(addStyle(item.parts[j], options));\\n\\t\\t\\t}\\n\\n\\t\\t\\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction listToStyles (list, options) {\\n\\tvar styles = [];\\n\\tvar newStyles = {};\\n\\n\\tfor (var i = 0; i < list.length; i++) {\\n\\t\\tvar item = list[i];\\n\\t\\tvar id = options.base ? item[0] + options.base : item[0];\\n\\t\\tvar css = item[1];\\n\\t\\tvar media = item[2];\\n\\t\\tvar sourceMap = item[3];\\n\\t\\tvar part = {css: css, media: media, sourceMap: sourceMap};\\n\\n\\t\\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\\n\\t\\telse newStyles[id].parts.push(part);\\n\\t}\\n\\n\\treturn styles;\\n}\\n\\nfunction insertStyleElement (options, style) {\\n\\tvar target = getElement(options.insertInto)\\n\\n\\tif (!target) {\\n\\t\\tthrow new Error(\\\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\\\");\\n\\t}\\n\\n\\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\\n\\n\\tif (options.insertAt === \\\"top\\\") {\\n\\t\\tif (!lastStyleElementInsertedAtTop) {\\n\\t\\t\\ttarget.insertBefore(style, target.firstChild);\\n\\t\\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\\n\\t\\t\\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\\n\\t\\t} else {\\n\\t\\t\\ttarget.appendChild(style);\\n\\t\\t}\\n\\t\\tstylesInsertedAtTop.push(style);\\n\\t} else if (options.insertAt === \\\"bottom\\\") {\\n\\t\\ttarget.appendChild(style);\\n\\t} else if (typeof options.insertAt === \\\"object\\\" && options.insertAt.before) {\\n\\t\\tvar nextSibling = getElement(options.insertAt.before, target);\\n\\t\\ttarget.insertBefore(style, nextSibling);\\n\\t} else {\\n\\t\\tthrow new Error(\\\"[Style Loader]\\\\n\\\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\\\n Must be 'top', 'bottom', or Object.\\\\n (https://github.com/webpack-contrib/style-loader#insertat)\\\\n\\\");\\n\\t}\\n}\\n\\nfunction removeStyleElement (style) {\\n\\tif (style.parentNode === null) return false;\\n\\tstyle.parentNode.removeChild(style);\\n\\n\\tvar idx = stylesInsertedAtTop.indexOf(style);\\n\\tif(idx >= 0) {\\n\\t\\tstylesInsertedAtTop.splice(idx, 1);\\n\\t}\\n}\\n\\nfunction createStyleElement (options) {\\n\\tvar style = document.createElement(\\\"style\\\");\\n\\n\\tif(options.attrs.type === undefined) {\\n\\t\\toptions.attrs.type = \\\"text/css\\\";\\n\\t}\\n\\n\\tif(options.attrs.nonce === undefined) {\\n\\t\\tvar nonce = getNonce();\\n\\t\\tif (nonce) {\\n\\t\\t\\toptions.attrs.nonce = nonce;\\n\\t\\t}\\n\\t}\\n\\n\\taddAttrs(style, options.attrs);\\n\\tinsertStyleElement(options, style);\\n\\n\\treturn style;\\n}\\n\\nfunction createLinkElement (options) {\\n\\tvar link = document.createElement(\\\"link\\\");\\n\\n\\tif(options.attrs.type === undefined) {\\n\\t\\toptions.attrs.type = \\\"text/css\\\";\\n\\t}\\n\\toptions.attrs.rel = \\\"stylesheet\\\";\\n\\n\\taddAttrs(link, options.attrs);\\n\\tinsertStyleElement(options, link);\\n\\n\\treturn link;\\n}\\n\\nfunction addAttrs (el, attrs) {\\n\\tObject.keys(attrs).forEach(function (key) {\\n\\t\\tel.setAttribute(key, attrs[key]);\\n\\t});\\n}\\n\\nfunction getNonce() {\\n\\tif (false) {}\\n\\n\\treturn __webpack_require__.nc;\\n}\\n\\nfunction addStyle (obj, options) {\\n\\tvar style, update, remove, result;\\n\\n\\t// If a transform function was defined, run it on the css\\n\\tif (options.transform && obj.css) {\\n\\t result = typeof options.transform === 'function'\\n\\t\\t ? options.transform(obj.css) \\n\\t\\t : options.transform.default(obj.css);\\n\\n\\t if (result) {\\n\\t \\t// If transform returns a value, use that instead of the original css.\\n\\t \\t// This allows running runtime transformations on the css.\\n\\t \\tobj.css = result;\\n\\t } else {\\n\\t \\t// If the transform function returns a falsy value, don't add this css.\\n\\t \\t// This allows conditional loading of css\\n\\t \\treturn function() {\\n\\t \\t\\t// noop\\n\\t \\t};\\n\\t }\\n\\t}\\n\\n\\tif (options.singleton) {\\n\\t\\tvar styleIndex = singletonCounter++;\\n\\n\\t\\tstyle = singleton || (singleton = createStyleElement(options));\\n\\n\\t\\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\\n\\t\\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\\n\\n\\t} else if (\\n\\t\\tobj.sourceMap &&\\n\\t\\ttypeof URL === \\\"function\\\" &&\\n\\t\\ttypeof URL.createObjectURL === \\\"function\\\" &&\\n\\t\\ttypeof URL.revokeObjectURL === \\\"function\\\" &&\\n\\t\\ttypeof Blob === \\\"function\\\" &&\\n\\t\\ttypeof btoa === \\\"function\\\"\\n\\t) {\\n\\t\\tstyle = createLinkElement(options);\\n\\t\\tupdate = updateLink.bind(null, style, options);\\n\\t\\tremove = function () {\\n\\t\\t\\tremoveStyleElement(style);\\n\\n\\t\\t\\tif(style.href) URL.revokeObjectURL(style.href);\\n\\t\\t};\\n\\t} else {\\n\\t\\tstyle = createStyleElement(options);\\n\\t\\tupdate = applyToTag.bind(null, style);\\n\\t\\tremove = function () {\\n\\t\\t\\tremoveStyleElement(style);\\n\\t\\t};\\n\\t}\\n\\n\\tupdate(obj);\\n\\n\\treturn function updateStyle (newObj) {\\n\\t\\tif (newObj) {\\n\\t\\t\\tif (\\n\\t\\t\\t\\tnewObj.css === obj.css &&\\n\\t\\t\\t\\tnewObj.media === obj.media &&\\n\\t\\t\\t\\tnewObj.sourceMap === obj.sourceMap\\n\\t\\t\\t) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tupdate(obj = newObj);\\n\\t\\t} else {\\n\\t\\t\\tremove();\\n\\t\\t}\\n\\t};\\n}\\n\\nvar replaceText = (function () {\\n\\tvar textStore = [];\\n\\n\\treturn function (index, replacement) {\\n\\t\\ttextStore[index] = replacement;\\n\\n\\t\\treturn textStore.filter(Boolean).join('\\\\n');\\n\\t};\\n})();\\n\\nfunction applyToSingletonTag (style, index, remove, obj) {\\n\\tvar css = remove ? \\\"\\\" : obj.css;\\n\\n\\tif (style.styleSheet) {\\n\\t\\tstyle.styleSheet.cssText = replaceText(index, css);\\n\\t} else {\\n\\t\\tvar cssNode = document.createTextNode(css);\\n\\t\\tvar childNodes = style.childNodes;\\n\\n\\t\\tif (childNodes[index]) style.removeChild(childNodes[index]);\\n\\n\\t\\tif (childNodes.length) {\\n\\t\\t\\tstyle.insertBefore(cssNode, childNodes[index]);\\n\\t\\t} else {\\n\\t\\t\\tstyle.appendChild(cssNode);\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction applyToTag (style, obj) {\\n\\tvar css = obj.css;\\n\\tvar media = obj.media;\\n\\n\\tif(media) {\\n\\t\\tstyle.setAttribute(\\\"media\\\", media)\\n\\t}\\n\\n\\tif(style.styleSheet) {\\n\\t\\tstyle.styleSheet.cssText = css;\\n\\t} else {\\n\\t\\twhile(style.firstChild) {\\n\\t\\t\\tstyle.removeChild(style.firstChild);\\n\\t\\t}\\n\\n\\t\\tstyle.appendChild(document.createTextNode(css));\\n\\t}\\n}\\n\\nfunction updateLink (link, options, obj) {\\n\\tvar css = obj.css;\\n\\tvar sourceMap = obj.sourceMap;\\n\\n\\t/*\\n\\t\\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\\n\\t\\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\\n\\t\\ton by default. Otherwise default to the convertToAbsoluteUrls option\\n\\t\\tdirectly\\n\\t*/\\n\\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\\n\\n\\tif (options.convertToAbsoluteUrls || autoFixUrls) {\\n\\t\\tcss = fixUrls(css);\\n\\t}\\n\\n\\tif (sourceMap) {\\n\\t\\t// http://stackoverflow.com/a/26603875\\n\\t\\tcss += \\\"\\\\n/*# sourceMappingURL=data:application/json;base64,\\\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \\\" */\\\";\\n\\t}\\n\\n\\tvar blob = new Blob([css], { type: \\\"text/css\\\" });\\n\\n\\tvar oldSrc = link.href;\\n\\n\\tlink.href = URL.createObjectURL(blob);\\n\\n\\tif(oldSrc) URL.revokeObjectURL(oldSrc);\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/style-loader/lib/addStyles.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/style-loader/lib/urls.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/style-loader/lib/urls.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"\\n/**\\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\\n * embed the css on the page. This breaks all relative urls because now they are relative to a\\n * bundle instead of the current page.\\n *\\n * One solution is to only use full urls, but that may be impossible.\\n *\\n * Instead, this function \\\"fixes\\\" the relative urls to be absolute according to the current page location.\\n *\\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\\n *\\n */\\n\\nmodule.exports = function (css) {\\n // get current location\\n var location = typeof window !== \\\"undefined\\\" && window.location;\\n\\n if (!location) {\\n throw new Error(\\\"fixUrls requires window.location\\\");\\n }\\n\\n\\t// blank or null?\\n\\tif (!css || typeof css !== \\\"string\\\") {\\n\\t return css;\\n }\\n\\n var baseUrl = location.protocol + \\\"//\\\" + location.host;\\n var currentDir = baseUrl + location.pathname.replace(/\\\\/[^\\\\/]*$/, \\\"/\\\");\\n\\n\\t// convert each url(...)\\n\\t/*\\n\\tThis regular expression is just a way to recursively match brackets within\\n\\ta string.\\n\\n\\t /url\\\\s*\\\\( = Match on the word \\\"url\\\" with any whitespace after it and then a parens\\n\\t ( = Start a capturing group\\n\\t (?: = Start a non-capturing group\\n\\t [^)(] = Match anything that isn't a parentheses\\n\\t | = OR\\n\\t \\\\( = Match a start parentheses\\n\\t (?: = Start another non-capturing groups\\n\\t [^)(]+ = Match anything that isn't a parentheses\\n\\t | = OR\\n\\t \\\\( = Match a start parentheses\\n\\t [^)(]* = Match anything that isn't a parentheses\\n\\t \\\\) = Match a end parentheses\\n\\t ) = End Group\\n *\\\\) = Match anything and then a close parens\\n ) = Close non-capturing group\\n * = Match anything\\n ) = Close capturing group\\n\\t \\\\) = Match a close parens\\n\\n\\t /gi = Get all matches, not the first. Be case insensitive.\\n\\t */\\n\\tvar fixedCss = css.replace(/url\\\\s*\\\\(((?:[^)(]|\\\\((?:[^)(]+|\\\\([^)(]*\\\\))*\\\\))*)\\\\)/gi, function(fullMatch, origUrl) {\\n\\t\\t// strip quotes (if they exist)\\n\\t\\tvar unquotedOrigUrl = origUrl\\n\\t\\t\\t.trim()\\n\\t\\t\\t.replace(/^\\\"(.*)\\\"$/, function(o, $1){ return $1; })\\n\\t\\t\\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\\n\\n\\t\\t// already a full url? no change\\n\\t\\tif (/^(#|data:|http:\\\\/\\\\/|https:\\\\/\\\\/|file:\\\\/\\\\/\\\\/|\\\\s*$)/i.test(unquotedOrigUrl)) {\\n\\t\\t return fullMatch;\\n\\t\\t}\\n\\n\\t\\t// convert the url to a full url\\n\\t\\tvar newUrl;\\n\\n\\t\\tif (unquotedOrigUrl.indexOf(\\\"//\\\") === 0) {\\n\\t\\t \\t//TODO: should we add protocol?\\n\\t\\t\\tnewUrl = unquotedOrigUrl;\\n\\t\\t} else if (unquotedOrigUrl.indexOf(\\\"/\\\") === 0) {\\n\\t\\t\\t// path should be relative to the base url\\n\\t\\t\\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\\n\\t\\t} else {\\n\\t\\t\\t// path should be relative to current directory\\n\\t\\t\\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\\\.\\\\//, \\\"\\\"); // Strip leading './'\\n\\t\\t}\\n\\n\\t\\t// send back the fixed url(...)\\n\\t\\treturn \\\"url(\\\" + JSON.stringify(newUrl) + \\\")\\\";\\n\\t});\\n\\n\\t// send back the fixed css\\n\\treturn fixedCss;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/style-loader/lib/urls.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/timers-browserify/main.js\":\n/*!************************************************!*\\\n !*** ./node_modules/timers-browserify/main.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== \\\"undefined\\\" && global) ||\\n (typeof self !== \\\"undefined\\\" && self) ||\\n window;\\nvar apply = Function.prototype.apply;\\n\\n// DOM APIs, for completeness\\n\\nexports.setTimeout = function() {\\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\\n};\\nexports.setInterval = function() {\\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\\n};\\nexports.clearTimeout =\\nexports.clearInterval = function(timeout) {\\n if (timeout) {\\n timeout.close();\\n }\\n};\\n\\nfunction Timeout(id, clearFn) {\\n this._id = id;\\n this._clearFn = clearFn;\\n}\\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\\nTimeout.prototype.close = function() {\\n this._clearFn.call(scope, this._id);\\n};\\n\\n// Does not start the time, just sets up the members needed.\\nexports.enroll = function(item, msecs) {\\n clearTimeout(item._idleTimeoutId);\\n item._idleTimeout = msecs;\\n};\\n\\nexports.unenroll = function(item) {\\n clearTimeout(item._idleTimeoutId);\\n item._idleTimeout = -1;\\n};\\n\\nexports._unrefActive = exports.active = function(item) {\\n clearTimeout(item._idleTimeoutId);\\n\\n var msecs = item._idleTimeout;\\n if (msecs >= 0) {\\n item._idleTimeoutId = setTimeout(function onTimeout() {\\n if (item._onTimeout)\\n item._onTimeout();\\n }, msecs);\\n }\\n};\\n\\n// setimmediate attaches itself to the global object\\n__webpack_require__(/*! setimmediate */ \\\"./node_modules/setimmediate/setImmediate.js\\\");\\n// On some exotic environments, it's not clear which object `setimmediate` was\\n// able to install onto. Search each possibility in the same order as the\\n// `setimmediate` library.\\nexports.setImmediate = (typeof self !== \\\"undefined\\\" && self.setImmediate) ||\\n (typeof global !== \\\"undefined\\\" && global.setImmediate) ||\\n (this && this.setImmediate);\\nexports.clearImmediate = (typeof self !== \\\"undefined\\\" && self.clearImmediate) ||\\n (typeof global !== \\\"undefined\\\" && global.clearImmediate) ||\\n (this && this.clearImmediate);\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/timers-browserify/main.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/tweetnacl-util/nacl-util.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/tweetnacl-util/nacl-util.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {// Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri.\\n// Public domain.\\n(function(root, f) {\\n 'use strict';\\n if ( true && module.exports) module.exports = f();\\n else if (root.nacl) root.nacl.util = f();\\n else {\\n root.nacl = {};\\n root.nacl.util = f();\\n }\\n}(this, function() {\\n 'use strict';\\n\\n var util = {};\\n\\n function validateBase64(s) {\\n if (!(/^(?:[A-Za-z0-9+\\\\/]{2}[A-Za-z0-9+\\\\/]{2})*(?:[A-Za-z0-9+\\\\/]{2}==|[A-Za-z0-9+\\\\/]{3}=)?$/.test(s))) {\\n throw new TypeError('invalid encoding');\\n }\\n }\\n\\n util.decodeUTF8 = function(s) {\\n if (typeof s !== 'string') throw new TypeError('expected string');\\n var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);\\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\\n return b;\\n };\\n\\n util.encodeUTF8 = function(arr) {\\n var i, s = [];\\n for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i]));\\n return decodeURIComponent(escape(s.join('')));\\n };\\n\\n if (typeof atob === 'undefined') {\\n // Node.js\\n\\n if (typeof Buffer.from !== 'undefined') {\\n // Node v6 and later\\n util.encodeBase64 = function (arr) { // v6 and later\\n return Buffer.from(arr).toString('base64');\\n };\\n\\n util.decodeBase64 = function (s) {\\n validateBase64(s);\\n return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0));\\n };\\n\\n } else {\\n // Node earlier than v6\\n util.encodeBase64 = function (arr) { // v6 and later\\n return (new Buffer(arr)).toString('base64');\\n };\\n\\n util.decodeBase64 = function(s) {\\n validateBase64(s);\\n return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0));\\n };\\n }\\n\\n } else {\\n // Browsers\\n\\n util.encodeBase64 = function(arr) {\\n var i, s = [], len = arr.length;\\n for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i]));\\n return btoa(s.join(''));\\n };\\n\\n util.decodeBase64 = function(s) {\\n validateBase64(s);\\n var i, d = atob(s), b = new Uint8Array(d.length);\\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\\n return b;\\n };\\n\\n }\\n\\n return util;\\n\\n}));\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/tweetnacl-util/nacl-util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/tweetnacl/nacl-fast.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/tweetnacl/nacl-fast.js ***!\n \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"(function(nacl) {\\n'use strict';\\n\\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\\n// Public domain.\\n//\\n// Implementation derived from TweetNaCl version 20140427.\\n// See for details: http://tweetnacl.cr.yp.to/\\n\\nvar gf = function(init) {\\n var i, r = new Float64Array(16);\\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\\n return r;\\n};\\n\\n// Pluggable, initialized in high-level API below.\\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\\n\\nvar _0 = new Uint8Array(16);\\nvar _9 = new Uint8Array(32); _9[0] = 9;\\n\\nvar gf0 = gf(),\\n gf1 = gf([1]),\\n _121665 = gf([0xdb41, 1]),\\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\\n\\nfunction ts64(x, i, h, l) {\\n x[i] = (h >> 24) & 0xff;\\n x[i+1] = (h >> 16) & 0xff;\\n x[i+2] = (h >> 8) & 0xff;\\n x[i+3] = h & 0xff;\\n x[i+4] = (l >> 24) & 0xff;\\n x[i+5] = (l >> 16) & 0xff;\\n x[i+6] = (l >> 8) & 0xff;\\n x[i+7] = l & 0xff;\\n}\\n\\nfunction vn(x, xi, y, yi, n) {\\n var i,d = 0;\\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\\n return (1 & ((d - 1) >>> 8)) - 1;\\n}\\n\\nfunction crypto_verify_16(x, xi, y, yi) {\\n return vn(x,xi,y,yi,16);\\n}\\n\\nfunction crypto_verify_32(x, xi, y, yi) {\\n return vn(x,xi,y,yi,32);\\n}\\n\\nfunction core_salsa20(o, p, k, c) {\\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\\n\\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\\n x15 = j15, u;\\n\\n for (var i = 0; i < 20; i += 2) {\\n u = x0 + x12 | 0;\\n x4 ^= u<<7 | u>>>(32-7);\\n u = x4 + x0 | 0;\\n x8 ^= u<<9 | u>>>(32-9);\\n u = x8 + x4 | 0;\\n x12 ^= u<<13 | u>>>(32-13);\\n u = x12 + x8 | 0;\\n x0 ^= u<<18 | u>>>(32-18);\\n\\n u = x5 + x1 | 0;\\n x9 ^= u<<7 | u>>>(32-7);\\n u = x9 + x5 | 0;\\n x13 ^= u<<9 | u>>>(32-9);\\n u = x13 + x9 | 0;\\n x1 ^= u<<13 | u>>>(32-13);\\n u = x1 + x13 | 0;\\n x5 ^= u<<18 | u>>>(32-18);\\n\\n u = x10 + x6 | 0;\\n x14 ^= u<<7 | u>>>(32-7);\\n u = x14 + x10 | 0;\\n x2 ^= u<<9 | u>>>(32-9);\\n u = x2 + x14 | 0;\\n x6 ^= u<<13 | u>>>(32-13);\\n u = x6 + x2 | 0;\\n x10 ^= u<<18 | u>>>(32-18);\\n\\n u = x15 + x11 | 0;\\n x3 ^= u<<7 | u>>>(32-7);\\n u = x3 + x15 | 0;\\n x7 ^= u<<9 | u>>>(32-9);\\n u = x7 + x3 | 0;\\n x11 ^= u<<13 | u>>>(32-13);\\n u = x11 + x7 | 0;\\n x15 ^= u<<18 | u>>>(32-18);\\n\\n u = x0 + x3 | 0;\\n x1 ^= u<<7 | u>>>(32-7);\\n u = x1 + x0 | 0;\\n x2 ^= u<<9 | u>>>(32-9);\\n u = x2 + x1 | 0;\\n x3 ^= u<<13 | u>>>(32-13);\\n u = x3 + x2 | 0;\\n x0 ^= u<<18 | u>>>(32-18);\\n\\n u = x5 + x4 | 0;\\n x6 ^= u<<7 | u>>>(32-7);\\n u = x6 + x5 | 0;\\n x7 ^= u<<9 | u>>>(32-9);\\n u = x7 + x6 | 0;\\n x4 ^= u<<13 | u>>>(32-13);\\n u = x4 + x7 | 0;\\n x5 ^= u<<18 | u>>>(32-18);\\n\\n u = x10 + x9 | 0;\\n x11 ^= u<<7 | u>>>(32-7);\\n u = x11 + x10 | 0;\\n x8 ^= u<<9 | u>>>(32-9);\\n u = x8 + x11 | 0;\\n x9 ^= u<<13 | u>>>(32-13);\\n u = x9 + x8 | 0;\\n x10 ^= u<<18 | u>>>(32-18);\\n\\n u = x15 + x14 | 0;\\n x12 ^= u<<7 | u>>>(32-7);\\n u = x12 + x15 | 0;\\n x13 ^= u<<9 | u>>>(32-9);\\n u = x13 + x12 | 0;\\n x14 ^= u<<13 | u>>>(32-13);\\n u = x14 + x13 | 0;\\n x15 ^= u<<18 | u>>>(32-18);\\n }\\n x0 = x0 + j0 | 0;\\n x1 = x1 + j1 | 0;\\n x2 = x2 + j2 | 0;\\n x3 = x3 + j3 | 0;\\n x4 = x4 + j4 | 0;\\n x5 = x5 + j5 | 0;\\n x6 = x6 + j6 | 0;\\n x7 = x7 + j7 | 0;\\n x8 = x8 + j8 | 0;\\n x9 = x9 + j9 | 0;\\n x10 = x10 + j10 | 0;\\n x11 = x11 + j11 | 0;\\n x12 = x12 + j12 | 0;\\n x13 = x13 + j13 | 0;\\n x14 = x14 + j14 | 0;\\n x15 = x15 + j15 | 0;\\n\\n o[ 0] = x0 >>> 0 & 0xff;\\n o[ 1] = x0 >>> 8 & 0xff;\\n o[ 2] = x0 >>> 16 & 0xff;\\n o[ 3] = x0 >>> 24 & 0xff;\\n\\n o[ 4] = x1 >>> 0 & 0xff;\\n o[ 5] = x1 >>> 8 & 0xff;\\n o[ 6] = x1 >>> 16 & 0xff;\\n o[ 7] = x1 >>> 24 & 0xff;\\n\\n o[ 8] = x2 >>> 0 & 0xff;\\n o[ 9] = x2 >>> 8 & 0xff;\\n o[10] = x2 >>> 16 & 0xff;\\n o[11] = x2 >>> 24 & 0xff;\\n\\n o[12] = x3 >>> 0 & 0xff;\\n o[13] = x3 >>> 8 & 0xff;\\n o[14] = x3 >>> 16 & 0xff;\\n o[15] = x3 >>> 24 & 0xff;\\n\\n o[16] = x4 >>> 0 & 0xff;\\n o[17] = x4 >>> 8 & 0xff;\\n o[18] = x4 >>> 16 & 0xff;\\n o[19] = x4 >>> 24 & 0xff;\\n\\n o[20] = x5 >>> 0 & 0xff;\\n o[21] = x5 >>> 8 & 0xff;\\n o[22] = x5 >>> 16 & 0xff;\\n o[23] = x5 >>> 24 & 0xff;\\n\\n o[24] = x6 >>> 0 & 0xff;\\n o[25] = x6 >>> 8 & 0xff;\\n o[26] = x6 >>> 16 & 0xff;\\n o[27] = x6 >>> 24 & 0xff;\\n\\n o[28] = x7 >>> 0 & 0xff;\\n o[29] = x7 >>> 8 & 0xff;\\n o[30] = x7 >>> 16 & 0xff;\\n o[31] = x7 >>> 24 & 0xff;\\n\\n o[32] = x8 >>> 0 & 0xff;\\n o[33] = x8 >>> 8 & 0xff;\\n o[34] = x8 >>> 16 & 0xff;\\n o[35] = x8 >>> 24 & 0xff;\\n\\n o[36] = x9 >>> 0 & 0xff;\\n o[37] = x9 >>> 8 & 0xff;\\n o[38] = x9 >>> 16 & 0xff;\\n o[39] = x9 >>> 24 & 0xff;\\n\\n o[40] = x10 >>> 0 & 0xff;\\n o[41] = x10 >>> 8 & 0xff;\\n o[42] = x10 >>> 16 & 0xff;\\n o[43] = x10 >>> 24 & 0xff;\\n\\n o[44] = x11 >>> 0 & 0xff;\\n o[45] = x11 >>> 8 & 0xff;\\n o[46] = x11 >>> 16 & 0xff;\\n o[47] = x11 >>> 24 & 0xff;\\n\\n o[48] = x12 >>> 0 & 0xff;\\n o[49] = x12 >>> 8 & 0xff;\\n o[50] = x12 >>> 16 & 0xff;\\n o[51] = x12 >>> 24 & 0xff;\\n\\n o[52] = x13 >>> 0 & 0xff;\\n o[53] = x13 >>> 8 & 0xff;\\n o[54] = x13 >>> 16 & 0xff;\\n o[55] = x13 >>> 24 & 0xff;\\n\\n o[56] = x14 >>> 0 & 0xff;\\n o[57] = x14 >>> 8 & 0xff;\\n o[58] = x14 >>> 16 & 0xff;\\n o[59] = x14 >>> 24 & 0xff;\\n\\n o[60] = x15 >>> 0 & 0xff;\\n o[61] = x15 >>> 8 & 0xff;\\n o[62] = x15 >>> 16 & 0xff;\\n o[63] = x15 >>> 24 & 0xff;\\n}\\n\\nfunction core_hsalsa20(o,p,k,c) {\\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\\n\\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\\n x15 = j15, u;\\n\\n for (var i = 0; i < 20; i += 2) {\\n u = x0 + x12 | 0;\\n x4 ^= u<<7 | u>>>(32-7);\\n u = x4 + x0 | 0;\\n x8 ^= u<<9 | u>>>(32-9);\\n u = x8 + x4 | 0;\\n x12 ^= u<<13 | u>>>(32-13);\\n u = x12 + x8 | 0;\\n x0 ^= u<<18 | u>>>(32-18);\\n\\n u = x5 + x1 | 0;\\n x9 ^= u<<7 | u>>>(32-7);\\n u = x9 + x5 | 0;\\n x13 ^= u<<9 | u>>>(32-9);\\n u = x13 + x9 | 0;\\n x1 ^= u<<13 | u>>>(32-13);\\n u = x1 + x13 | 0;\\n x5 ^= u<<18 | u>>>(32-18);\\n\\n u = x10 + x6 | 0;\\n x14 ^= u<<7 | u>>>(32-7);\\n u = x14 + x10 | 0;\\n x2 ^= u<<9 | u>>>(32-9);\\n u = x2 + x14 | 0;\\n x6 ^= u<<13 | u>>>(32-13);\\n u = x6 + x2 | 0;\\n x10 ^= u<<18 | u>>>(32-18);\\n\\n u = x15 + x11 | 0;\\n x3 ^= u<<7 | u>>>(32-7);\\n u = x3 + x15 | 0;\\n x7 ^= u<<9 | u>>>(32-9);\\n u = x7 + x3 | 0;\\n x11 ^= u<<13 | u>>>(32-13);\\n u = x11 + x7 | 0;\\n x15 ^= u<<18 | u>>>(32-18);\\n\\n u = x0 + x3 | 0;\\n x1 ^= u<<7 | u>>>(32-7);\\n u = x1 + x0 | 0;\\n x2 ^= u<<9 | u>>>(32-9);\\n u = x2 + x1 | 0;\\n x3 ^= u<<13 | u>>>(32-13);\\n u = x3 + x2 | 0;\\n x0 ^= u<<18 | u>>>(32-18);\\n\\n u = x5 + x4 | 0;\\n x6 ^= u<<7 | u>>>(32-7);\\n u = x6 + x5 | 0;\\n x7 ^= u<<9 | u>>>(32-9);\\n u = x7 + x6 | 0;\\n x4 ^= u<<13 | u>>>(32-13);\\n u = x4 + x7 | 0;\\n x5 ^= u<<18 | u>>>(32-18);\\n\\n u = x10 + x9 | 0;\\n x11 ^= u<<7 | u>>>(32-7);\\n u = x11 + x10 | 0;\\n x8 ^= u<<9 | u>>>(32-9);\\n u = x8 + x11 | 0;\\n x9 ^= u<<13 | u>>>(32-13);\\n u = x9 + x8 | 0;\\n x10 ^= u<<18 | u>>>(32-18);\\n\\n u = x15 + x14 | 0;\\n x12 ^= u<<7 | u>>>(32-7);\\n u = x12 + x15 | 0;\\n x13 ^= u<<9 | u>>>(32-9);\\n u = x13 + x12 | 0;\\n x14 ^= u<<13 | u>>>(32-13);\\n u = x14 + x13 | 0;\\n x15 ^= u<<18 | u>>>(32-18);\\n }\\n\\n o[ 0] = x0 >>> 0 & 0xff;\\n o[ 1] = x0 >>> 8 & 0xff;\\n o[ 2] = x0 >>> 16 & 0xff;\\n o[ 3] = x0 >>> 24 & 0xff;\\n\\n o[ 4] = x5 >>> 0 & 0xff;\\n o[ 5] = x5 >>> 8 & 0xff;\\n o[ 6] = x5 >>> 16 & 0xff;\\n o[ 7] = x5 >>> 24 & 0xff;\\n\\n o[ 8] = x10 >>> 0 & 0xff;\\n o[ 9] = x10 >>> 8 & 0xff;\\n o[10] = x10 >>> 16 & 0xff;\\n o[11] = x10 >>> 24 & 0xff;\\n\\n o[12] = x15 >>> 0 & 0xff;\\n o[13] = x15 >>> 8 & 0xff;\\n o[14] = x15 >>> 16 & 0xff;\\n o[15] = x15 >>> 24 & 0xff;\\n\\n o[16] = x6 >>> 0 & 0xff;\\n o[17] = x6 >>> 8 & 0xff;\\n o[18] = x6 >>> 16 & 0xff;\\n o[19] = x6 >>> 24 & 0xff;\\n\\n o[20] = x7 >>> 0 & 0xff;\\n o[21] = x7 >>> 8 & 0xff;\\n o[22] = x7 >>> 16 & 0xff;\\n o[23] = x7 >>> 24 & 0xff;\\n\\n o[24] = x8 >>> 0 & 0xff;\\n o[25] = x8 >>> 8 & 0xff;\\n o[26] = x8 >>> 16 & 0xff;\\n o[27] = x8 >>> 24 & 0xff;\\n\\n o[28] = x9 >>> 0 & 0xff;\\n o[29] = x9 >>> 8 & 0xff;\\n o[30] = x9 >>> 16 & 0xff;\\n o[31] = x9 >>> 24 & 0xff;\\n}\\n\\nfunction crypto_core_salsa20(out,inp,k,c) {\\n core_salsa20(out,inp,k,c);\\n}\\n\\nfunction crypto_core_hsalsa20(out,inp,k,c) {\\n core_hsalsa20(out,inp,k,c);\\n}\\n\\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\\n // \\\"expand 32-byte k\\\"\\n\\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\\n var z = new Uint8Array(16), x = new Uint8Array(64);\\n var u, i;\\n for (i = 0; i < 16; i++) z[i] = 0;\\n for (i = 0; i < 8; i++) z[i] = n[i];\\n while (b >= 64) {\\n crypto_core_salsa20(x,z,k,sigma);\\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\\n u = 1;\\n for (i = 8; i < 16; i++) {\\n u = u + (z[i] & 0xff) | 0;\\n z[i] = u & 0xff;\\n u >>>= 8;\\n }\\n b -= 64;\\n cpos += 64;\\n mpos += 64;\\n }\\n if (b > 0) {\\n crypto_core_salsa20(x,z,k,sigma);\\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\\n }\\n return 0;\\n}\\n\\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\\n var z = new Uint8Array(16), x = new Uint8Array(64);\\n var u, i;\\n for (i = 0; i < 16; i++) z[i] = 0;\\n for (i = 0; i < 8; i++) z[i] = n[i];\\n while (b >= 64) {\\n crypto_core_salsa20(x,z,k,sigma);\\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\\n u = 1;\\n for (i = 8; i < 16; i++) {\\n u = u + (z[i] & 0xff) | 0;\\n z[i] = u & 0xff;\\n u >>>= 8;\\n }\\n b -= 64;\\n cpos += 64;\\n }\\n if (b > 0) {\\n crypto_core_salsa20(x,z,k,sigma);\\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\\n }\\n return 0;\\n}\\n\\nfunction crypto_stream(c,cpos,d,n,k) {\\n var s = new Uint8Array(32);\\n crypto_core_hsalsa20(s,n,k,sigma);\\n var sn = new Uint8Array(8);\\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\\n return crypto_stream_salsa20(c,cpos,d,sn,s);\\n}\\n\\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\\n var s = new Uint8Array(32);\\n crypto_core_hsalsa20(s,n,k,sigma);\\n var sn = new Uint8Array(8);\\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\\n}\\n\\n/*\\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\\n* https://github.com/floodyberry/poly1305-donna\\n*/\\n\\nvar poly1305 = function(key) {\\n this.buffer = new Uint8Array(16);\\n this.r = new Uint16Array(10);\\n this.h = new Uint16Array(10);\\n this.pad = new Uint16Array(8);\\n this.leftover = 0;\\n this.fin = 0;\\n\\n var t0, t1, t2, t3, t4, t5, t6, t7;\\n\\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\\n this.r[9] = ((t7 >>> 5)) & 0x007f;\\n\\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\\n};\\n\\npoly1305.prototype.blocks = function(m, mpos, bytes) {\\n var hibit = this.fin ? 0 : (1 << 11);\\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\\n\\n var h0 = this.h[0],\\n h1 = this.h[1],\\n h2 = this.h[2],\\n h3 = this.h[3],\\n h4 = this.h[4],\\n h5 = this.h[5],\\n h6 = this.h[6],\\n h7 = this.h[7],\\n h8 = this.h[8],\\n h9 = this.h[9];\\n\\n var r0 = this.r[0],\\n r1 = this.r[1],\\n r2 = this.r[2],\\n r3 = this.r[3],\\n r4 = this.r[4],\\n r5 = this.r[5],\\n r6 = this.r[6],\\n r7 = this.r[7],\\n r8 = this.r[8],\\n r9 = this.r[9];\\n\\n while (bytes >= 16) {\\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\\n h5 += ((t4 >>> 1)) & 0x1fff;\\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\\n h9 += ((t7 >>> 5)) | hibit;\\n\\n c = 0;\\n\\n d0 = c;\\n d0 += h0 * r0;\\n d0 += h1 * (5 * r9);\\n d0 += h2 * (5 * r8);\\n d0 += h3 * (5 * r7);\\n d0 += h4 * (5 * r6);\\n c = (d0 >>> 13); d0 &= 0x1fff;\\n d0 += h5 * (5 * r5);\\n d0 += h6 * (5 * r4);\\n d0 += h7 * (5 * r3);\\n d0 += h8 * (5 * r2);\\n d0 += h9 * (5 * r1);\\n c += (d0 >>> 13); d0 &= 0x1fff;\\n\\n d1 = c;\\n d1 += h0 * r1;\\n d1 += h1 * r0;\\n d1 += h2 * (5 * r9);\\n d1 += h3 * (5 * r8);\\n d1 += h4 * (5 * r7);\\n c = (d1 >>> 13); d1 &= 0x1fff;\\n d1 += h5 * (5 * r6);\\n d1 += h6 * (5 * r5);\\n d1 += h7 * (5 * r4);\\n d1 += h8 * (5 * r3);\\n d1 += h9 * (5 * r2);\\n c += (d1 >>> 13); d1 &= 0x1fff;\\n\\n d2 = c;\\n d2 += h0 * r2;\\n d2 += h1 * r1;\\n d2 += h2 * r0;\\n d2 += h3 * (5 * r9);\\n d2 += h4 * (5 * r8);\\n c = (d2 >>> 13); d2 &= 0x1fff;\\n d2 += h5 * (5 * r7);\\n d2 += h6 * (5 * r6);\\n d2 += h7 * (5 * r5);\\n d2 += h8 * (5 * r4);\\n d2 += h9 * (5 * r3);\\n c += (d2 >>> 13); d2 &= 0x1fff;\\n\\n d3 = c;\\n d3 += h0 * r3;\\n d3 += h1 * r2;\\n d3 += h2 * r1;\\n d3 += h3 * r0;\\n d3 += h4 * (5 * r9);\\n c = (d3 >>> 13); d3 &= 0x1fff;\\n d3 += h5 * (5 * r8);\\n d3 += h6 * (5 * r7);\\n d3 += h7 * (5 * r6);\\n d3 += h8 * (5 * r5);\\n d3 += h9 * (5 * r4);\\n c += (d3 >>> 13); d3 &= 0x1fff;\\n\\n d4 = c;\\n d4 += h0 * r4;\\n d4 += h1 * r3;\\n d4 += h2 * r2;\\n d4 += h3 * r1;\\n d4 += h4 * r0;\\n c = (d4 >>> 13); d4 &= 0x1fff;\\n d4 += h5 * (5 * r9);\\n d4 += h6 * (5 * r8);\\n d4 += h7 * (5 * r7);\\n d4 += h8 * (5 * r6);\\n d4 += h9 * (5 * r5);\\n c += (d4 >>> 13); d4 &= 0x1fff;\\n\\n d5 = c;\\n d5 += h0 * r5;\\n d5 += h1 * r4;\\n d5 += h2 * r3;\\n d5 += h3 * r2;\\n d5 += h4 * r1;\\n c = (d5 >>> 13); d5 &= 0x1fff;\\n d5 += h5 * r0;\\n d5 += h6 * (5 * r9);\\n d5 += h7 * (5 * r8);\\n d5 += h8 * (5 * r7);\\n d5 += h9 * (5 * r6);\\n c += (d5 >>> 13); d5 &= 0x1fff;\\n\\n d6 = c;\\n d6 += h0 * r6;\\n d6 += h1 * r5;\\n d6 += h2 * r4;\\n d6 += h3 * r3;\\n d6 += h4 * r2;\\n c = (d6 >>> 13); d6 &= 0x1fff;\\n d6 += h5 * r1;\\n d6 += h6 * r0;\\n d6 += h7 * (5 * r9);\\n d6 += h8 * (5 * r8);\\n d6 += h9 * (5 * r7);\\n c += (d6 >>> 13); d6 &= 0x1fff;\\n\\n d7 = c;\\n d7 += h0 * r7;\\n d7 += h1 * r6;\\n d7 += h2 * r5;\\n d7 += h3 * r4;\\n d7 += h4 * r3;\\n c = (d7 >>> 13); d7 &= 0x1fff;\\n d7 += h5 * r2;\\n d7 += h6 * r1;\\n d7 += h7 * r0;\\n d7 += h8 * (5 * r9);\\n d7 += h9 * (5 * r8);\\n c += (d7 >>> 13); d7 &= 0x1fff;\\n\\n d8 = c;\\n d8 += h0 * r8;\\n d8 += h1 * r7;\\n d8 += h2 * r6;\\n d8 += h3 * r5;\\n d8 += h4 * r4;\\n c = (d8 >>> 13); d8 &= 0x1fff;\\n d8 += h5 * r3;\\n d8 += h6 * r2;\\n d8 += h7 * r1;\\n d8 += h8 * r0;\\n d8 += h9 * (5 * r9);\\n c += (d8 >>> 13); d8 &= 0x1fff;\\n\\n d9 = c;\\n d9 += h0 * r9;\\n d9 += h1 * r8;\\n d9 += h2 * r7;\\n d9 += h3 * r6;\\n d9 += h4 * r5;\\n c = (d9 >>> 13); d9 &= 0x1fff;\\n d9 += h5 * r4;\\n d9 += h6 * r3;\\n d9 += h7 * r2;\\n d9 += h8 * r1;\\n d9 += h9 * r0;\\n c += (d9 >>> 13); d9 &= 0x1fff;\\n\\n c = (((c << 2) + c)) | 0;\\n c = (c + d0) | 0;\\n d0 = c & 0x1fff;\\n c = (c >>> 13);\\n d1 += c;\\n\\n h0 = d0;\\n h1 = d1;\\n h2 = d2;\\n h3 = d3;\\n h4 = d4;\\n h5 = d5;\\n h6 = d6;\\n h7 = d7;\\n h8 = d8;\\n h9 = d9;\\n\\n mpos += 16;\\n bytes -= 16;\\n }\\n this.h[0] = h0;\\n this.h[1] = h1;\\n this.h[2] = h2;\\n this.h[3] = h3;\\n this.h[4] = h4;\\n this.h[5] = h5;\\n this.h[6] = h6;\\n this.h[7] = h7;\\n this.h[8] = h8;\\n this.h[9] = h9;\\n};\\n\\npoly1305.prototype.finish = function(mac, macpos) {\\n var g = new Uint16Array(10);\\n var c, mask, f, i;\\n\\n if (this.leftover) {\\n i = this.leftover;\\n this.buffer[i++] = 1;\\n for (; i < 16; i++) this.buffer[i] = 0;\\n this.fin = 1;\\n this.blocks(this.buffer, 0, 16);\\n }\\n\\n c = this.h[1] >>> 13;\\n this.h[1] &= 0x1fff;\\n for (i = 2; i < 10; i++) {\\n this.h[i] += c;\\n c = this.h[i] >>> 13;\\n this.h[i] &= 0x1fff;\\n }\\n this.h[0] += (c * 5);\\n c = this.h[0] >>> 13;\\n this.h[0] &= 0x1fff;\\n this.h[1] += c;\\n c = this.h[1] >>> 13;\\n this.h[1] &= 0x1fff;\\n this.h[2] += c;\\n\\n g[0] = this.h[0] + 5;\\n c = g[0] >>> 13;\\n g[0] &= 0x1fff;\\n for (i = 1; i < 10; i++) {\\n g[i] = this.h[i] + c;\\n c = g[i] >>> 13;\\n g[i] &= 0x1fff;\\n }\\n g[9] -= (1 << 13);\\n\\n mask = (c ^ 1) - 1;\\n for (i = 0; i < 10; i++) g[i] &= mask;\\n mask = ~mask;\\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\\n\\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\\n\\n f = this.h[0] + this.pad[0];\\n this.h[0] = f & 0xffff;\\n for (i = 1; i < 8; i++) {\\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\\n this.h[i] = f & 0xffff;\\n }\\n\\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\\n};\\n\\npoly1305.prototype.update = function(m, mpos, bytes) {\\n var i, want;\\n\\n if (this.leftover) {\\n want = (16 - this.leftover);\\n if (want > bytes)\\n want = bytes;\\n for (i = 0; i < want; i++)\\n this.buffer[this.leftover + i] = m[mpos+i];\\n bytes -= want;\\n mpos += want;\\n this.leftover += want;\\n if (this.leftover < 16)\\n return;\\n this.blocks(this.buffer, 0, 16);\\n this.leftover = 0;\\n }\\n\\n if (bytes >= 16) {\\n want = bytes - (bytes % 16);\\n this.blocks(m, mpos, want);\\n mpos += want;\\n bytes -= want;\\n }\\n\\n if (bytes) {\\n for (i = 0; i < bytes; i++)\\n this.buffer[this.leftover + i] = m[mpos+i];\\n this.leftover += bytes;\\n }\\n};\\n\\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\\n var s = new poly1305(k);\\n s.update(m, mpos, n);\\n s.finish(out, outpos);\\n return 0;\\n}\\n\\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\\n var x = new Uint8Array(16);\\n crypto_onetimeauth(x,0,m,mpos,n,k);\\n return crypto_verify_16(h,hpos,x,0);\\n}\\n\\nfunction crypto_secretbox(c,m,d,n,k) {\\n var i;\\n if (d < 32) return -1;\\n crypto_stream_xor(c,0,m,0,d,n,k);\\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\\n for (i = 0; i < 16; i++) c[i] = 0;\\n return 0;\\n}\\n\\nfunction crypto_secretbox_open(m,c,d,n,k) {\\n var i;\\n var x = new Uint8Array(32);\\n if (d < 32) return -1;\\n crypto_stream(x,0,32,n,k);\\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\\n crypto_stream_xor(m,0,c,0,d,n,k);\\n for (i = 0; i < 32; i++) m[i] = 0;\\n return 0;\\n}\\n\\nfunction set25519(r, a) {\\n var i;\\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\\n}\\n\\nfunction car25519(o) {\\n var i, v, c = 1;\\n for (i = 0; i < 16; i++) {\\n v = o[i] + c + 65535;\\n c = Math.floor(v / 65536);\\n o[i] = v - c * 65536;\\n }\\n o[0] += c-1 + 37 * (c-1);\\n}\\n\\nfunction sel25519(p, q, b) {\\n var t, c = ~(b-1);\\n for (var i = 0; i < 16; i++) {\\n t = c & (p[i] ^ q[i]);\\n p[i] ^= t;\\n q[i] ^= t;\\n }\\n}\\n\\nfunction pack25519(o, n) {\\n var i, j, b;\\n var m = gf(), t = gf();\\n for (i = 0; i < 16; i++) t[i] = n[i];\\n car25519(t);\\n car25519(t);\\n car25519(t);\\n for (j = 0; j < 2; j++) {\\n m[0] = t[0] - 0xffed;\\n for (i = 1; i < 15; i++) {\\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\\n m[i-1] &= 0xffff;\\n }\\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\\n b = (m[15]>>16) & 1;\\n m[14] &= 0xffff;\\n sel25519(t, m, 1-b);\\n }\\n for (i = 0; i < 16; i++) {\\n o[2*i] = t[i] & 0xff;\\n o[2*i+1] = t[i]>>8;\\n }\\n}\\n\\nfunction neq25519(a, b) {\\n var c = new Uint8Array(32), d = new Uint8Array(32);\\n pack25519(c, a);\\n pack25519(d, b);\\n return crypto_verify_32(c, 0, d, 0);\\n}\\n\\nfunction par25519(a) {\\n var d = new Uint8Array(32);\\n pack25519(d, a);\\n return d[0] & 1;\\n}\\n\\nfunction unpack25519(o, n) {\\n var i;\\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\\n o[15] &= 0x7fff;\\n}\\n\\nfunction A(o, a, b) {\\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\\n}\\n\\nfunction Z(o, a, b) {\\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\\n}\\n\\nfunction M(o, a, b) {\\n var v, c,\\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\\n b0 = b[0],\\n b1 = b[1],\\n b2 = b[2],\\n b3 = b[3],\\n b4 = b[4],\\n b5 = b[5],\\n b6 = b[6],\\n b7 = b[7],\\n b8 = b[8],\\n b9 = b[9],\\n b10 = b[10],\\n b11 = b[11],\\n b12 = b[12],\\n b13 = b[13],\\n b14 = b[14],\\n b15 = b[15];\\n\\n v = a[0];\\n t0 += v * b0;\\n t1 += v * b1;\\n t2 += v * b2;\\n t3 += v * b3;\\n t4 += v * b4;\\n t5 += v * b5;\\n t6 += v * b6;\\n t7 += v * b7;\\n t8 += v * b8;\\n t9 += v * b9;\\n t10 += v * b10;\\n t11 += v * b11;\\n t12 += v * b12;\\n t13 += v * b13;\\n t14 += v * b14;\\n t15 += v * b15;\\n v = a[1];\\n t1 += v * b0;\\n t2 += v * b1;\\n t3 += v * b2;\\n t4 += v * b3;\\n t5 += v * b4;\\n t6 += v * b5;\\n t7 += v * b6;\\n t8 += v * b7;\\n t9 += v * b8;\\n t10 += v * b9;\\n t11 += v * b10;\\n t12 += v * b11;\\n t13 += v * b12;\\n t14 += v * b13;\\n t15 += v * b14;\\n t16 += v * b15;\\n v = a[2];\\n t2 += v * b0;\\n t3 += v * b1;\\n t4 += v * b2;\\n t5 += v * b3;\\n t6 += v * b4;\\n t7 += v * b5;\\n t8 += v * b6;\\n t9 += v * b7;\\n t10 += v * b8;\\n t11 += v * b9;\\n t12 += v * b10;\\n t13 += v * b11;\\n t14 += v * b12;\\n t15 += v * b13;\\n t16 += v * b14;\\n t17 += v * b15;\\n v = a[3];\\n t3 += v * b0;\\n t4 += v * b1;\\n t5 += v * b2;\\n t6 += v * b3;\\n t7 += v * b4;\\n t8 += v * b5;\\n t9 += v * b6;\\n t10 += v * b7;\\n t11 += v * b8;\\n t12 += v * b9;\\n t13 += v * b10;\\n t14 += v * b11;\\n t15 += v * b12;\\n t16 += v * b13;\\n t17 += v * b14;\\n t18 += v * b15;\\n v = a[4];\\n t4 += v * b0;\\n t5 += v * b1;\\n t6 += v * b2;\\n t7 += v * b3;\\n t8 += v * b4;\\n t9 += v * b5;\\n t10 += v * b6;\\n t11 += v * b7;\\n t12 += v * b8;\\n t13 += v * b9;\\n t14 += v * b10;\\n t15 += v * b11;\\n t16 += v * b12;\\n t17 += v * b13;\\n t18 += v * b14;\\n t19 += v * b15;\\n v = a[5];\\n t5 += v * b0;\\n t6 += v * b1;\\n t7 += v * b2;\\n t8 += v * b3;\\n t9 += v * b4;\\n t10 += v * b5;\\n t11 += v * b6;\\n t12 += v * b7;\\n t13 += v * b8;\\n t14 += v * b9;\\n t15 += v * b10;\\n t16 += v * b11;\\n t17 += v * b12;\\n t18 += v * b13;\\n t19 += v * b14;\\n t20 += v * b15;\\n v = a[6];\\n t6 += v * b0;\\n t7 += v * b1;\\n t8 += v * b2;\\n t9 += v * b3;\\n t10 += v * b4;\\n t11 += v * b5;\\n t12 += v * b6;\\n t13 += v * b7;\\n t14 += v * b8;\\n t15 += v * b9;\\n t16 += v * b10;\\n t17 += v * b11;\\n t18 += v * b12;\\n t19 += v * b13;\\n t20 += v * b14;\\n t21 += v * b15;\\n v = a[7];\\n t7 += v * b0;\\n t8 += v * b1;\\n t9 += v * b2;\\n t10 += v * b3;\\n t11 += v * b4;\\n t12 += v * b5;\\n t13 += v * b6;\\n t14 += v * b7;\\n t15 += v * b8;\\n t16 += v * b9;\\n t17 += v * b10;\\n t18 += v * b11;\\n t19 += v * b12;\\n t20 += v * b13;\\n t21 += v * b14;\\n t22 += v * b15;\\n v = a[8];\\n t8 += v * b0;\\n t9 += v * b1;\\n t10 += v * b2;\\n t11 += v * b3;\\n t12 += v * b4;\\n t13 += v * b5;\\n t14 += v * b6;\\n t15 += v * b7;\\n t16 += v * b8;\\n t17 += v * b9;\\n t18 += v * b10;\\n t19 += v * b11;\\n t20 += v * b12;\\n t21 += v * b13;\\n t22 += v * b14;\\n t23 += v * b15;\\n v = a[9];\\n t9 += v * b0;\\n t10 += v * b1;\\n t11 += v * b2;\\n t12 += v * b3;\\n t13 += v * b4;\\n t14 += v * b5;\\n t15 += v * b6;\\n t16 += v * b7;\\n t17 += v * b8;\\n t18 += v * b9;\\n t19 += v * b10;\\n t20 += v * b11;\\n t21 += v * b12;\\n t22 += v * b13;\\n t23 += v * b14;\\n t24 += v * b15;\\n v = a[10];\\n t10 += v * b0;\\n t11 += v * b1;\\n t12 += v * b2;\\n t13 += v * b3;\\n t14 += v * b4;\\n t15 += v * b5;\\n t16 += v * b6;\\n t17 += v * b7;\\n t18 += v * b8;\\n t19 += v * b9;\\n t20 += v * b10;\\n t21 += v * b11;\\n t22 += v * b12;\\n t23 += v * b13;\\n t24 += v * b14;\\n t25 += v * b15;\\n v = a[11];\\n t11 += v * b0;\\n t12 += v * b1;\\n t13 += v * b2;\\n t14 += v * b3;\\n t15 += v * b4;\\n t16 += v * b5;\\n t17 += v * b6;\\n t18 += v * b7;\\n t19 += v * b8;\\n t20 += v * b9;\\n t21 += v * b10;\\n t22 += v * b11;\\n t23 += v * b12;\\n t24 += v * b13;\\n t25 += v * b14;\\n t26 += v * b15;\\n v = a[12];\\n t12 += v * b0;\\n t13 += v * b1;\\n t14 += v * b2;\\n t15 += v * b3;\\n t16 += v * b4;\\n t17 += v * b5;\\n t18 += v * b6;\\n t19 += v * b7;\\n t20 += v * b8;\\n t21 += v * b9;\\n t22 += v * b10;\\n t23 += v * b11;\\n t24 += v * b12;\\n t25 += v * b13;\\n t26 += v * b14;\\n t27 += v * b15;\\n v = a[13];\\n t13 += v * b0;\\n t14 += v * b1;\\n t15 += v * b2;\\n t16 += v * b3;\\n t17 += v * b4;\\n t18 += v * b5;\\n t19 += v * b6;\\n t20 += v * b7;\\n t21 += v * b8;\\n t22 += v * b9;\\n t23 += v * b10;\\n t24 += v * b11;\\n t25 += v * b12;\\n t26 += v * b13;\\n t27 += v * b14;\\n t28 += v * b15;\\n v = a[14];\\n t14 += v * b0;\\n t15 += v * b1;\\n t16 += v * b2;\\n t17 += v * b3;\\n t18 += v * b4;\\n t19 += v * b5;\\n t20 += v * b6;\\n t21 += v * b7;\\n t22 += v * b8;\\n t23 += v * b9;\\n t24 += v * b10;\\n t25 += v * b11;\\n t26 += v * b12;\\n t27 += v * b13;\\n t28 += v * b14;\\n t29 += v * b15;\\n v = a[15];\\n t15 += v * b0;\\n t16 += v * b1;\\n t17 += v * b2;\\n t18 += v * b3;\\n t19 += v * b4;\\n t20 += v * b5;\\n t21 += v * b6;\\n t22 += v * b7;\\n t23 += v * b8;\\n t24 += v * b9;\\n t25 += v * b10;\\n t26 += v * b11;\\n t27 += v * b12;\\n t28 += v * b13;\\n t29 += v * b14;\\n t30 += v * b15;\\n\\n t0 += 38 * t16;\\n t1 += 38 * t17;\\n t2 += 38 * t18;\\n t3 += 38 * t19;\\n t4 += 38 * t20;\\n t5 += 38 * t21;\\n t6 += 38 * t22;\\n t7 += 38 * t23;\\n t8 += 38 * t24;\\n t9 += 38 * t25;\\n t10 += 38 * t26;\\n t11 += 38 * t27;\\n t12 += 38 * t28;\\n t13 += 38 * t29;\\n t14 += 38 * t30;\\n // t15 left as is\\n\\n // first car\\n c = 1;\\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\\n t0 += c-1 + 37 * (c-1);\\n\\n // second car\\n c = 1;\\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\\n t0 += c-1 + 37 * (c-1);\\n\\n o[ 0] = t0;\\n o[ 1] = t1;\\n o[ 2] = t2;\\n o[ 3] = t3;\\n o[ 4] = t4;\\n o[ 5] = t5;\\n o[ 6] = t6;\\n o[ 7] = t7;\\n o[ 8] = t8;\\n o[ 9] = t9;\\n o[10] = t10;\\n o[11] = t11;\\n o[12] = t12;\\n o[13] = t13;\\n o[14] = t14;\\n o[15] = t15;\\n}\\n\\nfunction S(o, a) {\\n M(o, a, a);\\n}\\n\\nfunction inv25519(o, i) {\\n var c = gf();\\n var a;\\n for (a = 0; a < 16; a++) c[a] = i[a];\\n for (a = 253; a >= 0; a--) {\\n S(c, c);\\n if(a !== 2 && a !== 4) M(c, c, i);\\n }\\n for (a = 0; a < 16; a++) o[a] = c[a];\\n}\\n\\nfunction pow2523(o, i) {\\n var c = gf();\\n var a;\\n for (a = 0; a < 16; a++) c[a] = i[a];\\n for (a = 250; a >= 0; a--) {\\n S(c, c);\\n if(a !== 1) M(c, c, i);\\n }\\n for (a = 0; a < 16; a++) o[a] = c[a];\\n}\\n\\nfunction crypto_scalarmult(q, n, p) {\\n var z = new Uint8Array(32);\\n var x = new Float64Array(80), r, i;\\n var a = gf(), b = gf(), c = gf(),\\n d = gf(), e = gf(), f = gf();\\n for (i = 0; i < 31; i++) z[i] = n[i];\\n z[31]=(n[31]&127)|64;\\n z[0]&=248;\\n unpack25519(x,p);\\n for (i = 0; i < 16; i++) {\\n b[i]=x[i];\\n d[i]=a[i]=c[i]=0;\\n }\\n a[0]=d[0]=1;\\n for (i=254; i>=0; --i) {\\n r=(z[i>>>3]>>>(i&7))&1;\\n sel25519(a,b,r);\\n sel25519(c,d,r);\\n A(e,a,c);\\n Z(a,a,c);\\n A(c,b,d);\\n Z(b,b,d);\\n S(d,e);\\n S(f,a);\\n M(a,c,a);\\n M(c,b,e);\\n A(e,a,c);\\n Z(a,a,c);\\n S(b,a);\\n Z(c,d,f);\\n M(a,c,_121665);\\n A(a,a,d);\\n M(c,c,a);\\n M(a,d,f);\\n M(d,b,x);\\n S(b,e);\\n sel25519(a,b,r);\\n sel25519(c,d,r);\\n }\\n for (i = 0; i < 16; i++) {\\n x[i+16]=a[i];\\n x[i+32]=c[i];\\n x[i+48]=b[i];\\n x[i+64]=d[i];\\n }\\n var x32 = x.subarray(32);\\n var x16 = x.subarray(16);\\n inv25519(x32,x32);\\n M(x16,x16,x32);\\n pack25519(q,x16);\\n return 0;\\n}\\n\\nfunction crypto_scalarmult_base(q, n) {\\n return crypto_scalarmult(q, n, _9);\\n}\\n\\nfunction crypto_box_keypair(y, x) {\\n randombytes(x, 32);\\n return crypto_scalarmult_base(y, x);\\n}\\n\\nfunction crypto_box_beforenm(k, y, x) {\\n var s = new Uint8Array(32);\\n crypto_scalarmult(s, x, y);\\n return crypto_core_hsalsa20(k, _0, s, sigma);\\n}\\n\\nvar crypto_box_afternm = crypto_secretbox;\\nvar crypto_box_open_afternm = crypto_secretbox_open;\\n\\nfunction crypto_box(c, m, d, n, y, x) {\\n var k = new Uint8Array(32);\\n crypto_box_beforenm(k, y, x);\\n return crypto_box_afternm(c, m, d, n, k);\\n}\\n\\nfunction crypto_box_open(m, c, d, n, y, x) {\\n var k = new Uint8Array(32);\\n crypto_box_beforenm(k, y, x);\\n return crypto_box_open_afternm(m, c, d, n, k);\\n}\\n\\nvar K = [\\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\\n];\\n\\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\\n var wh = new Int32Array(16), wl = new Int32Array(16),\\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\\n th, tl, i, j, h, l, a, b, c, d;\\n\\n var ah0 = hh[0],\\n ah1 = hh[1],\\n ah2 = hh[2],\\n ah3 = hh[3],\\n ah4 = hh[4],\\n ah5 = hh[5],\\n ah6 = hh[6],\\n ah7 = hh[7],\\n\\n al0 = hl[0],\\n al1 = hl[1],\\n al2 = hl[2],\\n al3 = hl[3],\\n al4 = hl[4],\\n al5 = hl[5],\\n al6 = hl[6],\\n al7 = hl[7];\\n\\n var pos = 0;\\n while (n >= 128) {\\n for (i = 0; i < 16; i++) {\\n j = 8 * i + pos;\\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\\n }\\n for (i = 0; i < 80; i++) {\\n bh0 = ah0;\\n bh1 = ah1;\\n bh2 = ah2;\\n bh3 = ah3;\\n bh4 = ah4;\\n bh5 = ah5;\\n bh6 = ah6;\\n bh7 = ah7;\\n\\n bl0 = al0;\\n bl1 = al1;\\n bl2 = al2;\\n bl3 = al3;\\n bl4 = al4;\\n bl5 = al5;\\n bl6 = al6;\\n bl7 = al7;\\n\\n // add\\n h = ah7;\\n l = al7;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n // Sigma1\\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // Ch\\n h = (ah4 & ah5) ^ (~ah4 & ah6);\\n l = (al4 & al5) ^ (~al4 & al6);\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // K\\n h = K[i*2];\\n l = K[i*2+1];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // w\\n h = wh[i%16];\\n l = wl[i%16];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n th = c & 0xffff | d << 16;\\n tl = a & 0xffff | b << 16;\\n\\n // add\\n h = th;\\n l = tl;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n // Sigma0\\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // Maj\\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n bh7 = (c & 0xffff) | (d << 16);\\n bl7 = (a & 0xffff) | (b << 16);\\n\\n // add\\n h = bh3;\\n l = bl3;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = th;\\n l = tl;\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n bh3 = (c & 0xffff) | (d << 16);\\n bl3 = (a & 0xffff) | (b << 16);\\n\\n ah1 = bh0;\\n ah2 = bh1;\\n ah3 = bh2;\\n ah4 = bh3;\\n ah5 = bh4;\\n ah6 = bh5;\\n ah7 = bh6;\\n ah0 = bh7;\\n\\n al1 = bl0;\\n al2 = bl1;\\n al3 = bl2;\\n al4 = bl3;\\n al5 = bl4;\\n al6 = bl5;\\n al7 = bl6;\\n al0 = bl7;\\n\\n if (i%16 === 15) {\\n for (j = 0; j < 16; j++) {\\n // add\\n h = wh[j];\\n l = wl[j];\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = wh[(j+9)%16];\\n l = wl[(j+9)%16];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // sigma0\\n th = wh[(j+1)%16];\\n tl = wl[(j+1)%16];\\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // sigma1\\n th = wh[(j+14)%16];\\n tl = wl[(j+14)%16];\\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n wh[j] = (c & 0xffff) | (d << 16);\\n wl[j] = (a & 0xffff) | (b << 16);\\n }\\n }\\n }\\n\\n // add\\n h = ah0;\\n l = al0;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[0];\\n l = hl[0];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\\n hl[0] = al0 = (a & 0xffff) | (b << 16);\\n\\n h = ah1;\\n l = al1;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[1];\\n l = hl[1];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\\n hl[1] = al1 = (a & 0xffff) | (b << 16);\\n\\n h = ah2;\\n l = al2;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[2];\\n l = hl[2];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\\n hl[2] = al2 = (a & 0xffff) | (b << 16);\\n\\n h = ah3;\\n l = al3;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[3];\\n l = hl[3];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\\n hl[3] = al3 = (a & 0xffff) | (b << 16);\\n\\n h = ah4;\\n l = al4;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[4];\\n l = hl[4];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\\n hl[4] = al4 = (a & 0xffff) | (b << 16);\\n\\n h = ah5;\\n l = al5;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[5];\\n l = hl[5];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\\n hl[5] = al5 = (a & 0xffff) | (b << 16);\\n\\n h = ah6;\\n l = al6;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[6];\\n l = hl[6];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\\n hl[6] = al6 = (a & 0xffff) | (b << 16);\\n\\n h = ah7;\\n l = al7;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[7];\\n l = hl[7];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\\n hl[7] = al7 = (a & 0xffff) | (b << 16);\\n\\n pos += 128;\\n n -= 128;\\n }\\n\\n return n;\\n}\\n\\nfunction crypto_hash(out, m, n) {\\n var hh = new Int32Array(8),\\n hl = new Int32Array(8),\\n x = new Uint8Array(256),\\n i, b = n;\\n\\n hh[0] = 0x6a09e667;\\n hh[1] = 0xbb67ae85;\\n hh[2] = 0x3c6ef372;\\n hh[3] = 0xa54ff53a;\\n hh[4] = 0x510e527f;\\n hh[5] = 0x9b05688c;\\n hh[6] = 0x1f83d9ab;\\n hh[7] = 0x5be0cd19;\\n\\n hl[0] = 0xf3bcc908;\\n hl[1] = 0x84caa73b;\\n hl[2] = 0xfe94f82b;\\n hl[3] = 0x5f1d36f1;\\n hl[4] = 0xade682d1;\\n hl[5] = 0x2b3e6c1f;\\n hl[6] = 0xfb41bd6b;\\n hl[7] = 0x137e2179;\\n\\n crypto_hashblocks_hl(hh, hl, m, n);\\n n %= 128;\\n\\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\\n x[n] = 128;\\n\\n n = 256-128*(n<112?1:0);\\n x[n-9] = 0;\\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\\n crypto_hashblocks_hl(hh, hl, x, n);\\n\\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\\n\\n return 0;\\n}\\n\\nfunction add(p, q) {\\n var a = gf(), b = gf(), c = gf(),\\n d = gf(), e = gf(), f = gf(),\\n g = gf(), h = gf(), t = gf();\\n\\n Z(a, p[1], p[0]);\\n Z(t, q[1], q[0]);\\n M(a, a, t);\\n A(b, p[0], p[1]);\\n A(t, q[0], q[1]);\\n M(b, b, t);\\n M(c, p[3], q[3]);\\n M(c, c, D2);\\n M(d, p[2], q[2]);\\n A(d, d, d);\\n Z(e, b, a);\\n Z(f, d, c);\\n A(g, d, c);\\n A(h, b, a);\\n\\n M(p[0], e, f);\\n M(p[1], h, g);\\n M(p[2], g, f);\\n M(p[3], e, h);\\n}\\n\\nfunction cswap(p, q, b) {\\n var i;\\n for (i = 0; i < 4; i++) {\\n sel25519(p[i], q[i], b);\\n }\\n}\\n\\nfunction pack(r, p) {\\n var tx = gf(), ty = gf(), zi = gf();\\n inv25519(zi, p[2]);\\n M(tx, p[0], zi);\\n M(ty, p[1], zi);\\n pack25519(r, ty);\\n r[31] ^= par25519(tx) << 7;\\n}\\n\\nfunction scalarmult(p, q, s) {\\n var b, i;\\n set25519(p[0], gf0);\\n set25519(p[1], gf1);\\n set25519(p[2], gf1);\\n set25519(p[3], gf0);\\n for (i = 255; i >= 0; --i) {\\n b = (s[(i/8)|0] >> (i&7)) & 1;\\n cswap(p, q, b);\\n add(q, p);\\n add(p, p);\\n cswap(p, q, b);\\n }\\n}\\n\\nfunction scalarbase(p, s) {\\n var q = [gf(), gf(), gf(), gf()];\\n set25519(q[0], X);\\n set25519(q[1], Y);\\n set25519(q[2], gf1);\\n M(q[3], X, Y);\\n scalarmult(p, q, s);\\n}\\n\\nfunction crypto_sign_keypair(pk, sk, seeded) {\\n var d = new Uint8Array(64);\\n var p = [gf(), gf(), gf(), gf()];\\n var i;\\n\\n if (!seeded) randombytes(sk, 32);\\n crypto_hash(d, sk, 32);\\n d[0] &= 248;\\n d[31] &= 127;\\n d[31] |= 64;\\n\\n scalarbase(p, d);\\n pack(pk, p);\\n\\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\\n return 0;\\n}\\n\\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\\n\\nfunction modL(r, x) {\\n var carry, i, j, k;\\n for (i = 63; i >= 32; --i) {\\n carry = 0;\\n for (j = i - 32, k = i - 12; j < k; ++j) {\\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\\n carry = (x[j] + 128) >> 8;\\n x[j] -= carry * 256;\\n }\\n x[j] += carry;\\n x[i] = 0;\\n }\\n carry = 0;\\n for (j = 0; j < 32; j++) {\\n x[j] += carry - (x[31] >> 4) * L[j];\\n carry = x[j] >> 8;\\n x[j] &= 255;\\n }\\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\\n for (i = 0; i < 32; i++) {\\n x[i+1] += x[i] >> 8;\\n r[i] = x[i] & 255;\\n }\\n}\\n\\nfunction reduce(r) {\\n var x = new Float64Array(64), i;\\n for (i = 0; i < 64; i++) x[i] = r[i];\\n for (i = 0; i < 64; i++) r[i] = 0;\\n modL(r, x);\\n}\\n\\n// Note: difference from C - smlen returned, not passed as argument.\\nfunction crypto_sign(sm, m, n, sk) {\\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\\n var i, j, x = new Float64Array(64);\\n var p = [gf(), gf(), gf(), gf()];\\n\\n crypto_hash(d, sk, 32);\\n d[0] &= 248;\\n d[31] &= 127;\\n d[31] |= 64;\\n\\n var smlen = n + 64;\\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\\n\\n crypto_hash(r, sm.subarray(32), n+32);\\n reduce(r);\\n scalarbase(p, r);\\n pack(sm, p);\\n\\n for (i = 32; i < 64; i++) sm[i] = sk[i];\\n crypto_hash(h, sm, n + 64);\\n reduce(h);\\n\\n for (i = 0; i < 64; i++) x[i] = 0;\\n for (i = 0; i < 32; i++) x[i] = r[i];\\n for (i = 0; i < 32; i++) {\\n for (j = 0; j < 32; j++) {\\n x[i+j] += h[i] * d[j];\\n }\\n }\\n\\n modL(sm.subarray(32), x);\\n return smlen;\\n}\\n\\nfunction unpackneg(r, p) {\\n var t = gf(), chk = gf(), num = gf(),\\n den = gf(), den2 = gf(), den4 = gf(),\\n den6 = gf();\\n\\n set25519(r[2], gf1);\\n unpack25519(r[1], p);\\n S(num, r[1]);\\n M(den, num, D);\\n Z(num, num, r[2]);\\n A(den, r[2], den);\\n\\n S(den2, den);\\n S(den4, den2);\\n M(den6, den4, den2);\\n M(t, den6, num);\\n M(t, t, den);\\n\\n pow2523(t, t);\\n M(t, t, num);\\n M(t, t, den);\\n M(t, t, den);\\n M(r[0], t, den);\\n\\n S(chk, r[0]);\\n M(chk, chk, den);\\n if (neq25519(chk, num)) M(r[0], r[0], I);\\n\\n S(chk, r[0]);\\n M(chk, chk, den);\\n if (neq25519(chk, num)) return -1;\\n\\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\\n\\n M(r[3], r[0], r[1]);\\n return 0;\\n}\\n\\nfunction crypto_sign_open(m, sm, n, pk) {\\n var i, mlen;\\n var t = new Uint8Array(32), h = new Uint8Array(64);\\n var p = [gf(), gf(), gf(), gf()],\\n q = [gf(), gf(), gf(), gf()];\\n\\n mlen = -1;\\n if (n < 64) return -1;\\n\\n if (unpackneg(q, pk)) return -1;\\n\\n for (i = 0; i < n; i++) m[i] = sm[i];\\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\\n crypto_hash(h, m, n);\\n reduce(h);\\n scalarmult(p, q, h);\\n\\n scalarbase(q, sm.subarray(32));\\n add(p, q);\\n pack(t, p);\\n\\n n -= 64;\\n if (crypto_verify_32(sm, 0, t, 0)) {\\n for (i = 0; i < n; i++) m[i] = 0;\\n return -1;\\n }\\n\\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\\n mlen = n;\\n return mlen;\\n}\\n\\nvar crypto_secretbox_KEYBYTES = 32,\\n crypto_secretbox_NONCEBYTES = 24,\\n crypto_secretbox_ZEROBYTES = 32,\\n crypto_secretbox_BOXZEROBYTES = 16,\\n crypto_scalarmult_BYTES = 32,\\n crypto_scalarmult_SCALARBYTES = 32,\\n crypto_box_PUBLICKEYBYTES = 32,\\n crypto_box_SECRETKEYBYTES = 32,\\n crypto_box_BEFORENMBYTES = 32,\\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\\n crypto_sign_BYTES = 64,\\n crypto_sign_PUBLICKEYBYTES = 32,\\n crypto_sign_SECRETKEYBYTES = 64,\\n crypto_sign_SEEDBYTES = 32,\\n crypto_hash_BYTES = 64;\\n\\nnacl.lowlevel = {\\n crypto_core_hsalsa20: crypto_core_hsalsa20,\\n crypto_stream_xor: crypto_stream_xor,\\n crypto_stream: crypto_stream,\\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\\n crypto_stream_salsa20: crypto_stream_salsa20,\\n crypto_onetimeauth: crypto_onetimeauth,\\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\\n crypto_verify_16: crypto_verify_16,\\n crypto_verify_32: crypto_verify_32,\\n crypto_secretbox: crypto_secretbox,\\n crypto_secretbox_open: crypto_secretbox_open,\\n crypto_scalarmult: crypto_scalarmult,\\n crypto_scalarmult_base: crypto_scalarmult_base,\\n crypto_box_beforenm: crypto_box_beforenm,\\n crypto_box_afternm: crypto_box_afternm,\\n crypto_box: crypto_box,\\n crypto_box_open: crypto_box_open,\\n crypto_box_keypair: crypto_box_keypair,\\n crypto_hash: crypto_hash,\\n crypto_sign: crypto_sign,\\n crypto_sign_keypair: crypto_sign_keypair,\\n crypto_sign_open: crypto_sign_open,\\n\\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\\n crypto_sign_BYTES: crypto_sign_BYTES,\\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\\n crypto_hash_BYTES: crypto_hash_BYTES\\n};\\n\\n/* High-level API */\\n\\nfunction checkLengths(k, n) {\\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\\n}\\n\\nfunction checkBoxLengths(pk, sk) {\\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\\n}\\n\\nfunction checkArrayTypes() {\\n for (var i = 0; i < arguments.length; i++) {\\n if (!(arguments[i] instanceof Uint8Array))\\n throw new TypeError('unexpected type, use Uint8Array');\\n }\\n}\\n\\nfunction cleanup(arr) {\\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\\n}\\n\\nnacl.randomBytes = function(n) {\\n var b = new Uint8Array(n);\\n randombytes(b, n);\\n return b;\\n};\\n\\nnacl.secretbox = function(msg, nonce, key) {\\n checkArrayTypes(msg, nonce, key);\\n checkLengths(key, nonce);\\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\\n var c = new Uint8Array(m.length);\\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\\n crypto_secretbox(c, m, m.length, nonce, key);\\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\\n};\\n\\nnacl.secretbox.open = function(box, nonce, key) {\\n checkArrayTypes(box, nonce, key);\\n checkLengths(key, nonce);\\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\\n var m = new Uint8Array(c.length);\\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\\n if (c.length < 32) return null;\\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\\n return m.subarray(crypto_secretbox_ZEROBYTES);\\n};\\n\\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\\n\\nnacl.scalarMult = function(n, p) {\\n checkArrayTypes(n, p);\\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\\n var q = new Uint8Array(crypto_scalarmult_BYTES);\\n crypto_scalarmult(q, n, p);\\n return q;\\n};\\n\\nnacl.scalarMult.base = function(n) {\\n checkArrayTypes(n);\\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\\n var q = new Uint8Array(crypto_scalarmult_BYTES);\\n crypto_scalarmult_base(q, n);\\n return q;\\n};\\n\\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\\n\\nnacl.box = function(msg, nonce, publicKey, secretKey) {\\n var k = nacl.box.before(publicKey, secretKey);\\n return nacl.secretbox(msg, nonce, k);\\n};\\n\\nnacl.box.before = function(publicKey, secretKey) {\\n checkArrayTypes(publicKey, secretKey);\\n checkBoxLengths(publicKey, secretKey);\\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\\n crypto_box_beforenm(k, publicKey, secretKey);\\n return k;\\n};\\n\\nnacl.box.after = nacl.secretbox;\\n\\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\\n var k = nacl.box.before(publicKey, secretKey);\\n return nacl.secretbox.open(msg, nonce, k);\\n};\\n\\nnacl.box.open.after = nacl.secretbox.open;\\n\\nnacl.box.keyPair = function() {\\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\\n crypto_box_keypair(pk, sk);\\n return {publicKey: pk, secretKey: sk};\\n};\\n\\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\\n checkArrayTypes(secretKey);\\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\\n throw new Error('bad secret key size');\\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\\n crypto_scalarmult_base(pk, secretKey);\\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\\n};\\n\\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\\n\\nnacl.sign = function(msg, secretKey) {\\n checkArrayTypes(msg, secretKey);\\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\\n throw new Error('bad secret key size');\\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\\n crypto_sign(signedMsg, msg, msg.length, secretKey);\\n return signedMsg;\\n};\\n\\nnacl.sign.open = function(signedMsg, publicKey) {\\n checkArrayTypes(signedMsg, publicKey);\\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\\n throw new Error('bad public key size');\\n var tmp = new Uint8Array(signedMsg.length);\\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\\n if (mlen < 0) return null;\\n var m = new Uint8Array(mlen);\\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\\n return m;\\n};\\n\\nnacl.sign.detached = function(msg, secretKey) {\\n var signedMsg = nacl.sign(msg, secretKey);\\n var sig = new Uint8Array(crypto_sign_BYTES);\\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\\n return sig;\\n};\\n\\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\\n checkArrayTypes(msg, sig, publicKey);\\n if (sig.length !== crypto_sign_BYTES)\\n throw new Error('bad signature size');\\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\\n throw new Error('bad public key size');\\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\\n var i;\\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\\n};\\n\\nnacl.sign.keyPair = function() {\\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\\n crypto_sign_keypair(pk, sk);\\n return {publicKey: pk, secretKey: sk};\\n};\\n\\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\\n checkArrayTypes(secretKey);\\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\\n throw new Error('bad secret key size');\\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\\n};\\n\\nnacl.sign.keyPair.fromSeed = function(seed) {\\n checkArrayTypes(seed);\\n if (seed.length !== crypto_sign_SEEDBYTES)\\n throw new Error('bad seed size');\\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\\n crypto_sign_keypair(pk, sk, true);\\n return {publicKey: pk, secretKey: sk};\\n};\\n\\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\\nnacl.sign.signatureLength = crypto_sign_BYTES;\\n\\nnacl.hash = function(msg) {\\n checkArrayTypes(msg);\\n var h = new Uint8Array(crypto_hash_BYTES);\\n crypto_hash(h, msg, msg.length);\\n return h;\\n};\\n\\nnacl.hash.hashLength = crypto_hash_BYTES;\\n\\nnacl.verify = function(x, y) {\\n checkArrayTypes(x, y);\\n // Zero length arguments are considered not equal.\\n if (x.length === 0 || y.length === 0) return false;\\n if (x.length !== y.length) return false;\\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\\n};\\n\\nnacl.setPRNG = function(fn) {\\n randombytes = fn;\\n};\\n\\n(function() {\\n // Initialize PRNG if environment provides CSPRNG.\\n // If not, methods calling randombytes will throw.\\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\\n if (crypto && crypto.getRandomValues) {\\n // Browsers.\\n var QUOTA = 65536;\\n nacl.setPRNG(function(x, n) {\\n var i, v = new Uint8Array(n);\\n for (i = 0; i < n; i += QUOTA) {\\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\\n }\\n for (i = 0; i < n; i++) x[i] = v[i];\\n cleanup(v);\\n });\\n } else if (true) {\\n // Node.js.\\n crypto = __webpack_require__(/*! crypto */ 2);\\n if (crypto && crypto.randomBytes) {\\n nacl.setPRNG(function(x, n) {\\n var i, v = crypto.randomBytes(n);\\n for (i = 0; i < n; i++) x[i] = v[i];\\n cleanup(v);\\n });\\n }\\n }\\n})();\\n\\n})( true && module.exports ? module.exports : (self.nacl = self.nacl || {}));\\n\\n\\n//# sourceURL=webpack:///./node_modules/tweetnacl/nacl-fast.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uport-base64url/dist/base64url.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/uport-base64url/dist/base64url.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar buffer_1 = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\");\\nvar pad_string_1 = __webpack_require__(/*! ./pad-string */ \\\"./node_modules/uport-base64url/dist/pad-string.js\\\");\\nfunction encode(input, encoding) {\\n if (encoding === void 0) { encoding = \\\"utf8\\\"; }\\n if (buffer_1.Buffer.isBuffer(input)) {\\n return fromBase64(input.toString(\\\"base64\\\"));\\n }\\n return fromBase64(buffer_1.Buffer.from(input, encoding).toString(\\\"base64\\\"));\\n}\\n;\\nfunction decode(base64url, encoding) {\\n if (encoding === void 0) { encoding = \\\"utf8\\\"; }\\n return buffer_1.Buffer.from(toBase64(base64url), \\\"base64\\\").toString(encoding);\\n}\\nfunction toBase64(base64url) {\\n base64url = base64url.toString();\\n return pad_string_1.default(base64url)\\n .replace(/\\\\-/g, \\\"+\\\")\\n .replace(/_/g, \\\"/\\\");\\n}\\nfunction fromBase64(base64) {\\n return base64\\n .replace(/=/g, \\\"\\\")\\n .replace(/\\\\+/g, \\\"-\\\")\\n .replace(/\\\\//g, \\\"_\\\");\\n}\\nfunction toBuffer(base64url) {\\n return buffer_1.Buffer.from(toBase64(base64url), \\\"base64\\\");\\n}\\nvar base64url = encode;\\nbase64url.encode = encode;\\nbase64url.decode = decode;\\nbase64url.toBase64 = toBase64;\\nbase64url.fromBase64 = fromBase64;\\nbase64url.toBuffer = toBuffer;\\nexports.default = base64url;\\n\\n\\n//# sourceURL=webpack:///./node_modules/uport-base64url/dist/base64url.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uport-base64url/dist/pad-string.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/uport-base64url/dist/pad-string.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar buffer_1 = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\");\\nfunction padString(input) {\\n var segmentLength = 4;\\n var stringLength = input.length;\\n var diff = stringLength % segmentLength;\\n if (!diff) {\\n return input;\\n }\\n var position = stringLength;\\n var padLength = segmentLength - diff;\\n var paddedStringLength = stringLength + padLength;\\n var buffer = buffer_1.Buffer.alloc(paddedStringLength);\\n buffer.write(input);\\n while (padLength--) {\\n buffer.write(\\\"=\\\", position++);\\n }\\n return buffer.toString();\\n}\\nexports.default = padString;\\n\\n\\n//# sourceURL=webpack:///./node_modules/uport-base64url/dist/pad-string.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uport-base64url/index.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/uport-base64url/index.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = __webpack_require__(/*! ./dist/base64url */ \\\"./node_modules/uport-base64url/dist/base64url.js\\\").default;\\nmodule.exports.default = module.exports;\\n\\n\\n//# sourceURL=webpack:///./node_modules/uport-base64url/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/util/support/isBufferBrowser.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/util/support/isBufferBrowser.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = function isBuffer(arg) {\\n return arg && typeof arg === 'object'\\n && typeof arg.copy === 'function'\\n && typeof arg.fill === 'function'\\n && typeof arg.readUInt8 === 'function';\\n}\\n\\n//# sourceURL=webpack:///./node_modules/util/support/isBufferBrowser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/util/util.js\":\n/*!***********************************!*\\\n !*** ./node_modules/util/util.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.\\n//\\n// Permission is hereby granted, free of charge, to any person obtaining a\\n// copy of this software and associated documentation files (the\\n// \\\"Software\\\"), to deal in the Software without restriction, including\\n// without limitation the rights to use, copy, modify, merge, publish,\\n// distribute, sublicense, and/or sell copies of the Software, and to permit\\n// persons to whom the Software is furnished to do so, subject to the\\n// following conditions:\\n//\\n// The above copyright notice and this permission notice shall be included\\n// in all copies or substantial portions of the Software.\\n//\\n// THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\\n function getOwnPropertyDescriptors(obj) {\\n var keys = Object.keys(obj);\\n var descriptors = {};\\n for (var i = 0; i < keys.length; i++) {\\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\\n }\\n return descriptors;\\n };\\n\\nvar formatRegExp = /%[sdj%]/g;\\nexports.format = function(f) {\\n if (!isString(f)) {\\n var objects = [];\\n for (var i = 0; i < arguments.length; i++) {\\n objects.push(inspect(arguments[i]));\\n }\\n return objects.join(' ');\\n }\\n\\n var i = 1;\\n var args = arguments;\\n var len = args.length;\\n var str = String(f).replace(formatRegExp, function(x) {\\n if (x === '%%') return '%';\\n if (i >= len) return x;\\n switch (x) {\\n case '%s': return String(args[i++]);\\n case '%d': return Number(args[i++]);\\n case '%j':\\n try {\\n return JSON.stringify(args[i++]);\\n } catch (_) {\\n return '[Circular]';\\n }\\n default:\\n return x;\\n }\\n });\\n for (var x = args[i]; i < len; x = args[++i]) {\\n if (isNull(x) || !isObject(x)) {\\n str += ' ' + x;\\n } else {\\n str += ' ' + inspect(x);\\n }\\n }\\n return str;\\n};\\n\\n\\n// Mark that a method should not be used.\\n// Returns a modified function which warns once by default.\\n// If --no-deprecation is set, then it is a no-op.\\nexports.deprecate = function(fn, msg) {\\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\\n return fn;\\n }\\n\\n // Allow for deprecating things in the process of starting up.\\n if (typeof process === 'undefined') {\\n return function() {\\n return exports.deprecate(fn, msg).apply(this, arguments);\\n };\\n }\\n\\n var warned = false;\\n function deprecated() {\\n if (!warned) {\\n if (process.throwDeprecation) {\\n throw new Error(msg);\\n } else if (process.traceDeprecation) {\\n console.trace(msg);\\n } else {\\n console.error(msg);\\n }\\n warned = true;\\n }\\n return fn.apply(this, arguments);\\n }\\n\\n return deprecated;\\n};\\n\\n\\nvar debugs = {};\\nvar debugEnviron;\\nexports.debuglog = function(set) {\\n if (isUndefined(debugEnviron))\\n debugEnviron = process.env.NODE_DEBUG || '';\\n set = set.toUpperCase();\\n if (!debugs[set]) {\\n if (new RegExp('\\\\\\\\b' + set + '\\\\\\\\b', 'i').test(debugEnviron)) {\\n var pid = process.pid;\\n debugs[set] = function() {\\n var msg = exports.format.apply(exports, arguments);\\n console.error('%s %d: %s', set, pid, msg);\\n };\\n } else {\\n debugs[set] = function() {};\\n }\\n }\\n return debugs[set];\\n};\\n\\n\\n/**\\n * Echos the value of a value. Trys to print the value out\\n * in the best way possible given the different types.\\n *\\n * @param {Object} obj The object to print out.\\n * @param {Object} opts Optional options object that alters the output.\\n */\\n/* legacy: obj, showHidden, depth, colors*/\\nfunction inspect(obj, opts) {\\n // default options\\n var ctx = {\\n seen: [],\\n stylize: stylizeNoColor\\n };\\n // legacy...\\n if (arguments.length >= 3) ctx.depth = arguments[2];\\n if (arguments.length >= 4) ctx.colors = arguments[3];\\n if (isBoolean(opts)) {\\n // legacy...\\n ctx.showHidden = opts;\\n } else if (opts) {\\n // got an \\\"options\\\" object\\n exports._extend(ctx, opts);\\n }\\n // set default options\\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\\n if (isUndefined(ctx.depth)) ctx.depth = 2;\\n if (isUndefined(ctx.colors)) ctx.colors = false;\\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\\n if (ctx.colors) ctx.stylize = stylizeWithColor;\\n return formatValue(ctx, obj, ctx.depth);\\n}\\nexports.inspect = inspect;\\n\\n\\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\\ninspect.colors = {\\n 'bold' : [1, 22],\\n 'italic' : [3, 23],\\n 'underline' : [4, 24],\\n 'inverse' : [7, 27],\\n 'white' : [37, 39],\\n 'grey' : [90, 39],\\n 'black' : [30, 39],\\n 'blue' : [34, 39],\\n 'cyan' : [36, 39],\\n 'green' : [32, 39],\\n 'magenta' : [35, 39],\\n 'red' : [31, 39],\\n 'yellow' : [33, 39]\\n};\\n\\n// Don't use 'blue' not visible on cmd.exe\\ninspect.styles = {\\n 'special': 'cyan',\\n 'number': 'yellow',\\n 'boolean': 'yellow',\\n 'undefined': 'grey',\\n 'null': 'bold',\\n 'string': 'green',\\n 'date': 'magenta',\\n // \\\"name\\\": intentionally not styling\\n 'regexp': 'red'\\n};\\n\\n\\nfunction stylizeWithColor(str, styleType) {\\n var style = inspect.styles[styleType];\\n\\n if (style) {\\n return '\\\\u001b[' + inspect.colors[style][0] + 'm' + str +\\n '\\\\u001b[' + inspect.colors[style][1] + 'm';\\n } else {\\n return str;\\n }\\n}\\n\\n\\nfunction stylizeNoColor(str, styleType) {\\n return str;\\n}\\n\\n\\nfunction arrayToHash(array) {\\n var hash = {};\\n\\n array.forEach(function(val, idx) {\\n hash[val] = true;\\n });\\n\\n return hash;\\n}\\n\\n\\nfunction formatValue(ctx, value, recurseTimes) {\\n // Provide a hook for user-specified inspect functions.\\n // Check that value is an object with an inspect function on it\\n if (ctx.customInspect &&\\n value &&\\n isFunction(value.inspect) &&\\n // Filter out the util module, it's inspect function is special\\n value.inspect !== exports.inspect &&\\n // Also filter out any prototype objects using the circular check.\\n !(value.constructor && value.constructor.prototype === value)) {\\n var ret = value.inspect(recurseTimes, ctx);\\n if (!isString(ret)) {\\n ret = formatValue(ctx, ret, recurseTimes);\\n }\\n return ret;\\n }\\n\\n // Primitive types cannot have properties\\n var primitive = formatPrimitive(ctx, value);\\n if (primitive) {\\n return primitive;\\n }\\n\\n // Look up the keys of the object.\\n var keys = Object.keys(value);\\n var visibleKeys = arrayToHash(keys);\\n\\n if (ctx.showHidden) {\\n keys = Object.getOwnPropertyNames(value);\\n }\\n\\n // IE doesn't make error fields non-enumerable\\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\\n if (isError(value)\\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\\n return formatError(value);\\n }\\n\\n // Some type of object without properties can be shortcutted.\\n if (keys.length === 0) {\\n if (isFunction(value)) {\\n var name = value.name ? ': ' + value.name : '';\\n return ctx.stylize('[Function' + name + ']', 'special');\\n }\\n if (isRegExp(value)) {\\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\\n }\\n if (isDate(value)) {\\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\\n }\\n if (isError(value)) {\\n return formatError(value);\\n }\\n }\\n\\n var base = '', array = false, braces = ['{', '}'];\\n\\n // Make Array say that they are Array\\n if (isArray(value)) {\\n array = true;\\n braces = ['[', ']'];\\n }\\n\\n // Make functions say that they are functions\\n if (isFunction(value)) {\\n var n = value.name ? ': ' + value.name : '';\\n base = ' [Function' + n + ']';\\n }\\n\\n // Make RegExps say that they are RegExps\\n if (isRegExp(value)) {\\n base = ' ' + RegExp.prototype.toString.call(value);\\n }\\n\\n // Make dates with properties first say the date\\n if (isDate(value)) {\\n base = ' ' + Date.prototype.toUTCString.call(value);\\n }\\n\\n // Make error with message first say the error\\n if (isError(value)) {\\n base = ' ' + formatError(value);\\n }\\n\\n if (keys.length === 0 && (!array || value.length == 0)) {\\n return braces[0] + base + braces[1];\\n }\\n\\n if (recurseTimes < 0) {\\n if (isRegExp(value)) {\\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\\n } else {\\n return ctx.stylize('[Object]', 'special');\\n }\\n }\\n\\n ctx.seen.push(value);\\n\\n var output;\\n if (array) {\\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\\n } else {\\n output = keys.map(function(key) {\\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\\n });\\n }\\n\\n ctx.seen.pop();\\n\\n return reduceToSingleString(output, base, braces);\\n}\\n\\n\\nfunction formatPrimitive(ctx, value) {\\n if (isUndefined(value))\\n return ctx.stylize('undefined', 'undefined');\\n if (isString(value)) {\\n var simple = '\\\\'' + JSON.stringify(value).replace(/^\\\"|\\\"$/g, '')\\n .replace(/'/g, \\\"\\\\\\\\'\\\")\\n .replace(/\\\\\\\\\\\"/g, '\\\"') + '\\\\'';\\n return ctx.stylize(simple, 'string');\\n }\\n if (isNumber(value))\\n return ctx.stylize('' + value, 'number');\\n if (isBoolean(value))\\n return ctx.stylize('' + value, 'boolean');\\n // For some reason typeof null is \\\"object\\\", so special case here.\\n if (isNull(value))\\n return ctx.stylize('null', 'null');\\n}\\n\\n\\nfunction formatError(value) {\\n return '[' + Error.prototype.toString.call(value) + ']';\\n}\\n\\n\\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\\n var output = [];\\n for (var i = 0, l = value.length; i < l; ++i) {\\n if (hasOwnProperty(value, String(i))) {\\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\\n String(i), true));\\n } else {\\n output.push('');\\n }\\n }\\n keys.forEach(function(key) {\\n if (!key.match(/^\\\\d+$/)) {\\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\\n key, true));\\n }\\n });\\n return output;\\n}\\n\\n\\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\\n var name, str, desc;\\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\\n if (desc.get) {\\n if (desc.set) {\\n str = ctx.stylize('[Getter/Setter]', 'special');\\n } else {\\n str = ctx.stylize('[Getter]', 'special');\\n }\\n } else {\\n if (desc.set) {\\n str = ctx.stylize('[Setter]', 'special');\\n }\\n }\\n if (!hasOwnProperty(visibleKeys, key)) {\\n name = '[' + key + ']';\\n }\\n if (!str) {\\n if (ctx.seen.indexOf(desc.value) < 0) {\\n if (isNull(recurseTimes)) {\\n str = formatValue(ctx, desc.value, null);\\n } else {\\n str = formatValue(ctx, desc.value, recurseTimes - 1);\\n }\\n if (str.indexOf('\\\\n') > -1) {\\n if (array) {\\n str = str.split('\\\\n').map(function(line) {\\n return ' ' + line;\\n }).join('\\\\n').substr(2);\\n } else {\\n str = '\\\\n' + str.split('\\\\n').map(function(line) {\\n return ' ' + line;\\n }).join('\\\\n');\\n }\\n }\\n } else {\\n str = ctx.stylize('[Circular]', 'special');\\n }\\n }\\n if (isUndefined(name)) {\\n if (array && key.match(/^\\\\d+$/)) {\\n return str;\\n }\\n name = JSON.stringify('' + key);\\n if (name.match(/^\\\"([a-zA-Z_][a-zA-Z_0-9]*)\\\"$/)) {\\n name = name.substr(1, name.length - 2);\\n name = ctx.stylize(name, 'name');\\n } else {\\n name = name.replace(/'/g, \\\"\\\\\\\\'\\\")\\n .replace(/\\\\\\\\\\\"/g, '\\\"')\\n .replace(/(^\\\"|\\\"$)/g, \\\"'\\\");\\n name = ctx.stylize(name, 'string');\\n }\\n }\\n\\n return name + ': ' + str;\\n}\\n\\n\\nfunction reduceToSingleString(output, base, braces) {\\n var numLinesEst = 0;\\n var length = output.reduce(function(prev, cur) {\\n numLinesEst++;\\n if (cur.indexOf('\\\\n') >= 0) numLinesEst++;\\n return prev + cur.replace(/\\\\u001b\\\\[\\\\d\\\\d?m/g, '').length + 1;\\n }, 0);\\n\\n if (length > 60) {\\n return braces[0] +\\n (base === '' ? '' : base + '\\\\n ') +\\n ' ' +\\n output.join(',\\\\n ') +\\n ' ' +\\n braces[1];\\n }\\n\\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\\n}\\n\\n\\n// NOTE: These type checking functions intentionally don't use `instanceof`\\n// because it is fragile and can be easily faked with `Object.create()`.\\nfunction isArray(ar) {\\n return Array.isArray(ar);\\n}\\nexports.isArray = isArray;\\n\\nfunction isBoolean(arg) {\\n return typeof arg === 'boolean';\\n}\\nexports.isBoolean = isBoolean;\\n\\nfunction isNull(arg) {\\n return arg === null;\\n}\\nexports.isNull = isNull;\\n\\nfunction isNullOrUndefined(arg) {\\n return arg == null;\\n}\\nexports.isNullOrUndefined = isNullOrUndefined;\\n\\nfunction isNumber(arg) {\\n return typeof arg === 'number';\\n}\\nexports.isNumber = isNumber;\\n\\nfunction isString(arg) {\\n return typeof arg === 'string';\\n}\\nexports.isString = isString;\\n\\nfunction isSymbol(arg) {\\n return typeof arg === 'symbol';\\n}\\nexports.isSymbol = isSymbol;\\n\\nfunction isUndefined(arg) {\\n return arg === void 0;\\n}\\nexports.isUndefined = isUndefined;\\n\\nfunction isRegExp(re) {\\n return isObject(re) && objectToString(re) === '[object RegExp]';\\n}\\nexports.isRegExp = isRegExp;\\n\\nfunction isObject(arg) {\\n return typeof arg === 'object' && arg !== null;\\n}\\nexports.isObject = isObject;\\n\\nfunction isDate(d) {\\n return isObject(d) && objectToString(d) === '[object Date]';\\n}\\nexports.isDate = isDate;\\n\\nfunction isError(e) {\\n return isObject(e) &&\\n (objectToString(e) === '[object Error]' || e instanceof Error);\\n}\\nexports.isError = isError;\\n\\nfunction isFunction(arg) {\\n return typeof arg === 'function';\\n}\\nexports.isFunction = isFunction;\\n\\nfunction isPrimitive(arg) {\\n return arg === null ||\\n typeof arg === 'boolean' ||\\n typeof arg === 'number' ||\\n typeof arg === 'string' ||\\n typeof arg === 'symbol' || // ES6 symbol\\n typeof arg === 'undefined';\\n}\\nexports.isPrimitive = isPrimitive;\\n\\nexports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ \\\"./node_modules/util/support/isBufferBrowser.js\\\");\\n\\nfunction objectToString(o) {\\n return Object.prototype.toString.call(o);\\n}\\n\\n\\nfunction pad(n) {\\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\\n}\\n\\n\\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\\n 'Oct', 'Nov', 'Dec'];\\n\\n// 26 Feb 16:19:34\\nfunction timestamp() {\\n var d = new Date();\\n var time = [pad(d.getHours()),\\n pad(d.getMinutes()),\\n pad(d.getSeconds())].join(':');\\n return [d.getDate(), months[d.getMonth()], time].join(' ');\\n}\\n\\n\\n// log is just a thin wrapper to console.log that prepends a timestamp\\nexports.log = function() {\\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\\n};\\n\\n\\n/**\\n * Inherit the prototype methods from one constructor into another.\\n *\\n * The Function.prototype.inherits from lang.js rewritten as a standalone\\n * function (not on Function.prototype). NOTE: If this file is to be loaded\\n * during bootstrapping this function needs to be rewritten using some native\\n * functions as prototype setup using normal JavaScript does not work as\\n * expected during bootstrapping (see mirror.js in r114903).\\n *\\n * @param {function} ctor Constructor function which needs to inherit the\\n * prototype.\\n * @param {function} superCtor Constructor function to inherit prototype from.\\n */\\nexports.inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\n\\nexports._extend = function(origin, add) {\\n // Don't do anything if add isn't an object\\n if (!add || !isObject(add)) return origin;\\n\\n var keys = Object.keys(add);\\n var i = keys.length;\\n while (i--) {\\n origin[keys[i]] = add[keys[i]];\\n }\\n return origin;\\n};\\n\\nfunction hasOwnProperty(obj, prop) {\\n return Object.prototype.hasOwnProperty.call(obj, prop);\\n}\\n\\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\\n\\nexports.promisify = function promisify(original) {\\n if (typeof original !== 'function')\\n throw new TypeError('The \\\"original\\\" argument must be of type Function');\\n\\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\\n var fn = original[kCustomPromisifiedSymbol];\\n if (typeof fn !== 'function') {\\n throw new TypeError('The \\\"util.promisify.custom\\\" argument must be of type Function');\\n }\\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\\n value: fn, enumerable: false, writable: false, configurable: true\\n });\\n return fn;\\n }\\n\\n function fn() {\\n var promiseResolve, promiseReject;\\n var promise = new Promise(function (resolve, reject) {\\n promiseResolve = resolve;\\n promiseReject = reject;\\n });\\n\\n var args = [];\\n for (var i = 0; i < arguments.length; i++) {\\n args.push(arguments[i]);\\n }\\n args.push(function (err, value) {\\n if (err) {\\n promiseReject(err);\\n } else {\\n promiseResolve(value);\\n }\\n });\\n\\n try {\\n original.apply(this, args);\\n } catch (err) {\\n promiseReject(err);\\n }\\n\\n return promise;\\n }\\n\\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\\n\\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\\n value: fn, enumerable: false, writable: false, configurable: true\\n });\\n return Object.defineProperties(\\n fn,\\n getOwnPropertyDescriptors(original)\\n );\\n}\\n\\nexports.promisify.custom = kCustomPromisifiedSymbol\\n\\nfunction callbackifyOnRejected(reason, cb) {\\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\\n // Because `null` is a special error value in callbacks which means \\\"no error\\n // occurred\\\", we error-wrap so the callback consumer can distinguish between\\n // \\\"the promise rejected with null\\\" or \\\"the promise fulfilled with undefined\\\".\\n if (!reason) {\\n var newReason = new Error('Promise was rejected with a falsy value');\\n newReason.reason = reason;\\n reason = newReason;\\n }\\n return cb(reason);\\n}\\n\\nfunction callbackify(original) {\\n if (typeof original !== 'function') {\\n throw new TypeError('The \\\"original\\\" argument must be of type Function');\\n }\\n\\n // We DO NOT return the promise as it gives the user a false sense that\\n // the promise is actually somehow related to the callback's execution\\n // and that the callback throwing will reject the promise.\\n function callbackified() {\\n var args = [];\\n for (var i = 0; i < arguments.length; i++) {\\n args.push(arguments[i]);\\n }\\n\\n var maybeCb = args.pop();\\n if (typeof maybeCb !== 'function') {\\n throw new TypeError('The last argument must be of type Function');\\n }\\n var self = this;\\n var cb = function() {\\n return maybeCb.apply(self, arguments);\\n };\\n // In true node style we process the callback on `nextTick` with all the\\n // implications (stack, `uncaughtException`, `async_hooks`)\\n original.apply(this, args)\\n .then(function(ret) { process.nextTick(cb, null, ret) },\\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\\n }\\n\\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\\n Object.defineProperties(callbackified,\\n getOwnPropertyDescriptors(original));\\n return callbackified;\\n}\\nexports.callbackify = callbackify;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \\\"./node_modules/process/browser.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/util/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uuid/rng-browser.js\":\n/*!******************************************!*\\\n !*** ./node_modules/uuid/rng-browser.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(global) {\\nvar rng;\\n\\nif (global.crypto && crypto.getRandomValues) {\\n // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\\n // Moderately fast, high quality\\n var _rnds8 = new Uint8Array(16);\\n rng = function whatwgRNG() {\\n crypto.getRandomValues(_rnds8);\\n return _rnds8;\\n };\\n}\\n\\nif (!rng) {\\n // Math.random()-based (RNG)\\n //\\n // If all else fails, use Math.random(). It's fast, but is of unspecified\\n // quality.\\n var _rnds = new Array(16);\\n rng = function() {\\n for (var i = 0, r; i < 16; i++) {\\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\\n _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\\n }\\n\\n return _rnds;\\n };\\n}\\n\\nmodule.exports = rng;\\n\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/uuid/rng-browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uuid/uuid.js\":\n/*!***********************************!*\\\n !*** ./node_modules/uuid/uuid.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"// uuid.js\\n//\\n// Copyright (c) 2010-2012 Robert Kieffer\\n// MIT License - http://opensource.org/licenses/mit-license.php\\n\\n// Unique ID creation requires a high quality random # generator. We feature\\n// detect to determine the best RNG source, normalizing to a function that\\n// returns 128-bits of randomness, since that's what's usually required\\nvar _rng = __webpack_require__(/*! ./rng */ \\\"./node_modules/uuid/rng-browser.js\\\");\\n\\n// Maps for number <-> hex string conversion\\nvar _byteToHex = [];\\nvar _hexToByte = {};\\nfor (var i = 0; i < 256; i++) {\\n _byteToHex[i] = (i + 0x100).toString(16).substr(1);\\n _hexToByte[_byteToHex[i]] = i;\\n}\\n\\n// **`parse()` - Parse a UUID into it's component bytes**\\nfunction parse(s, buf, offset) {\\n var i = (buf && offset) || 0, ii = 0;\\n\\n buf = buf || [];\\n s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\\n if (ii < 16) { // Don't overflow!\\n buf[i + ii++] = _hexToByte[oct];\\n }\\n });\\n\\n // Zero out remaining bytes if string was short\\n while (ii < 16) {\\n buf[i + ii++] = 0;\\n }\\n\\n return buf;\\n}\\n\\n// **`unparse()` - Convert UUID byte array (ala parse()) into a string**\\nfunction unparse(buf, offset) {\\n var i = offset || 0, bth = _byteToHex;\\n return bth[buf[i++]] + bth[buf[i++]] +\\n bth[buf[i++]] + bth[buf[i++]] + '-' +\\n bth[buf[i++]] + bth[buf[i++]] + '-' +\\n bth[buf[i++]] + bth[buf[i++]] + '-' +\\n bth[buf[i++]] + bth[buf[i++]] + '-' +\\n bth[buf[i++]] + bth[buf[i++]] +\\n bth[buf[i++]] + bth[buf[i++]] +\\n bth[buf[i++]] + bth[buf[i++]];\\n}\\n\\n// **`v1()` - Generate time-based UUID**\\n//\\n// Inspired by https://github.com/LiosK/UUID.js\\n// and http://docs.python.org/library/uuid.html\\n\\n// random #'s we need to init node and clockseq\\nvar _seedBytes = _rng();\\n\\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\\nvar _nodeId = [\\n _seedBytes[0] | 0x01,\\n _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\\n];\\n\\n// Per 4.2.2, randomize (14 bit) clockseq\\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\\n\\n// Previous uuid creation time\\nvar _lastMSecs = 0, _lastNSecs = 0;\\n\\n// See https://github.com/broofa/node-uuid for API details\\nfunction v1(options, buf, offset) {\\n var i = buf && offset || 0;\\n var b = buf || [];\\n\\n options = options || {};\\n\\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\\n\\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\\n\\n // Per 4.2.1.2, use count of uuid's generated during the current clock\\n // cycle to simulate higher resolution clock\\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\\n\\n // Time since last uuid creation (in msecs)\\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\\n\\n // Per 4.2.1.2, Bump clockseq on clock regression\\n if (dt < 0 && options.clockseq === undefined) {\\n clockseq = clockseq + 1 & 0x3fff;\\n }\\n\\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\\n // time interval\\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\\n nsecs = 0;\\n }\\n\\n // Per 4.2.1.2 Throw error if too many uuids are requested\\n if (nsecs >= 10000) {\\n throw new Error('uuid.v1(): Can\\\\'t create more than 10M uuids/sec');\\n }\\n\\n _lastMSecs = msecs;\\n _lastNSecs = nsecs;\\n _clockseq = clockseq;\\n\\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\\n msecs += 12219292800000;\\n\\n // `time_low`\\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\\n b[i++] = tl >>> 24 & 0xff;\\n b[i++] = tl >>> 16 & 0xff;\\n b[i++] = tl >>> 8 & 0xff;\\n b[i++] = tl & 0xff;\\n\\n // `time_mid`\\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\\n b[i++] = tmh >>> 8 & 0xff;\\n b[i++] = tmh & 0xff;\\n\\n // `time_high_and_version`\\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\\n b[i++] = tmh >>> 16 & 0xff;\\n\\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\\n b[i++] = clockseq >>> 8 | 0x80;\\n\\n // `clock_seq_low`\\n b[i++] = clockseq & 0xff;\\n\\n // `node`\\n var node = options.node || _nodeId;\\n for (var n = 0; n < 6; n++) {\\n b[i + n] = node[n];\\n }\\n\\n return buf ? buf : unparse(b);\\n}\\n\\n// **`v4()` - Generate random UUID**\\n\\n// See https://github.com/broofa/node-uuid for API details\\nfunction v4(options, buf, offset) {\\n // Deprecated - 'format' argument, as supported in v1.2\\n var i = buf && offset || 0;\\n\\n if (typeof(options) == 'string') {\\n buf = options == 'binary' ? new Array(16) : null;\\n options = null;\\n }\\n options = options || {};\\n\\n var rnds = options.random || (options.rng || _rng)();\\n\\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\\n\\n // Copy bytes to buffer, if provided\\n if (buf) {\\n for (var ii = 0; ii < 16; ii++) {\\n buf[i + ii] = rnds[ii];\\n }\\n }\\n\\n return buf || unparse(rnds);\\n}\\n\\n// Export public API\\nvar uuid = v4;\\nuuid.v1 = v1;\\nuuid.v4 = v4;\\nuuid.parse = parse;\\nuuid.unparse = unparse;\\n\\nmodule.exports = uuid;\\n\\n\\n//# sourceURL=webpack:///./node_modules/uuid/uuid.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/varint/decode.js\":\n/*!***************************************!*\\\n !*** ./node_modules/varint/decode.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = read\\n\\nvar MSB = 0x80\\n , REST = 0x7F\\n\\nfunction read(buf, offset) {\\n var res = 0\\n , offset = offset || 0\\n , shift = 0\\n , counter = offset\\n , b\\n , l = buf.length\\n\\n do {\\n if (counter >= l) {\\n read.bytes = 0\\n throw new RangeError('Could not decode varint')\\n }\\n b = buf[counter++]\\n res += shift < 28\\n ? (b & REST) << shift\\n : (b & REST) * Math.pow(2, shift)\\n shift += 7\\n } while (b >= MSB)\\n\\n read.bytes = counter - offset\\n\\n return res\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/varint/decode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/varint/encode.js\":\n/*!***************************************!*\\\n !*** ./node_modules/varint/encode.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = encode\\n\\nvar MSB = 0x80\\n , REST = 0x7F\\n , MSBALL = ~REST\\n , INT = Math.pow(2, 31)\\n\\nfunction encode(num, out, offset) {\\n out = out || []\\n offset = offset || 0\\n var oldOffset = offset\\n\\n while(num >= INT) {\\n out[offset++] = (num & 0xFF) | MSB\\n num /= 128\\n }\\n while(num & MSBALL) {\\n out[offset++] = (num & 0xFF) | MSB\\n num >>>= 7\\n }\\n out[offset] = num | 0\\n \\n encode.bytes = offset - oldOffset + 1\\n \\n return out\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/varint/encode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/varint/index.js\":\n/*!**************************************!*\\\n !*** ./node_modules/varint/index.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = {\\n encode: __webpack_require__(/*! ./encode.js */ \\\"./node_modules/varint/encode.js\\\")\\n , decode: __webpack_require__(/*! ./decode.js */ \\\"./node_modules/varint/decode.js\\\")\\n , encodingLength: __webpack_require__(/*! ./length.js */ \\\"./node_modules/varint/length.js\\\")\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/varint/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/varint/length.js\":\n/*!***************************************!*\\\n !*** ./node_modules/varint/length.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"\\nvar N1 = Math.pow(2, 7)\\nvar N2 = Math.pow(2, 14)\\nvar N3 = Math.pow(2, 21)\\nvar N4 = Math.pow(2, 28)\\nvar N5 = Math.pow(2, 35)\\nvar N6 = Math.pow(2, 42)\\nvar N7 = Math.pow(2, 49)\\nvar N8 = Math.pow(2, 56)\\nvar N9 = Math.pow(2, 63)\\n\\nmodule.exports = function (value) {\\n return (\\n value < N1 ? 1\\n : value < N2 ? 2\\n : value < N3 ? 3\\n : value < N4 ? 4\\n : value < N5 ? 5\\n : value < N6 ? 6\\n : value < N7 ? 7\\n : value < N8 ? 8\\n : value < N9 ? 9\\n : 10\\n )\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/varint/length.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/amd-options.js\":\n/*!****************************************!*\\\n !*** (webpack)/buildin/amd-options.js ***!\n \\****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\\nmodule.exports = __webpack_amd_options__;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, {}))\\n\\n//# sourceURL=webpack:///(webpack)/buildin/amd-options.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/global.js\":\n/*!***********************************!*\\\n !*** (webpack)/buildin/global.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"var g;\\n\\n// This works in non-strict mode\\ng = (function() {\\n\\treturn this;\\n})();\\n\\ntry {\\n\\t// This works if eval is allowed (see CSP)\\n\\tg = g || new Function(\\\"return this\\\")();\\n} catch (e) {\\n\\t// This works if the window reference is available\\n\\tif (typeof window === \\\"object\\\") g = window;\\n}\\n\\n// g can still be undefined, but nothing to do about it...\\n// We return undefined, instead of nothing here, so it's\\n// easier to handle this case. if(!global) { ...}\\n\\nmodule.exports = g;\\n\\n\\n//# sourceURL=webpack:///(webpack)/buildin/global.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/module.js\":\n/*!***********************************!*\\\n !*** (webpack)/buildin/module.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = function(module) {\\n\\tif (!module.webpackPolyfill) {\\n\\t\\tmodule.deprecate = function() {};\\n\\t\\tmodule.paths = [];\\n\\t\\t// module.parent = undefined by default\\n\\t\\tif (!module.children) module.children = [];\\n\\t\\tObject.defineProperty(module, \\\"loaded\\\", {\\n\\t\\t\\tenumerable: true,\\n\\t\\t\\tget: function() {\\n\\t\\t\\t\\treturn module.l;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tObject.defineProperty(module, \\\"id\\\", {\\n\\t\\t\\tenumerable: true,\\n\\t\\t\\tget: function() {\\n\\t\\t\\t\\treturn module.i;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tmodule.webpackPolyfill = 1;\\n\\t}\\n\\treturn module;\\n};\\n\\n\\n//# sourceURL=webpack:///(webpack)/buildin/module.js?\");\n\n/***/ }),\n\n/***/ \"./src/CopyButton_react.jsx\":\n/*!**********************************!*\\\n !*** ./src/CopyButton_react.jsx ***!\n \\**********************************/\n/*! exports provided: CopyButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"CopyButton\\\", function() { return CopyButton; });\\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \\\"./node_modules/@babel/runtime/helpers/classCallCheck.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \\\"./node_modules/@babel/runtime/helpers/createClass.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \\\"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \\\"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \\\"./node_modules/@babel/runtime/helpers/inherits.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ \\\"./node_modules/react/index.js\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var _fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @fortawesome/react-fontawesome */ \\\"./node_modules/@fortawesome/react-fontawesome/index.es.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faCheck */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils */ \\\"./src/utils.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvar style = __webpack_require__(/*! style-loader!./style.less */ \\\"./node_modules/style-loader/index.js!./src/style.less\\\");\\n\\nvar CopyButton =\\n/*#__PURE__*/\\nfunction (_React$Component) {\\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(CopyButton, _React$Component);\\n\\n function CopyButton(props) {\\n var _this;\\n\\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CopyButton);\\n\\n _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(CopyButton).call(this, props));\\n _this.state = {\\n showCheck: false\\n };\\n return _this;\\n }\\n\\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(CopyButton, [{\\n key: \\\"_onClick\\\",\\n value: function _onClick() {\\n var _this2 = this;\\n\\n Object(_utils__WEBPACK_IMPORTED_MODULE_8__[\\\"addToClipboard\\\"])(this.props.address);\\n this.setState({\\n showCheck: true\\n });\\n setTimeout(function () {\\n _this2.setState({\\n showCheck: false\\n });\\n }, 2000);\\n }\\n }, {\\n key: \\\"render\\\",\\n value: function render() {\\n var _this3 = this;\\n\\n var icon = this.state.showCheck ? _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_7__[\\\"faCheck\\\"] : null;\\n return react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(\\\"div\\\", {\\n className: style.addressAndCheck\\n }, react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(\\\"div\\\", {\\n className: style.addressWrapper,\\n onClick: function onClick() {\\n return _this3._onClick();\\n }\\n }, react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(\\\"img\\\", {\\n src: \\\"https://i.imgur.com/zs8M8dg.png\\\",\\n alt: \\\"Wallet\\\"\\n }), react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(\\\"p\\\", {\\n className: style.address\\n }, \\\"\\\".concat(this.props.address.substr(0, 5), \\\"...\\\").concat(this.props.address.substr(-5)))), icon && react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_6__[\\\"FontAwesomeIcon\\\"], {\\n icon: icon\\n }));\\n }\\n }]);\\n\\n return CopyButton;\\n}(react__WEBPACK_IMPORTED_MODULE_5___default.a.Component);\\n;\\n\\n//# sourceURL=webpack:///./src/CopyButton_react.jsx?\");\n\n/***/ }),\n\n/***/ \"./src/ProfileHover.jsx\":\n/*!******************************!*\\\n !*** ./src/ProfileHover.jsx ***!\n \\******************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"default\\\", function() { return ProfileHover; });\\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\");\\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \\\"./node_modules/@babel/runtime/helpers/classCallCheck.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \\\"./node_modules/@babel/runtime/helpers/createClass.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \\\"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \\\"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \\\"./node_modules/@babel/runtime/helpers/inherits.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\\n/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ \\\"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react */ \\\"./node_modules/react/index.js\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__);\\n/* harmony import */ var _3box_lib_api__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! 3box/lib/api */ \\\"./node_modules/3box/lib/api.js\\\");\\n/* harmony import */ var _3box_lib_api__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_3box_lib_api__WEBPACK_IMPORTED_MODULE_9__);\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils */ \\\"./src/utils.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvar _require = __webpack_require__(/*! ./html */ \\\"./src/html.jsx\\\")({\\n React: react__WEBPACK_IMPORTED_MODULE_8___default.a,\\n Fragment: react__WEBPACK_IMPORTED_MODULE_8__[\\\"Fragment\\\"]\\n}),\\n BaseTemplate = _require.BaseTemplate,\\n LoadingTemplate = _require.LoadingTemplate;\\n\\nvar ProfileHover =\\n/*#__PURE__*/\\nfunction (_React$PureComponent) {\\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(ProfileHover, _React$PureComponent);\\n\\n function ProfileHover(props) {\\n var _this;\\n\\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, ProfileHover);\\n\\n _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(ProfileHover).call(this, props));\\n _this.state = {\\n profile: undefined,\\n verified: undefined,\\n adjustOrientation: undefined,\\n isMobile: false,\\n showHover: false,\\n hasWeb3Mobile: false,\\n copySuccessful: ''\\n };\\n _this.selector = react__WEBPACK_IMPORTED_MODULE_8___default.a.createRef();\\n _this.checkWindowSize = _this.checkWindowSize.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_this)));\\n _this.handleShowHover = _this.handleShowHover.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_this)));\\n _this.handleCopySuccessful = _this.handleCopySuccessful.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_this)));\\n _this.checkHasWeb3Mobile = _this.checkHasWeb3Mobile.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_this)));\\n return _this;\\n }\\n\\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(ProfileHover, [{\\n key: \\\"componentDidCatch\\\",\\n value: function componentDidCatch(error, info) {\\n console.error({\\n error: error,\\n info: info\\n });\\n }\\n }, {\\n key: \\\"componentDidMount\\\",\\n value: function componentDidMount() {\\n this.setState({\\n isMobile: Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"checkIsMobile\\\"])()\\n });\\n this.checkHasWeb3Mobile();\\n\\n this._fetchProfile();\\n }\\n }, {\\n key: \\\"componentDidUpdate\\\",\\n value: function componentDidUpdate(prevProps) {\\n if (this.props.address !== prevProps.address) {\\n this._fetchProfile();\\n }\\n }\\n }, {\\n key: \\\"_fetchProfile\\\",\\n value: function () {\\n var _fetchProfile2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(\\n /*#__PURE__*/\\n _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee() {\\n var profile, verified;\\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _context.prev = 0;\\n _context.next = 3;\\n return Object(_3box_lib_api__WEBPACK_IMPORTED_MODULE_9__[\\\"getProfile\\\"])(this.props.address);\\n\\n case 3:\\n profile = _context.sent;\\n _context.next = 6;\\n return Object(_3box_lib_api__WEBPACK_IMPORTED_MODULE_9__[\\\"getVerifiedAccounts\\\"])(profile);\\n\\n case 6:\\n verified = _context.sent;\\n this.setState({\\n profile: profile,\\n verified: verified,\\n hasUpdated: false\\n });\\n _context.next = 13;\\n break;\\n\\n case 10:\\n _context.prev = 10;\\n _context.t0 = _context[\\\"catch\\\"](0);\\n console.error('3box profile fetch failed', _context.t0);\\n\\n case 13:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this, [[0, 10]]);\\n }));\\n\\n function _fetchProfile() {\\n return _fetchProfile2.apply(this, arguments);\\n }\\n\\n return _fetchProfile;\\n }()\\n }, {\\n key: \\\"checkWindowSize\\\",\\n value: function checkWindowSize(isNotMobile) {\\n try {\\n var hasUpdated = this.state.hasUpdated;\\n\\n if (!hasUpdated && isNotMobile) {\\n var adjustOrientation = this.state.adjustOrientation;\\n var height = window.innerHeight;\\n var rect = this.selector.current.getBoundingClientRect();\\n var elHeight = rect.height;\\n var elY = rect.y;\\n var updateOrientation = adjustOrientation;\\n\\n if (elHeight + elY > height) {\\n updateOrientation = 'top';\\n } else if (elY < 0) {\\n updateOrientation = 'bottom';\\n }\\n\\n this.setState({\\n adjustOrientation: updateOrientation,\\n hasUpdated: true\\n });\\n }\\n } catch (error) {\\n console.error(error);\\n }\\n }\\n }, {\\n key: \\\"checkHasWeb3Mobile\\\",\\n value: function checkHasWeb3Mobile() {\\n var hasWeb3Mobile = Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"checkIsMobile\\\"])() && (typeof window.web3 !== 'undefined' || typeof window.ethereum !== 'undefined');\\n this.setState({\\n hasWeb3Mobile: hasWeb3Mobile\\n });\\n }\\n }, {\\n key: \\\"handleShowHover\\\",\\n value: function handleShowHover(isMobile) {\\n var _this2 = this;\\n\\n var _this$state = this.state,\\n showHover = _this$state.showHover,\\n hasUpdated = _this$state.hasUpdated;\\n if (isMobile) this.setState({\\n showHover: !showHover\\n }, function () {\\n if (!hasUpdated) _this2.checkWindowSize(true);\\n });\\n }\\n }, {\\n key: \\\"handleCopySuccessful\\\",\\n value: function handleCopySuccessful(field) {\\n var _this3 = this;\\n\\n this.setState({\\n copySuccessful: field\\n }, function () {\\n return setTimeout(function () {\\n _this3.setState({\\n copySuccessful: ''\\n });\\n }, 2000);\\n });\\n }\\n }, {\\n key: \\\"render\\\",\\n value: function render() {\\n var _this$props = this.props,\\n address = _this$props.address,\\n fullDisplay = _this$props.fullDisplay,\\n children = _this$props.children,\\n noTheme = _this$props.noTheme,\\n noImgs = _this$props.noImgs,\\n noProfileImg = _this$props.noProfileImg,\\n noCoverImg = _this$props.noCoverImg,\\n orientation = _this$props.orientation,\\n url = _this$props.url,\\n showName = _this$props.showName,\\n tileStyle = _this$props.tileStyle;\\n var _this$state2 = this.state,\\n profile = _this$state2.profile,\\n verified = _this$state2.verified,\\n adjustOrientation = _this$state2.adjustOrientation,\\n isMobile = _this$state2.isMobile,\\n showHover = _this$state2.showHover,\\n hasWeb3Mobile = _this$state2.hasWeb3Mobile,\\n copySuccessful = _this$state2.copySuccessful;\\n\\n if (address == null) {\\n return null;\\n }\\n\\n var opts = {\\n html: noTheme ? children : undefined,\\n noImgs: noImgs,\\n noProfileImg: noProfileImg,\\n noCoverImg: noCoverImg,\\n showName: showName,\\n tileStyle: tileStyle,\\n url: Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"formatUrl\\\"])(url),\\n orientation: adjustOrientation || orientation || 'right'\\n };\\n var addressDisplay = Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"getAddressDisplay\\\"])(address, fullDisplay ? 'full' : undefined);\\n var data = Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"formatProfileData\\\"])(profile, verified, address, addressDisplay);\\n\\n if (profile == null) {\\n return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(LoadingTemplate, {\\n data: data,\\n opts: opts,\\n isMobile: isMobile,\\n showHover: showHover,\\n handleShowHover: this.handleShowHover,\\n ref: this.selector,\\n checkWindowSize: this.checkWindowSize\\n });\\n }\\n\\n if (profile.status === 'error') {\\n return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(BaseTemplate, {\\n data: data,\\n opts: opts,\\n id: address,\\n isMobile: isMobile,\\n showHover: showHover,\\n checkWindowSize: this.checkWindowSize,\\n ref: this.selector,\\n handleShowHover: this.handleShowHover\\n });\\n }\\n\\n return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(BaseTemplate, {\\n data: data,\\n opts: opts,\\n id: address,\\n hasWeb3Mobile: hasWeb3Mobile,\\n isMobile: isMobile,\\n showHover: showHover,\\n ref: this.selector,\\n handleShowHover: this.handleShowHover,\\n checkWindowSize: this.checkWindowSize,\\n handleCopySuccessful: this.handleCopySuccessful,\\n copySuccessful: copySuccessful\\n });\\n }\\n }]);\\n\\n return ProfileHover;\\n}(react__WEBPACK_IMPORTED_MODULE_8___default.a.PureComponent);\\n\\n\\n\\n//# sourceURL=webpack:///./src/ProfileHover.jsx?\");\n\n/***/ }),\n\n/***/ \"./src/html.jsx\":\n/*!**********************!*\\\n !*** ./src/html.jsx ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var _require = __webpack_require__(/*! ./CopyButton */ \\\"./src/CopyButton_react.jsx\\\"),\\n CopyButton = _require.CopyButton;\\n\\nvar _require2 = __webpack_require__(/*! ./utils */ \\\"./src/utils.js\\\"),\\n addToClipBoardLinks = _require2.addToClipBoardLinks;\\n\\nvar _require3 = __webpack_require__(/*! @fortawesome/react-fontawesome */ \\\"./node_modules/@fortawesome/react-fontawesome/index.es.js\\\"),\\n FontAwesomeIcon = _require3.FontAwesomeIcon;\\n\\nvar _require4 = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faCheck */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js\\\"),\\n faCheck = _require4.faCheck;\\n\\nvar style = __webpack_require__(/*! style-loader!./style.less */ \\\"./node_modules/style-loader/index.js!./src/style.less\\\");\\n\\nmodule.exports = function (_ref) {\\n var dom = _ref.dom,\\n React = _ref.React,\\n Fragment = _ref.Fragment;\\n\\n var BaseTemplate = function BaseTemplate(_ref2, ref) {\\n var _ref2$data = _ref2.data,\\n data = _ref2$data === void 0 ? {} : _ref2$data,\\n _ref2$opts = _ref2.opts,\\n opts = _ref2$opts === void 0 ? {} : _ref2$opts,\\n checkWindowSize = _ref2.checkWindowSize,\\n showHover = _ref2.showHover,\\n isMobile = _ref2.isMobile,\\n handleShowHover = _ref2.handleShowHover,\\n hasWeb3Mobile = _ref2.hasWeb3Mobile,\\n handleCopySuccessful = _ref2.handleCopySuccessful,\\n copySuccessful = _ref2.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.boxAddressWrap, \\\" \\\").concat(!isMobile ? style.isDesktop : ''),\\n onMouseEnter: function onMouseEnter() {\\n return checkWindowSize(!isMobile);\\n }\\n }, opts.html ? React.createElement(Fragment, null, opts.html, React.createElement(HoverTemplate, {\\n data: data,\\n opts: opts,\\n ref: ref,\\n showHover: showHover,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n })) : React.createElement(AddressBarTemplate, {\\n data: data,\\n opts: opts,\\n ref: ref,\\n showHover: showHover,\\n isMobile: isMobile,\\n handleShowHover: handleShowHover,\\n handleCopySuccessful: handleCopySuccessful,\\n hasWeb3Mobile: hasWeb3Mobile,\\n copySuccessful: copySuccessful\\n }), showHover && React.createElement(\\\"div\\\", {\\n className: style.onClickOutsideMobile,\\n onClick: function onClick() {\\n return handleShowHover(true);\\n }\\n }));\\n };\\n\\n if (React) BaseTemplate = React.forwardRef(BaseTemplate);\\n\\n var HoverTemplate = function HoverTemplate(_ref3, ref) {\\n var _ref3$data = _ref3.data,\\n data = _ref3$data === void 0 ? {} : _ref3$data,\\n _ref3$opts = _ref3.opts,\\n opts = _ref3$opts === void 0 ? {} : _ref3$opts,\\n showHover = _ref3.showHover,\\n hasWeb3Mobile = _ref3.hasWeb3Mobile,\\n handleCopySuccessful = _ref3.handleCopySuccessful,\\n copySuccessful = _ref3.copySuccessful,\\n loading = _ref3.loading;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.hoverWrap, \\\" \\\").concat(style[opts.orientation || 'right'], \\\" \\\").concat(showHover ? style.showHoverMobile : '')\\n }, React.createElement(\\\"div\\\", {\\n className: style.hoverProfile,\\n ref: ref\\n }, loading && React.createElement(\\\"div\\\", {\\n className: style.loadingText\\n }, \\\" Loading ... \\\"), data.coverPhoto && React.createElement(CoverPictureTemplate, {\\n data: data,\\n opts: opts\\n }), data.imgSrc && React.createElement(ProfilePictureTemplate, {\\n data: data,\\n opts: opts\\n }), data.name && React.createElement(NameTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n }), data.description && React.createElement(DescriptionTemplate, {\\n data: data\\n }), (data.twitter || data.github || data.website) && React.createElement(\\\"div\\\", {\\n className: style.profileDetails\\n }, data.twitter && React.createElement(TwitterTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n }), data.github && React.createElement(GithubTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n }), data.website && React.createElement(WebsiteTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n })), React.createElement(HoverFooterTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n })));\\n };\\n\\n if (React) HoverTemplate = React.forwardRef(HoverTemplate);\\n\\n var HoverFooterTemplate = function HoverFooterTemplate(_ref4) {\\n var _ref4$data = _ref4.data,\\n data = _ref4$data === void 0 ? {} : _ref4$data,\\n hasWeb3Mobile = _ref4.hasWeb3Mobile,\\n handleCopySuccessful = _ref4.handleCopySuccessful,\\n copySuccessful = _ref4.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: style.boxLink\\n }, React.createElement(CopyButton, {\\n address: data.address\\n }), hasWeb3Mobile ? React.createElement(HoverFooterWeb3MobileLink, {\\n data: data,\\n handleCopySuccessful: handleCopySuccessful\\n }) : React.createElement(HoverFooterLink, {\\n data: data\\n }), copySuccessful === 'footer' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck,\\n className: style.profileCheck\\n }));\\n };\\n\\n var HoverFooterWeb3MobileLink = function HoverFooterWeb3MobileLink(_ref5) {\\n var data = _ref5.data,\\n handleCopySuccessful = _ref5.handleCopySuccessful;\\n return React.createElement(\\\"p\\\", {\\n onClick: function onClick() {\\n return addToClipBoardLinks(\\\"https://3box.io/\\\".concat(data.address), handleCopySuccessful, 'footer');\\n },\\n className: style.boxLinkText\\n }, \\\"View 3Box\\\", React.createElement(\\\"img\\\", {\\n src: \\\"https://i.imgur.com/bT9PQlL.png\\\",\\n className: style.logo\\n }));\\n };\\n\\n var HoverFooterLink = function HoverFooterLink(_ref6) {\\n var data = _ref6.data;\\n return React.createElement(\\\"a\\\", {\\n className: style.boxLinkText,\\n href: \\\"https://3box.io/\\\".concat(data.address),\\n target: \\\"_blank\\\",\\n rel: \\\"noopener noreferrer\\\"\\n }, \\\"View 3Box\\\", React.createElement(\\\"img\\\", {\\n src: \\\"https://i.imgur.com/bT9PQlL.png\\\",\\n className: style.logo\\n }));\\n };\\n\\n var CoverPictureTemplate = function CoverPictureTemplate(_ref7) {\\n var _ref7$data = _ref7.data,\\n data = _ref7$data === void 0 ? {} : _ref7$data,\\n _ref7$opts = _ref7.opts,\\n opts = _ref7$opts === void 0 ? {} : _ref7$opts;\\n return React.createElement(Fragment, null, !opts.noCoverImg && !opts.noImgs && React.createElement(\\\"div\\\", {\\n className: style.coverPicture\\n }, data.coverPhoto ? React.createElement(\\\"img\\\", {\\n src: data.coverPhoto,\\n className: style.coverPicture_image\\n }) : React.createElement(\\\"div\\\", {\\n className: style.coverPicture_image\\n })));\\n };\\n\\n var AddressBarTemplate = function AddressBarTemplate(_ref8, ref) {\\n var _ref8$data = _ref8.data,\\n data = _ref8$data === void 0 ? {} : _ref8$data,\\n _ref8$opts = _ref8.opts,\\n opts = _ref8$opts === void 0 ? {} : _ref8$opts,\\n showHover = _ref8.showHover,\\n isMobile = _ref8.isMobile,\\n handleShowHover = _ref8.handleShowHover,\\n hasWeb3Mobile = _ref8.hasWeb3Mobile,\\n handleCopySuccessful = _ref8.handleCopySuccessful,\\n copySuccessful = _ref8.copySuccessful,\\n loading = _ref8.loading;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.boxAddress, \\\" \\\").concat(data.addressDisplay.length >= 15 ? style.boxAddressFull : '', \\\" \\\").concat(opts.tileStyle ? style.tileStyle : '')\\n }, React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.boxAddressContentWrapper, \\\" \\\").concat(opts.url ? style.boxAddressLink : ''),\\n onClick: function onClick() {\\n if (opts.url) window.location = \\\"\\\".concat(opts.url);\\n }\\n }, React.createElement(\\\"div\\\", {\\n className: style.boxImg\\n }, data.imgSrc && React.createElement(\\\"img\\\", {\\n src: data.imgSrc\\n })), React.createElement(\\\"div\\\", {\\n className: style.boxShortAddress\\n }, opts.showName && data.name ? data.name : data.addressDisplay)), isMobile && React.createElement(\\\"button\\\", {\\n className: style.openHover_mobile,\\n onClick: function onClick() {\\n return handleShowHover(true);\\n }\\n }, React.createElement(\\\"div\\\", {\\n className: \\\"far fa-clone clone\\\"\\n })), React.createElement(HoverTemplate, {\\n data: data,\\n opts: opts,\\n ref: ref,\\n showHover: showHover,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful,\\n loading: loading\\n }));\\n };\\n\\n if (React) AddressBarTemplate = React.forwardRef(AddressBarTemplate);\\n\\n var ProfilePictureTemplate = function ProfilePictureTemplate(_ref9) {\\n var _ref9$data = _ref9.data,\\n data = _ref9$data === void 0 ? {} : _ref9$data,\\n _ref9$opts = _ref9.opts,\\n opts = _ref9$opts === void 0 ? {} : _ref9$opts;\\n return React.createElement(Fragment, null, !opts.noProfileImg && !opts.noImgs && React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.profileValuePicture, \\\" \\\").concat(opts.noCoverImg || !data.coverPhoto ? style.noMargin : '')\\n }, React.createElement(\\\"img\\\", {\\n className: \\\"\\\".concat(style.profileValuePicture_image),\\n src: data.imgSrc,\\n height: \\\"32px\\\",\\n width: \\\"32px\\\"\\n })), opts.noProfileImg && !opts.noImgs && React.createElement(\\\"div\\\", {\\n className: style.noProfileImgSpacer\\n }));\\n };\\n\\n var DescriptionTemplate = function DescriptionTemplate(_ref10) {\\n var _ref10$data = _ref10.data,\\n data = _ref10$data === void 0 ? {} : _ref10$data;\\n return React.createElement(\\\"div\\\", {\\n className: style.profileDescription\\n }, React.createElement(\\\"p\\\", {\\n className: style.profileDescription_text\\n }, data.description));\\n };\\n\\n var NameTemplate = function NameTemplate(_ref11) {\\n var _ref11$data = _ref11.data,\\n data = _ref11$data === void 0 ? {} : _ref11$data,\\n hasWeb3Mobile = _ref11.hasWeb3Mobile,\\n handleCopySuccessful = _ref11.handleCopySuccessful,\\n copySuccessful = _ref11.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\\n \\\".concat(style.profileValueName, \\\" \\\\n \\\").concat(!data.description && !data.twitter && !data.github && !data.website ? style.noContent : '', \\\"\\\\n \\\")\\n }, hasWeb3Mobile ? React.createElement(\\\"p\\\", {\\n onClick: function onClick() {\\n return addToClipBoardLinks(\\\"https://3box.io/\\\".concat(data.address), handleCopySuccessful, 'threeBoxProfile');\\n },\\n className: style.profileText\\n }, data.name) : React.createElement(\\\"a\\\", {\\n href: \\\"https://3box.io/\\\".concat(data.address),\\n className: style.profileText,\\n target: \\\"_blank\\\",\\n rel: \\\"noopener noreferrer\\\"\\n }, data.name), data.emoji && React.createElement(\\\"span\\\", null, data.emoji), copySuccessful === 'threeBoxProfile' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck\\n }));\\n };\\n\\n var WebsiteTemplate = function WebsiteTemplate(_ref12) {\\n var _ref12$data = _ref12.data,\\n data = _ref12$data === void 0 ? {} : _ref12$data,\\n hasWeb3Mobile = _ref12.hasWeb3Mobile,\\n handleCopySuccessful = _ref12.handleCopySuccessful,\\n copySuccessful = _ref12.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: style.profileValue\\n }, React.createElement(\\\"p\\\", {\\n className: style.profileValueKey\\n }, \\\"Website\\\"), React.createElement(\\\"span\\\", {\\n className: style.profileText\\n }, hasWeb3Mobile ? React.createElement(SocialWeb3Link, {\\n handleCopySuccessful: handleCopySuccessful,\\n link: data.websiteUrl,\\n field: \\\"website\\\",\\n handle: data.website\\n }) : React.createElement(\\\"a\\\", {\\n href: data.websiteUrl,\\n target: \\\"_blank\\\"\\n }, data.website)), copySuccessful === 'website' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck\\n }));\\n };\\n\\n var GithubTemplate = function GithubTemplate(_ref13) {\\n var _ref13$data = _ref13.data,\\n data = _ref13$data === void 0 ? {} : _ref13$data,\\n hasWeb3Mobile = _ref13.hasWeb3Mobile,\\n handleCopySuccessful = _ref13.handleCopySuccessful,\\n copySuccessful = _ref13.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: style.profileValue\\n }, React.createElement(\\\"p\\\", {\\n className: style.profileValueKey\\n }, \\\"Github\\\"), React.createElement(\\\"span\\\", {\\n className: style.profileText\\n }, hasWeb3Mobile ? React.createElement(SocialWeb3Link, {\\n handleCopySuccessful: handleCopySuccessful,\\n link: 'https://www.github.com/' + data.github,\\n field: \\\"github\\\",\\n handle: data.github\\n }) : React.createElement(\\\"a\\\", {\\n href: 'https://www.github.com/' + data.github,\\n target: \\\"_blank\\\"\\n }, data.github)), copySuccessful === 'github' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck\\n }));\\n };\\n\\n var TwitterTemplate = function TwitterTemplate(_ref14) {\\n var _ref14$data = _ref14.data,\\n data = _ref14$data === void 0 ? {} : _ref14$data,\\n hasWeb3Mobile = _ref14.hasWeb3Mobile,\\n copySuccessful = _ref14.copySuccessful,\\n handleCopySuccessful = _ref14.handleCopySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: style.profileValue\\n }, React.createElement(\\\"p\\\", {\\n className: style.profileValueKey\\n }, \\\"Twitter\\\"), React.createElement(\\\"span\\\", {\\n className: style.profileText\\n }, hasWeb3Mobile ? React.createElement(SocialWeb3Link, {\\n handleCopySuccessful: handleCopySuccessful,\\n link: \\\"https://www.twitter.com/\\\".concat(data.twitter),\\n field: \\\"twitter\\\",\\n handle: \\\"@\\\".concat(data.twitter)\\n }) : React.createElement(\\\"a\\\", {\\n href: 'https://www.twitter.com/' + data.twitter,\\n target: \\\"_blank\\\"\\n }, \\\"@\\\".concat(data.twitter))), copySuccessful === 'twitter' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck\\n }));\\n };\\n\\n var SocialWeb3Link = function SocialWeb3Link(_ref15) {\\n var handleCopySuccessful = _ref15.handleCopySuccessful,\\n link = _ref15.link,\\n field = _ref15.field,\\n handle = _ref15.handle;\\n return React.createElement(\\\"p\\\", {\\n onClick: function onClick() {\\n return addToClipBoardLinks(link, handleCopySuccessful, field);\\n }\\n }, handle);\\n };\\n\\n var LoadingTemplate = function LoadingTemplate(_ref16, ref) {\\n var _ref16$data = _ref16.data,\\n data = _ref16$data === void 0 ? {} : _ref16$data,\\n _ref16$opts = _ref16.opts,\\n opts = _ref16$opts === void 0 ? {} : _ref16$opts,\\n showHover = _ref16.showHover,\\n isMobile = _ref16.isMobile,\\n checkWindowSize = _ref16.checkWindowSize;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.boxAddressWrap, \\\" \\\").concat(!isMobile ? style.isDesktop : ''),\\n onMouseEnter: function onMouseEnter() {\\n return checkWindowSize(!isMobile);\\n }\\n }, opts.html ? React.createElement(Fragment, null, React.createElement(\\\"div\\\", {\\n id: \\\"orginal_html_f1kx\\\"\\n }, opts.html), React.createElement(HoverTemplate, {\\n data: data,\\n opts: opts,\\n showHover: showHover,\\n loading: true,\\n ref: ref\\n })) : React.createElement(AddressBarTemplate, {\\n data: data,\\n opts: opts,\\n isMobile: isMobile,\\n loading: true,\\n ref: ref\\n }));\\n };\\n\\n if (React) LoadingTemplate = React.forwardRef(LoadingTemplate);\\n return {\\n BaseTemplate: BaseTemplate,\\n LoadingTemplate: LoadingTemplate\\n };\\n};\\n\\n//# sourceURL=webpack:///./src/html.jsx?\");\n\n/***/ }),\n\n/***/ \"./src/utils.js\":\n/*!**********************!*\\\n !*** ./src/utils.js ***!\n \\**********************/\n/*! exports provided: getAddressDisplay, formatUrl, addToClipBoardLinks, addToClipboard, formatProfileData, checkIsMobile */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getAddressDisplay\\\", function() { return getAddressDisplay; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"formatUrl\\\", function() { return formatUrl; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"addToClipBoardLinks\\\", function() { return addToClipBoardLinks; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"addToClipboard\\\", function() { return addToClipboard; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"formatProfileData\\\", function() { return formatProfileData; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"checkIsMobile\\\", function() { return checkIsMobile; });\\n/* harmony import */ var ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ethereum-blockies-base64 */ \\\"./node_modules/ethereum-blockies-base64/dist/main.js\\\");\\n/* harmony import */ var ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @fortawesome/fontawesome-svg-core */ \\\"./node_modules/@fortawesome/fontawesome-svg-core/index.es.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faCheck */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faArrowRight__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faArrowRight */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faArrowRight.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faArrowRight__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_solid_svg_icons_faArrowRight__WEBPACK_IMPORTED_MODULE_3__);\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faGlobeAmericas__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faGlobeAmericas */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faGlobeAmericas.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faGlobeAmericas__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_solid_svg_icons_faGlobeAmericas__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _fortawesome_free_brands_svg_icons_faTwitter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @fortawesome/free-brands-svg-icons/faTwitter */ \\\"./node_modules/@fortawesome/free-brands-svg-icons/faTwitter.js\\\");\\n/* harmony import */ var _fortawesome_free_brands_svg_icons_faTwitter__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_brands_svg_icons_faTwitter__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var _fortawesome_free_brands_svg_icons_faGithub__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @fortawesome/free-brands-svg-icons/faGithub */ \\\"./node_modules/@fortawesome/free-brands-svg-icons/faGithub.js\\\");\\n/* harmony import */ var _fortawesome_free_brands_svg_icons_faGithub__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_brands_svg_icons_faGithub__WEBPACK_IMPORTED_MODULE_6__);\\n/* harmony import */ var _fortawesome_free_regular_svg_icons_faClone__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @fortawesome/free-regular-svg-icons/faClone */ \\\"./node_modules/@fortawesome/free-regular-svg-icons/faClone.js\\\");\\n/* harmony import */ var _fortawesome_free_regular_svg_icons_faClone__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_regular_svg_icons_faClone__WEBPACK_IMPORTED_MODULE_7__);\\n\\n\\n\\n\\n\\n\\n\\n\\n_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_1__[\\\"library\\\"].add(_fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_2__[\\\"faCheck\\\"], _fortawesome_free_solid_svg_icons_faArrowRight__WEBPACK_IMPORTED_MODULE_3__[\\\"faArrowRight\\\"], _fortawesome_free_brands_svg_icons_faGithub__WEBPACK_IMPORTED_MODULE_6__[\\\"faGithub\\\"], _fortawesome_free_brands_svg_icons_faTwitter__WEBPACK_IMPORTED_MODULE_5__[\\\"faTwitter\\\"], _fortawesome_free_solid_svg_icons_faGlobeAmericas__WEBPACK_IMPORTED_MODULE_4__[\\\"faGlobeAmericas\\\"], _fortawesome_free_regular_svg_icons_faClone__WEBPACK_IMPORTED_MODULE_7__[\\\"faClone\\\"]);\\n_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_1__[\\\"dom\\\"].watch();\\nvar getAddressDisplay = function getAddressDisplay(address, display) {\\n var displayShort = display !== 'full';\\n var addressDisplay = displayShort ? getShortAddress(address) : address;\\n return addressDisplay.toLowerCase();\\n};\\n\\nvar getShortAddress = function getShortAddress(address) {\\n return address.substr(0, 6) + '...' + address.substr(-4);\\n};\\n\\nvar getImgSrc = function getImgSrc(profile, address, type) {\\n try {\\n if (!profile.image && type === 'image' && address) return ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0___default()(address);\\n if (!profile.coverPhoto && type === 'coverPhoto' && address) return null;\\n var hash = profile[type] ? profile[type][0].contentUrl[\\\"/\\\"] : '';\\n return \\\"https://ipfs.infura.io/ipfs/\\\".concat(hash);\\n } catch (error) {\\n console.log(error);\\n }\\n};\\n\\nvar formatUrl = function formatUrl(url) {\\n if (!url) {\\n return undefined;\\n }\\n\\n return url.includes('http') ? url : \\\"http://\\\".concat(url);\\n};\\nvar addToClipBoardLinks = function addToClipBoardLinks(link, copySuccessfulFunc, key) {\\n addToClipboard(link);\\n copySuccessfulFunc(key);\\n};\\nvar addToClipboard = function addToClipboard(address) {\\n var el = document.createElement('textarea');\\n el.readOnly = true; // prevent zoom on iPhone\\n\\n el.value = address;\\n document.body.appendChild(el);\\n var selection;\\n var range;\\n\\n if (navigator.userAgent.match(/ipad|iphone/i)) {\\n range = document.createRange();\\n range.selectNodeContents(el);\\n selection = window.getSelection();\\n selection.removeAllRanges();\\n selection.addRange(range);\\n el.setSelectionRange(0, 999999);\\n } else {\\n el.select();\\n }\\n\\n document.execCommand('copy');\\n document.body.removeChild(el);\\n};\\nvar formatProfileData = function formatProfileData() {\\n var profile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\\n var verified = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var address = arguments.length > 2 ? arguments[2] : undefined;\\n var addressDisplay = arguments.length > 3 ? arguments[3] : undefined;\\n\\n try {\\n return {\\n imgSrc: getImgSrc(profile, address, 'image'),\\n address: address,\\n addressDisplay: addressDisplay,\\n github: verified.github ? verified.github.username : undefined,\\n twitter: verified.twitter ? verified.twitter.username : undefined,\\n emoji: profile.emoji,\\n name: profile.name,\\n website: profile.website,\\n description: profile.description,\\n coverPhoto: getImgSrc(profile, address, 'coverPhoto'),\\n websiteUrl: formatUrl(profile.website)\\n };\\n } catch (e) {\\n return {\\n address: address,\\n addressDisplay: addressDisplay.toLowerCase(),\\n imgSrc: ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0___default()(address)\\n };\\n }\\n};\\nvar checkIsMobile = function checkIsMobile() {\\n try {\\n if (typeof window.orientation !== \\\"undefined\\\" || navigator.userAgent.indexOf('IEMobile') !== -1) {\\n return true;\\n }\\n\\n ;\\n return false;\\n } catch (error) {\\n console.error(error);\\n }\\n};\\n\\n//# sourceURL=webpack:///./src/utils.js?\");\n\n/***/ }),\n\n/***/ 0:\n/*!************************!*\\\n !*** buffer (ignored) ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* (ignored) */\\n\\n//# sourceURL=webpack:///buffer_(ignored)?\");\n\n/***/ }),\n\n/***/ 1:\n/*!************************!*\\\n !*** crypto (ignored) ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* (ignored) */\\n\\n//# sourceURL=webpack:///crypto_(ignored)?\");\n\n/***/ }),\n\n/***/ 2:\n/*!************************!*\\\n !*** crypto (ignored) ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* (ignored) */\\n\\n//# sourceURL=webpack:///crypto_(ignored)?\");\n\n/***/ }),\n\n/***/ 3:\n/*!********************************!*\\\n !*** xmlhttprequest (ignored) ***!\n \\********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* (ignored) */\\n\\n//# sourceURL=webpack:///xmlhttprequest_(ignored)?\");\n\n/***/ })\n\n/******/ });\n},{}],69:[function(require,module,exports){\n(function (process){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n\n}).call(this,require('_process'))\n},{\"./lib/ReactPropTypesSecret\":70,\"_process\":67}],70:[function(require,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n},{}],71:[function(require,module,exports){\n(function (process){\n/** @license React v16.13.1\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\nvar _assign = require('object-assign');\nvar Scheduler = require('scheduler');\nvar checkPropTypes = require('prop-types/checkPropTypes');\nvar tracing = require('scheduler/tracing');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.\n// Current owner and dispatcher used to share the same ref,\n// but PR #14548 split them out to better support the react-debug-tools package.\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {\n ReactSharedInternals.ReactCurrentDispatcher = {\n current: null\n };\n}\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {\n ReactSharedInternals.ReactCurrentBatchConfig = {\n suspense: null\n };\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n}\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n in') === 0;\n\n if (!hasExistingStack) {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n }\n}\n\nif (!React) {\n {\n throw Error( \"ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.\" );\n }\n}\n\nvar invokeGuardedCallbackImpl = function (name, func, context, a, b, c, d, e, f) {\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n};\n\n{\n // In DEV mode, we swap out invokeGuardedCallback for a special version\n // that plays more nicely with the browser's DevTools. The idea is to preserve\n // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n // functions in invokeGuardedCallback, and the production version of\n // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n // like caught exceptions, and the DevTools won't pause unless the developer\n // takes the extra step of enabling pause on caught exceptions. This is\n // unintuitive, though, because even though React has caught the error, from\n // the developer's perspective, the error is uncaught.\n //\n // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n // DOM node, and call the user-provided callback from inside an event handler\n // for that fake event. If the callback throws, the error is \"captured\" using\n // a global event handler. But because the error happens in a different\n // event loop context, it does not interrupt the normal program flow.\n // Effectively, this gives us try-catch behavior without actually using\n // try-catch. Neat!\n // Check that the browser supports the APIs we need to implement our special\n // DEV version of invokeGuardedCallback\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n\n var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) {\n // If document doesn't exist we know for sure we will crash in this method\n // when we call document.createEvent(). However this can cause confusing\n // errors: https://github.com/facebookincubator/create-react-app/issues/3482\n // So we preemptively throw with a better message instead.\n if (!(typeof document !== 'undefined')) {\n {\n throw Error( \"The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.\" );\n }\n }\n\n var evt = document.createEvent('Event'); // Keeps track of whether the user-provided callback threw an error. We\n // set this to true at the beginning, then set it to false right after\n // calling the function. If the function errors, `didError` will never be\n // set to false. This strategy works even if the browser is flaky and\n // fails to call our global error handler, because it doesn't rely on\n // the error event at all.\n\n var didError = true; // Keeps track of the value of window.event so that we can reset it\n // during the callback to let user code access window.event in the\n // browsers that support it.\n\n var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n // dispatching: https://github.com/facebook/react/issues/13688\n\n var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event'); // Create an event handler for our fake event. We will synchronously\n // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n // call the user-provided callback.\n\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n function callCallback() {\n // We immediately remove the callback from event listeners so that\n // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n // nested call would trigger the fake event handlers of any call higher\n // in the stack.\n fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n // window.event assignment in both IE <= 10 as they throw an error\n // \"Member not found\" in strict mode, and in Firefox which does not\n // support window.event.\n\n if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n window.event = windowEvent;\n }\n\n func.apply(context, funcArgs);\n didError = false;\n } // Create a global error event handler. We use this to capture the value\n // that was thrown. It's possible that this error handler will fire more\n // than once; for example, if non-React code also calls `dispatchEvent`\n // and a handler for that event throws. We should be resilient to most of\n // those cases. Even if our error event handler fires more than once, the\n // last error event is always used. If the callback actually does error,\n // we know that the last error event is the correct one, because it's not\n // possible for anything else to have happened in between our callback\n // erroring and the code that follows the `dispatchEvent` call below. If\n // the callback doesn't error, but the error event was fired, we know to\n // ignore it because `didError` will be false, as described above.\n\n\n var error; // Use this to track whether the error event is ever called.\n\n var didSetError = false;\n var isCrossOriginError = false;\n\n function handleWindowError(event) {\n error = event.error;\n didSetError = true;\n\n if (error === null && event.colno === 0 && event.lineno === 0) {\n isCrossOriginError = true;\n }\n\n if (event.defaultPrevented) {\n // Some other error handler has prevented default.\n // Browsers silence the error report if this happens.\n // We'll remember this to later decide whether to log it or not.\n if (error != null && typeof error === 'object') {\n try {\n error._suppressLogging = true;\n } catch (inner) {// Ignore.\n }\n }\n }\n } // Create a fake event type.\n\n\n var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n window.addEventListener('error', handleWindowError);\n fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n // errors, it will trigger our global error handler.\n\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n\n if (windowEventDescriptor) {\n Object.defineProperty(window, 'event', windowEventDescriptor);\n }\n\n if (didError) {\n if (!didSetError) {\n // The callback errored, but the error event never fired.\n error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n } else if (isCrossOriginError) {\n error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.');\n }\n\n this.onError(error);\n } // Remove our event listeners\n\n\n window.removeEventListener('error', handleWindowError);\n };\n\n invokeGuardedCallbackImpl = invokeGuardedCallbackDev;\n }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n onError: function (error) {\n hasError = true;\n caughtError = error;\n }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = false;\n caughtError = null;\n invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n invokeGuardedCallback.apply(this, arguments);\n\n if (hasError) {\n var error = clearCaughtError();\n\n if (!hasRethrowError) {\n hasRethrowError = true;\n rethrowError = error;\n }\n }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n if (hasRethrowError) {\n var error = rethrowError;\n hasRethrowError = false;\n rethrowError = null;\n throw error;\n }\n}\nfunction hasCaughtError() {\n return hasError;\n}\nfunction clearCaughtError() {\n if (hasError) {\n var error = caughtError;\n hasError = false;\n caughtError = null;\n return error;\n } else {\n {\n {\n throw Error( \"clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n }\n}\n\nvar getFiberCurrentPropsFromNode = null;\nvar getInstanceFromNode = null;\nvar getNodeFromInstance = null;\nfunction setComponentTree(getFiberCurrentPropsFromNodeImpl, getInstanceFromNodeImpl, getNodeFromInstanceImpl) {\n getFiberCurrentPropsFromNode = getFiberCurrentPropsFromNodeImpl;\n getInstanceFromNode = getInstanceFromNodeImpl;\n getNodeFromInstance = getNodeFromInstanceImpl;\n\n {\n if (!getNodeFromInstance || !getInstanceFromNode) {\n error('EventPluginUtils.setComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.');\n }\n }\n}\nvar validateEventDispatches;\n\n{\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n if (instancesIsArr !== listenersIsArr || instancesLen !== listenersLen) {\n error('EventPluginUtils: Invalid `event`.');\n }\n };\n}\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\n\n\nfunction executeDispatch(event, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = getNodeFromInstance(inst);\n invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n event.currentTarget = null;\n}\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\n\nfunction executeDispatchesInOrder(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n {\n validateEventDispatches(event);\n }\n\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n } // Listeners and Instances are two parallel arrays that are always in sync.\n\n\n executeDispatch(event, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, dispatchListeners, dispatchInstances);\n }\n\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar FundamentalComponent = 20;\nvar ScopeComponent = 21;\nvar Block = 22;\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n/**\n * Injectable mapping from names to event plugin modules.\n */\n\nvar namesToPlugins = {};\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\n\nfunction recomputePluginOrdering() {\n if (!eventPluginOrder) {\n // Wait until an `eventPluginOrder` is injected.\n return;\n }\n\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName];\n var pluginIndex = eventPluginOrder.indexOf(pluginName);\n\n if (!(pluginIndex > -1)) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `\" + pluginName + \"`.\" );\n }\n }\n\n if (plugins[pluginIndex]) {\n continue;\n }\n\n if (!pluginModule.extractEvents) {\n {\n throw Error( \"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `\" + pluginName + \"` does not.\" );\n }\n }\n\n plugins[pluginIndex] = pluginModule;\n var publishedEvents = pluginModule.eventTypes;\n\n for (var eventName in publishedEvents) {\n if (!publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName)) {\n {\n throw Error( \"EventPluginRegistry: Failed to publish event `\" + eventName + \"` for plugin `\" + pluginName + \"`.\" );\n }\n }\n }\n }\n}\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\n\n\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n if (!!eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n {\n throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same event name, `\" + eventName + \"`.\" );\n }\n }\n\n eventNameDispatchConfigs[eventName] = dispatchConfig;\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n }\n }\n\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n return true;\n }\n\n return false;\n}\n/**\n * Publishes a registration name that is used to identify dispatched events.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\n\n\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n if (!!registrationNameModules[registrationName]) {\n {\n throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same registration name, `\" + registrationName + \"`.\" );\n }\n }\n\n registrationNameModules[registrationName] = pluginModule;\n registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n {\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n/**\n * Registers plugins so that they can extract and dispatch events.\n */\n\n/**\n * Ordered list of injected plugins.\n */\n\n\nvar plugins = [];\n/**\n * Mapping from event name to dispatch config\n */\n\nvar eventNameDispatchConfigs = {};\n/**\n * Mapping from registration name to plugin module\n */\n\nvar registrationNameModules = {};\n/**\n * Mapping from registration name to event name\n */\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\nvar possibleRegistrationNames = {} ; // Trust the developer to only use possibleRegistrationNames in true\n\n/**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n */\n\nfunction injectEventPluginOrder(injectedEventPluginOrder) {\n if (!!eventPluginOrder) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.\" );\n }\n } // Clone the ordering so it cannot be dynamically mutated.\n\n\n eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n recomputePluginOrdering();\n}\n/**\n * Injects plugins to be used by plugin event system. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n */\n\nfunction injectEventPluginsByName(injectedNamesToPlugins) {\n var isOrderingDirty = false;\n\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n\n var pluginModule = injectedNamesToPlugins[pluginName];\n\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n if (!!namesToPlugins[pluginName]) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject two different event plugins using the same name, `\" + pluginName + \"`.\" );\n }\n }\n\n namesToPlugins[pluginName] = pluginModule;\n isOrderingDirty = true;\n }\n }\n\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar PLUGIN_EVENT_SYSTEM = 1;\nvar IS_REPLAYED = 1 << 5;\nvar IS_FIRST_ANCESTOR = 1 << 6;\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n // We perform this translation at the end of the event loop so that we\n // always receive the correct fiber here\n var internalInstance = getInstanceFromNode(target);\n\n if (!internalInstance) {\n // Unmounted\n return;\n }\n\n if (!(typeof restoreImpl === 'function')) {\n {\n throw Error( \"setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.\n\n if (stateNode) {\n var _props = getFiberCurrentPropsFromNode(stateNode);\n\n restoreImpl(internalInstance.stateNode, internalInstance.type, _props);\n }\n}\n\nfunction setRestoreImplementation(impl) {\n restoreImpl = impl;\n}\nfunction enqueueStateRestore(target) {\n if (restoreTarget) {\n if (restoreQueue) {\n restoreQueue.push(target);\n } else {\n restoreQueue = [target];\n }\n } else {\n restoreTarget = target;\n }\n}\nfunction needsStateRestore() {\n return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n if (!restoreTarget) {\n return;\n }\n\n var target = restoreTarget;\n var queuedTargets = restoreQueue;\n restoreTarget = null;\n restoreQueue = null;\n restoreStateOfTarget(target);\n\n if (queuedTargets) {\n for (var i = 0; i < queuedTargets.length; i++) {\n restoreStateOfTarget(queuedTargets[i]);\n }\n }\n}\n\nvar enableProfilerTimer = true; // Trace which interactions trigger each commit.\n\nvar enableDeprecatedFlareAPI = false; // Experimental Host Component support.\n\nvar enableFundamentalAPI = false; // Experimental Scope support.\nvar warnAboutStringRefs = false;\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n// Defaults\n\nvar batchedUpdatesImpl = function (fn, bookkeeping) {\n return fn(bookkeeping);\n};\n\nvar discreteUpdatesImpl = function (fn, a, b, c, d) {\n return fn(a, b, c, d);\n};\n\nvar flushDiscreteUpdatesImpl = function () {};\n\nvar batchedEventUpdatesImpl = batchedUpdatesImpl;\nvar isInsideEventHandler = false;\nvar isBatchingEventUpdates = false;\n\nfunction finishEventHandler() {\n // Here we wait until all updates have propagated, which is important\n // when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n // Then we restore state of any controlled component.\n var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n if (controlledComponentsHavePendingUpdates) {\n // If a controlled event was fired, we may need to restore the state of\n // the DOM node back to the controlled value. This is necessary when React\n // bails out of the update without touching the DOM.\n flushDiscreteUpdatesImpl();\n restoreStateIfNeeded();\n }\n}\n\nfunction batchedUpdates(fn, bookkeeping) {\n if (isInsideEventHandler) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(bookkeeping);\n }\n\n isInsideEventHandler = true;\n\n try {\n return batchedUpdatesImpl(fn, bookkeeping);\n } finally {\n isInsideEventHandler = false;\n finishEventHandler();\n }\n}\nfunction batchedEventUpdates(fn, a, b) {\n if (isBatchingEventUpdates) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(a, b);\n }\n\n isBatchingEventUpdates = true;\n\n try {\n return batchedEventUpdatesImpl(fn, a, b);\n } finally {\n isBatchingEventUpdates = false;\n finishEventHandler();\n }\n} // This is for the React Flare event system\nfunction discreteUpdates(fn, a, b, c, d) {\n var prevIsInsideEventHandler = isInsideEventHandler;\n isInsideEventHandler = true;\n\n try {\n return discreteUpdatesImpl(fn, a, b, c, d);\n } finally {\n isInsideEventHandler = prevIsInsideEventHandler;\n\n if (!isInsideEventHandler) {\n finishEventHandler();\n }\n }\n}\nfunction flushDiscreteUpdatesIfNeeded(timeStamp) {\n // event.timeStamp isn't overly reliable due to inconsistencies in\n // how different browsers have historically provided the time stamp.\n // Some browsers provide high-resolution time stamps for all events,\n // some provide low-resolution time stamps for all events. FF < 52\n // even mixes both time stamps together. Some browsers even report\n // negative time stamps or time stamps that are 0 (iOS9) in some cases.\n // Given we are only comparing two time stamps with equality (!==),\n // we are safe from the resolution differences. If the time stamp is 0\n // we bail-out of preventing the flush, which can affect semantics,\n // such as if an earlier flush removes or adds event listeners that\n // are fired in the subsequent flush. However, this is the same\n // behaviour as we had before this change, so the risks are low.\n if (!isInsideEventHandler && (!enableDeprecatedFlareAPI )) {\n flushDiscreteUpdatesImpl();\n }\n}\nfunction setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventUpdatesImpl) {\n batchedUpdatesImpl = _batchedUpdatesImpl;\n discreteUpdatesImpl = _discreteUpdatesImpl;\n flushDiscreteUpdatesImpl = _flushDiscreteUpdatesImpl;\n batchedEventUpdatesImpl = _batchedEventUpdatesImpl;\n}\n\nvar DiscreteEvent = 0;\nvar UserBlockingEvent = 1;\nvar ContinuousEvent = 2;\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the whitelist are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar ROOT_ATTRIBUTE_NAME = 'data-reactroot';\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n\n illegalAttributeNameCache[attributeName] = true;\n\n {\n error('Invalid attribute name: `%s`', attributeName);\n }\n\n return false;\n}\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null) {\n return propertyInfo.type === RESERVED;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n return true;\n }\n\n return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n return false;\n }\n\n switch (typeof value) {\n case 'function': // $FlowIssue symbol is perfectly valid here\n\n case 'symbol':\n // eslint-disable-line\n return true;\n\n case 'boolean':\n {\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n return !propertyInfo.acceptsBooleans;\n } else {\n var prefix = name.toLowerCase().slice(0, 5);\n return prefix !== 'data-' && prefix !== 'aria-';\n }\n }\n\n default:\n return false;\n }\n}\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n if (value === null || typeof value === 'undefined') {\n return true;\n }\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n return true;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n switch (propertyInfo.type) {\n case BOOLEAN:\n return !value;\n\n case OVERLOADED_BOOLEAN:\n return value === false;\n\n case NUMERIC:\n return isNaN(value);\n\n case POSITIVE_NUMERIC:\n return isNaN(value) || value < 1;\n }\n }\n\n return false;\n}\nfunction getPropertyInfo(name) {\n return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL) {\n this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n this.attributeName = attributeName;\n this.attributeNamespace = attributeNamespace;\n this.mustUseProperty = mustUseProperty;\n this.propertyName = name;\n this.type = type;\n this.sanitizeURL = sanitizeURL;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n var name = _ref[0],\n attributeName = _ref[1];\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML whitelist.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, null, // attributeNamespace\n false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/1999/xlink', false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/XML/1998/namespace', false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n true);\n});\n\nvar ReactDebugCurrentFrame = null;\n\n{\n ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n} // A javascript: URL can contain leading C0 control or \\u0020 SPACE,\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n {\n if (!didWarn && isJavaScriptProtocol.test(url)) {\n didWarn = true;\n\n error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n }\n }\n}\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n {\n if (propertyInfo.mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n return node[propertyName];\n } else {\n if ( propertyInfo.sanitizeURL) {\n // If we haven't fully disabled javascript: URLs, and if\n // the hydration is successful of a javascript: URL, we\n // still want to warn on the client.\n sanitizeURL('' + expected);\n }\n\n var attributeName = propertyInfo.attributeName;\n var stringValue = null;\n\n if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n if (node.hasAttribute(attributeName)) {\n var value = node.getAttribute(attributeName);\n\n if (value === '') {\n return true;\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return value;\n }\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n } else if (node.hasAttribute(attributeName)) {\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n return node.getAttribute(attributeName);\n }\n\n if (propertyInfo.type === BOOLEAN) {\n // If this was a boolean, it doesn't matter what the value is\n // the fact that we have it is the same as the expected.\n return expected;\n } // Even if this property uses a namespace we use getAttribute\n // because we assume its namespaced name is the same as our config.\n // To use getAttributeNS we need the local name which we don't have\n // in our config atm.\n\n\n stringValue = node.getAttribute(attributeName);\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return stringValue === null ? expected : stringValue;\n } else if (stringValue === '' + expected) {\n return expected;\n } else {\n return stringValue;\n }\n }\n }\n}\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n\n if (!node.hasAttribute(name)) {\n return expected === undefined ? undefined : null;\n }\n\n var value = node.getAttribute(name);\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n}\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n var propertyInfo = getPropertyInfo(name);\n\n if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n return;\n }\n\n if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n value = null;\n } // If the prop isn't in the special list, treat it as a simple attribute.\n\n\n if (isCustomComponentTag || propertyInfo === null) {\n if (isAttributeNameSafe(name)) {\n var _attributeName = name;\n\n if (value === null) {\n node.removeAttribute(_attributeName);\n } else {\n node.setAttribute(_attributeName, '' + value);\n }\n }\n\n return;\n }\n\n var mustUseProperty = propertyInfo.mustUseProperty;\n\n if (mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n\n if (value === null) {\n var type = propertyInfo.type;\n node[propertyName] = type === BOOLEAN ? false : '';\n } else {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyName] = value;\n }\n\n return;\n } // The rest are treated as attributes with special cases.\n\n\n var attributeName = propertyInfo.attributeName,\n attributeNamespace = propertyInfo.attributeNamespace;\n\n if (value === null) {\n node.removeAttribute(attributeName);\n } else {\n var _type = propertyInfo.type;\n var attributeValue;\n\n if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n // If attribute type is boolean, we know for sure it won't be an execution sink\n // and we won't require Trusted Type here.\n attributeValue = '';\n } else {\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n {\n attributeValue = '' + value;\n }\n\n if (propertyInfo.sanitizeURL) {\n sanitizeURL(attributeValue.toString());\n }\n }\n\n if (attributeNamespace) {\n node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n } else {\n node.setAttribute(attributeName, attributeValue);\n }\n }\n}\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n var sourceInfo = '';\n\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n\n if (match) {\n var pathBeforeSlash = match[1];\n\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n}\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\nfunction initializeLazyComponentType(lazyComponent) {\n if (lazyComponent._status === Uninitialized) {\n lazyComponent._status = Pending;\n var ctor = lazyComponent._ctor;\n var thenable = ctor();\n lazyComponent._result = thenable;\n thenable.then(function (moduleObject) {\n if (lazyComponent._status === Pending) {\n var defaultExport = moduleObject.default;\n\n {\n if (defaultExport === undefined) {\n error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + \"const MyComponent = lazy(() => import('./MyComponent'))\", moduleObject);\n }\n }\n\n lazyComponent._status = Resolved;\n lazyComponent._result = defaultExport;\n }\n }, function (error) {\n if (lazyComponent._status === Pending) {\n lazyComponent._status = Rejected;\n lazyComponent._result = error;\n }\n });\n }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type.render);\n\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n\n break;\n }\n }\n }\n\n return null;\n}\n\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction describeFiber(fiber) {\n switch (fiber.tag) {\n case HostRoot:\n case HostPortal:\n case HostText:\n case Fragment:\n case ContextProvider:\n case ContextConsumer:\n return '';\n\n default:\n var owner = fiber._debugOwner;\n var source = fiber._debugSource;\n var name = getComponentName(fiber.type);\n var ownerName = null;\n\n if (owner) {\n ownerName = getComponentName(owner.type);\n }\n\n return describeComponentFrame(name, source, ownerName);\n }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n var info = '';\n var node = workInProgress;\n\n do {\n info += describeFiber(node);\n node = node.return;\n } while (node);\n\n return info;\n}\nvar current = null;\nvar isRendering = false;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n {\n if (current === null) {\n return null;\n }\n\n var owner = current._debugOwner;\n\n if (owner !== null && typeof owner !== 'undefined') {\n return getComponentName(owner.type);\n }\n }\n\n return null;\n}\nfunction getCurrentFiberStackInDev() {\n {\n if (current === null) {\n return '';\n } // Safe because if current fiber exists, we are reconciling,\n // and it is guaranteed to be the work-in-progress version.\n\n\n return getStackByFiberInDevAndProd(current);\n }\n}\nfunction resetCurrentFiber() {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = null;\n current = null;\n isRendering = false;\n }\n}\nfunction setCurrentFiber(fiber) {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = getCurrentFiberStackInDev;\n current = fiber;\n isRendering = false;\n }\n}\nfunction setIsRendering(rendering) {\n {\n isRendering = rendering;\n }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n return '' + value;\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'object':\n case 'string':\n case 'undefined':\n return value;\n\n default:\n // function, symbol are assigned as empty strings\n return '';\n }\n}\n\nvar ReactDebugCurrentFrame$2 = null;\nvar ReactControlledValuePropTypes = {\n checkPropTypes: null\n};\n\n{\n ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;\n var hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n };\n var propTypes = {\n value: function (props, propName, componentName) {\n if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n return null;\n }\n\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n return null;\n }\n\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n };\n /**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\n\n ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {\n checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$2.getStackAddendum);\n };\n}\n\nfunction isCheckable(elem) {\n var type = elem.type;\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n var value = '';\n\n if (!node) {\n return value;\n }\n\n if (isCheckable(node)) {\n value = node.checked ? 'true' : 'false';\n } else {\n value = node.value;\n }\n\n return value;\n}\n\nfunction trackValueOnNode(node) {\n var valueField = isCheckable(node) ? 'checked' : 'value';\n var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n // and don't track value will cause over reporting of changes,\n // but it's better then a hard failure\n // (needed for certain tests that spyOn input values and Safari)\n\n if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n return;\n }\n\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: true,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = '' + value;\n set.call(this, value);\n }\n }); // We could've passed this the first time\n // but it triggers a bug in IE11 and Edge 14/15.\n // Calling defineProperty() again should be equivalent.\n // https://github.com/facebook/react/issues/11768\n\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n var tracker = {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = '' + value;\n },\n stopTracking: function () {\n detachTracker(node);\n delete node[valueField];\n }\n };\n return tracker;\n}\n\nfunction track(node) {\n if (getTracker(node)) {\n return;\n } // TODO: Once it's just Fiber we can move this to node._wrapperState\n\n\n node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n if (!node) {\n return false;\n }\n\n var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n // that trying again will succeed\n\n if (!tracker) {\n return true;\n }\n\n var lastValue = tracker.getValue();\n var nextValue = getValueFromNode(node);\n\n if (nextValue !== lastValue) {\n tracker.setValue(nextValue);\n return true;\n }\n\n return false;\n}\n\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n return usesChecked ? props.checked != null : props.value != null;\n}\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n var node = element;\n var checked = props.checked;\n\n var hostProps = _assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: undefined,\n checked: checked != null ? checked : node._wrapperState.initialChecked\n });\n\n return hostProps;\n}\nfunction initWrapperState(element, props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('input', props);\n\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnCheckedDefaultChecked = true;\n }\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnValueDefaultValue = true;\n }\n }\n\n var node = element;\n var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n node._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n controlled: isControlled(props)\n };\n}\nfunction updateChecked(element, props) {\n var node = element;\n var checked = props.checked;\n\n if (checked != null) {\n setValueForProperty(node, 'checked', checked, false);\n }\n}\nfunction updateWrapper(element, props) {\n var node = element;\n\n {\n var controlled = isControlled(props);\n\n if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n error('A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnUncontrolledToControlled = true;\n }\n\n if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n error('A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnControlledToUncontrolled = true;\n }\n }\n\n updateChecked(element, props);\n var value = getToStringValue(props.value);\n var type = props.type;\n\n if (value != null) {\n if (type === 'number') {\n if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n // eslint-disable-next-line\n node.value != value) {\n node.value = toString(value);\n }\n } else if (node.value !== toString(value)) {\n node.value = toString(value);\n }\n } else if (type === 'submit' || type === 'reset') {\n // Submit/reset inputs need the attribute removed completely to avoid\n // blank-text buttons.\n node.removeAttribute('value');\n return;\n }\n\n {\n // When syncing the value attribute, the value comes from a cascade of\n // properties:\n // 1. The value React property\n // 2. The defaultValue React property\n // 3. Otherwise there should be no change\n if (props.hasOwnProperty('value')) {\n setDefaultValue(node, props.type, value);\n } else if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n }\n\n {\n // When syncing the checked attribute, it only changes when it needs\n // to be removed, such as transitioning from a checkbox into a text input\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n var node = element; // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n var type = props.type;\n var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n // default value provided by the browser. See: #12872\n\n if (isButton && (props.value === undefined || props.value === null)) {\n return;\n }\n\n var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (!isHydrating) {\n {\n // When syncing the value attribute, the value property should use\n // the wrapperState._initialValue property. This uses:\n //\n // 1. The value React property when present\n // 2. The defaultValue React property when present\n // 3. An empty string\n if (initialValue !== node.value) {\n node.value = initialValue;\n }\n }\n }\n\n {\n // Otherwise, the value attribute is synchronized to the property,\n // so we assign defaultValue to the same thing as the value property\n // assignment step above.\n node.defaultValue = initialValue;\n }\n } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n var name = node.name;\n\n if (name !== '') {\n node.name = '';\n }\n\n {\n // When syncing the checked attribute, both the checked property and\n // attribute are assigned at the same time using defaultChecked. This uses:\n //\n // 1. The checked React property when present\n // 2. The defaultChecked React property when present\n // 3. Otherwise, false\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!node._wrapperState.initialChecked;\n }\n\n if (name !== '') {\n node.name = name;\n }\n}\nfunction restoreControlledState(element, props) {\n var node = element;\n updateWrapper(node, props);\n updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n var name = props.name;\n\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n } // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n\n\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n } // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n\n\n var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n\n if (!otherProps) {\n {\n throw Error( \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\" );\n }\n } // We need update the tracked value on the named cousin since the value\n // was changed but the input saw no event or value set\n\n\n updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n\n updateWrapper(otherNode, otherProps);\n }\n }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value <x> is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n type !== 'number' || node.ownerDocument.activeElement !== node) {\n if (value == null) {\n node.defaultValue = toString(node._wrapperState.initialValue);\n } else if (node.defaultValue !== toString(value)) {\n node.defaultValue = toString(value);\n }\n }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\n\nfunction flattenChildren(children) {\n var content = ''; // Flatten children. We'll warn if they are invalid\n // during validateProps() which runs for hydration too.\n // Note that this would throw on non-element objects.\n // Elements are stringified (which is normally irrelevant\n // but matters for <fbt>).\n\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n\n content += child; // Note: we don't warn about invalid children here.\n // Instead, this is done separately below so that\n // it happens during the hydration codepath too.\n });\n return content;\n}\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\n\n\nfunction validateProps(element, props) {\n {\n // This mirrors the codepath above, but runs for hydration too.\n // Warn about invalid children here so that client and hydration are consistent.\n // TODO: this seems like it could cause a DEV-only throw for hydration\n // if children contains a non-element object. We should try to avoid that.\n if (typeof props.children === 'object' && props.children !== null) {\n React.Children.forEach(props.children, function (child) {\n if (child == null) {\n return;\n }\n\n if (typeof child === 'string' || typeof child === 'number') {\n return;\n }\n\n if (typeof child.type !== 'string') {\n return;\n }\n\n if (!didWarnInvalidChild) {\n didWarnInvalidChild = true;\n\n error('Only strings and numbers are supported as <option> children.');\n }\n });\n } // TODO: Remove support for `selected` in <option>.\n\n\n if (props.selected != null && !didWarnSelectedSetOnOption) {\n error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n\n didWarnSelectedSetOnOption = true;\n }\n }\n}\nfunction postMountWrapper$1(element, props) {\n // value=\"\" should make a value attribute (#6219)\n if (props.value != null) {\n element.setAttribute('value', toString(getToStringValue(props.value)));\n }\n}\nfunction getHostProps$1(element, props) {\n var hostProps = _assign({\n children: undefined\n }, props);\n\n var content = flattenChildren(props.children);\n\n if (content) {\n hostProps.children = content;\n }\n\n return hostProps;\n}\n\nvar didWarnValueDefaultValue$1;\n\n{\n didWarnValueDefaultValue$1 = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n if (ownerName) {\n return '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n/**\n * Validation function for `value` and `defaultValue`.\n */\n\nfunction checkSelectPropTypes(props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('select', props);\n\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n\n if (props[propName] == null) {\n continue;\n }\n\n var isArray = Array.isArray(props[propName]);\n\n if (props.multiple && !isArray) {\n error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());\n } else if (!props.multiple && isArray) {\n error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());\n }\n }\n }\n}\n\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n var options = node.options;\n\n if (multiple) {\n var selectedValues = propValue;\n var selectedValue = {};\n\n for (var i = 0; i < selectedValues.length; i++) {\n // Prefix to avoid chaos with special keys.\n selectedValue['$' + selectedValues[i]] = true;\n }\n\n for (var _i = 0; _i < options.length; _i++) {\n var selected = selectedValue.hasOwnProperty('$' + options[_i].value);\n\n if (options[_i].selected !== selected) {\n options[_i].selected = selected;\n }\n\n if (selected && setDefaultSelected) {\n options[_i].defaultSelected = true;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n var _selectedValue = toString(getToStringValue(propValue));\n\n var defaultSelected = null;\n\n for (var _i2 = 0; _i2 < options.length; _i2++) {\n if (options[_i2].value === _selectedValue) {\n options[_i2].selected = true;\n\n if (setDefaultSelected) {\n options[_i2].defaultSelected = true;\n }\n\n return;\n }\n\n if (defaultSelected === null && !options[_i2].disabled) {\n defaultSelected = options[_i2];\n }\n }\n\n if (defaultSelected !== null) {\n defaultSelected.selected = true;\n }\n }\n}\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\n\n\nfunction getHostProps$2(element, props) {\n return _assign({}, props, {\n value: undefined\n });\n}\nfunction initWrapperState$1(element, props) {\n var node = element;\n\n {\n checkSelectPropTypes(props);\n }\n\n node._wrapperState = {\n wasMultiple: !!props.multiple\n };\n\n {\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {\n error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components');\n\n didWarnValueDefaultValue$1 = true;\n }\n }\n}\nfunction postMountWrapper$2(element, props) {\n var node = element;\n node.multiple = !!props.multiple;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n }\n}\nfunction postUpdateWrapper(element, props) {\n var node = element;\n var wasMultiple = node._wrapperState.wasMultiple;\n node._wrapperState.wasMultiple = !!props.multiple;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (wasMultiple !== !!props.multiple) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);\n }\n }\n}\nfunction restoreControlledState$1(element, props) {\n var node = element;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n }\n}\n\nvar didWarnValDefaultVal = false;\n\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nfunction getHostProps$3(element, props) {\n var node = element;\n\n if (!(props.dangerouslySetInnerHTML == null)) {\n {\n throw Error( \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\" );\n }\n } // Always set children to the same thing. In IE9, the selection range will\n // get reset if `textContent` is mutated. We could add a check in setTextContent\n // to only set the value if/when the value differs from the node value (which would\n // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this\n // solution. The value can be a boolean or object so that's why it's forced\n // to be a string.\n\n\n var hostProps = _assign({}, props, {\n value: undefined,\n defaultValue: undefined,\n children: toString(node._wrapperState.initialValue)\n });\n\n return hostProps;\n}\nfunction initWrapperState$2(element, props) {\n var node = element;\n\n {\n ReactControlledValuePropTypes.checkPropTypes('textarea', props);\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n\n didWarnValDefaultVal = true;\n }\n }\n\n var initialValue = props.value; // Only bother fetching default value if we're going to use it\n\n if (initialValue == null) {\n var children = props.children,\n defaultValue = props.defaultValue;\n\n if (children != null) {\n {\n error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n }\n\n {\n if (!(defaultValue == null)) {\n {\n throw Error( \"If you supply `defaultValue` on a <textarea>, do not pass children.\" );\n }\n }\n\n if (Array.isArray(children)) {\n if (!(children.length <= 1)) {\n {\n throw Error( \"<textarea> can only have at most one child.\" );\n }\n }\n\n children = children[0];\n }\n\n defaultValue = children;\n }\n }\n\n if (defaultValue == null) {\n defaultValue = '';\n }\n\n initialValue = defaultValue;\n }\n\n node._wrapperState = {\n initialValue: getToStringValue(initialValue)\n };\n}\nfunction updateWrapper$1(element, props) {\n var node = element;\n var value = getToStringValue(props.value);\n var defaultValue = getToStringValue(props.defaultValue);\n\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed\n\n if (newValue !== node.value) {\n node.value = newValue;\n }\n\n if (props.defaultValue == null && node.defaultValue !== newValue) {\n node.defaultValue = newValue;\n }\n }\n\n if (defaultValue != null) {\n node.defaultValue = toString(defaultValue);\n }\n}\nfunction postMountWrapper$3(element, props) {\n var node = element; // This is in postMount because we need access to the DOM node, which is not\n // available until after the component has mounted.\n\n var textContent = node.textContent; // Only set node.value if textContent is equal to the expected\n // initial value. In IE10/IE11 there is a bug where the placeholder attribute\n // will populate textContent as well.\n // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/\n\n if (textContent === node._wrapperState.initialValue) {\n if (textContent !== '' && textContent !== null) {\n node.value = textContent;\n }\n }\n}\nfunction restoreControlledState$2(element, props) {\n // DOM component is still mounted; update\n updateWrapper$1(element, props);\n}\n\nvar HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nvar MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nvar Namespaces = {\n html: HTML_NAMESPACE,\n mathml: MATH_NAMESPACE,\n svg: SVG_NAMESPACE\n}; // Assumes there is no parent namespace.\n\nfunction getIntrinsicNamespace(type) {\n switch (type) {\n case 'svg':\n return SVG_NAMESPACE;\n\n case 'math':\n return MATH_NAMESPACE;\n\n default:\n return HTML_NAMESPACE;\n }\n}\nfunction getChildNamespace(parentNamespace, type) {\n if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {\n // No (or default) parent namespace: potential entry point.\n return getIntrinsicNamespace(type);\n }\n\n if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {\n // We're leaving SVG.\n return HTML_NAMESPACE;\n } // By default, pass namespace below.\n\n\n return parentNamespace;\n}\n\n/* globals MSApp */\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n return function (arg0, arg1, arg2, arg3) {\n MSApp.execUnsafeLocalFunction(function () {\n return func(arg0, arg1, arg2, arg3);\n });\n };\n } else {\n return func;\n }\n};\n\nvar reusableSVGContainer;\n/**\n * Set the innerHTML property of a node\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\n\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n if (node.namespaceURI === Namespaces.svg) {\n\n if (!('innerHTML' in node)) {\n // IE does not have innerHTML for SVG nodes, so instead we inject the\n // new markup in a temp node and then move the child nodes across into\n // the target node\n reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';\n var svgNode = reusableSVGContainer.firstChild;\n\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n\n while (svgNode.firstChild) {\n node.appendChild(svgNode.firstChild);\n }\n\n return;\n }\n }\n\n node.innerHTML = html;\n});\n\n/**\n * HTML nodeType values that represent the type of the node\n */\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Set the textContent property of a node. For text updates, it's faster\n * to set the `nodeValue` of the Text node directly instead of using\n * `.textContent` which will remove the existing node and create a new one.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\n\nvar setTextContent = function (node, text) {\n if (text) {\n var firstChild = node.firstChild;\n\n if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {\n firstChild.nodeValue = text;\n return;\n }\n }\n\n node.textContent = text;\n};\n\n// Do not use the below two methods directly!\n// Instead use constants exported from DOMTopLevelEventTypes in ReactDOM.\n// (It is the only module that is allowed to access these methods.)\nfunction unsafeCastStringToDOMTopLevelType(topLevelType) {\n return topLevelType;\n}\nfunction unsafeCastDOMTopLevelTypeToString(topLevelType) {\n return topLevelType;\n}\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\n\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n prefixes['Moz' + styleProp] = 'moz' + eventName;\n return prefixes;\n}\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\n\n\nvar vendorPrefixes = {\n animationend: makePrefixMap('Animation', 'AnimationEnd'),\n animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n animationstart: makePrefixMap('Animation', 'AnimationStart'),\n transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\n\nvar prefixedEventNames = {};\n/**\n * Element to check for prefixes on.\n */\n\nvar style = {};\n/**\n * Bootstrap if a DOM exists.\n */\n\nif (canUseDOM) {\n style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,\n // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n // style object but the events that fire will still be prefixed, so we need\n // to check if the un-prefixed events are usable, and if not remove them from the map.\n\n if (!('AnimationEvent' in window)) {\n delete vendorPrefixes.animationend.animation;\n delete vendorPrefixes.animationiteration.animation;\n delete vendorPrefixes.animationstart.animation;\n } // Same as above\n\n\n if (!('TransitionEvent' in window)) {\n delete vendorPrefixes.transitionend.transition;\n }\n}\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\n\n\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) {\n return prefixedEventNames[eventName];\n } else if (!vendorPrefixes[eventName]) {\n return eventName;\n }\n\n var prefixMap = vendorPrefixes[eventName];\n\n for (var styleProp in prefixMap) {\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n return prefixedEventNames[eventName] = prefixMap[styleProp];\n }\n }\n\n return eventName;\n}\n\n/**\n * To identify top level events in ReactDOM, we use constants defined by this\n * module. This is the only module that uses the unsafe* methods to express\n * that the constants actually correspond to the browser event names. This lets\n * us save some bundle size by avoiding a top level type -> event name map.\n * The rest of ReactDOM code should import top level types from this file.\n */\n\nvar TOP_ABORT = unsafeCastStringToDOMTopLevelType('abort');\nvar TOP_ANIMATION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationend'));\nvar TOP_ANIMATION_ITERATION = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationiteration'));\nvar TOP_ANIMATION_START = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationstart'));\nvar TOP_BLUR = unsafeCastStringToDOMTopLevelType('blur');\nvar TOP_CAN_PLAY = unsafeCastStringToDOMTopLevelType('canplay');\nvar TOP_CAN_PLAY_THROUGH = unsafeCastStringToDOMTopLevelType('canplaythrough');\nvar TOP_CANCEL = unsafeCastStringToDOMTopLevelType('cancel');\nvar TOP_CHANGE = unsafeCastStringToDOMTopLevelType('change');\nvar TOP_CLICK = unsafeCastStringToDOMTopLevelType('click');\nvar TOP_CLOSE = unsafeCastStringToDOMTopLevelType('close');\nvar TOP_COMPOSITION_END = unsafeCastStringToDOMTopLevelType('compositionend');\nvar TOP_COMPOSITION_START = unsafeCastStringToDOMTopLevelType('compositionstart');\nvar TOP_COMPOSITION_UPDATE = unsafeCastStringToDOMTopLevelType('compositionupdate');\nvar TOP_CONTEXT_MENU = unsafeCastStringToDOMTopLevelType('contextmenu');\nvar TOP_COPY = unsafeCastStringToDOMTopLevelType('copy');\nvar TOP_CUT = unsafeCastStringToDOMTopLevelType('cut');\nvar TOP_DOUBLE_CLICK = unsafeCastStringToDOMTopLevelType('dblclick');\nvar TOP_AUX_CLICK = unsafeCastStringToDOMTopLevelType('auxclick');\nvar TOP_DRAG = unsafeCastStringToDOMTopLevelType('drag');\nvar TOP_DRAG_END = unsafeCastStringToDOMTopLevelType('dragend');\nvar TOP_DRAG_ENTER = unsafeCastStringToDOMTopLevelType('dragenter');\nvar TOP_DRAG_EXIT = unsafeCastStringToDOMTopLevelType('dragexit');\nvar TOP_DRAG_LEAVE = unsafeCastStringToDOMTopLevelType('dragleave');\nvar TOP_DRAG_OVER = unsafeCastStringToDOMTopLevelType('dragover');\nvar TOP_DRAG_START = unsafeCastStringToDOMTopLevelType('dragstart');\nvar TOP_DROP = unsafeCastStringToDOMTopLevelType('drop');\nvar TOP_DURATION_CHANGE = unsafeCastStringToDOMTopLevelType('durationchange');\nvar TOP_EMPTIED = unsafeCastStringToDOMTopLevelType('emptied');\nvar TOP_ENCRYPTED = unsafeCastStringToDOMTopLevelType('encrypted');\nvar TOP_ENDED = unsafeCastStringToDOMTopLevelType('ended');\nvar TOP_ERROR = unsafeCastStringToDOMTopLevelType('error');\nvar TOP_FOCUS = unsafeCastStringToDOMTopLevelType('focus');\nvar TOP_GOT_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('gotpointercapture');\nvar TOP_INPUT = unsafeCastStringToDOMTopLevelType('input');\nvar TOP_INVALID = unsafeCastStringToDOMTopLevelType('invalid');\nvar TOP_KEY_DOWN = unsafeCastStringToDOMTopLevelType('keydown');\nvar TOP_KEY_PRESS = unsafeCastStringToDOMTopLevelType('keypress');\nvar TOP_KEY_UP = unsafeCastStringToDOMTopLevelType('keyup');\nvar TOP_LOAD = unsafeCastStringToDOMTopLevelType('load');\nvar TOP_LOAD_START = unsafeCastStringToDOMTopLevelType('loadstart');\nvar TOP_LOADED_DATA = unsafeCastStringToDOMTopLevelType('loadeddata');\nvar TOP_LOADED_METADATA = unsafeCastStringToDOMTopLevelType('loadedmetadata');\nvar TOP_LOST_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('lostpointercapture');\nvar TOP_MOUSE_DOWN = unsafeCastStringToDOMTopLevelType('mousedown');\nvar TOP_MOUSE_MOVE = unsafeCastStringToDOMTopLevelType('mousemove');\nvar TOP_MOUSE_OUT = unsafeCastStringToDOMTopLevelType('mouseout');\nvar TOP_MOUSE_OVER = unsafeCastStringToDOMTopLevelType('mouseover');\nvar TOP_MOUSE_UP = unsafeCastStringToDOMTopLevelType('mouseup');\nvar TOP_PASTE = unsafeCastStringToDOMTopLevelType('paste');\nvar TOP_PAUSE = unsafeCastStringToDOMTopLevelType('pause');\nvar TOP_PLAY = unsafeCastStringToDOMTopLevelType('play');\nvar TOP_PLAYING = unsafeCastStringToDOMTopLevelType('playing');\nvar TOP_POINTER_CANCEL = unsafeCastStringToDOMTopLevelType('pointercancel');\nvar TOP_POINTER_DOWN = unsafeCastStringToDOMTopLevelType('pointerdown');\nvar TOP_POINTER_MOVE = unsafeCastStringToDOMTopLevelType('pointermove');\nvar TOP_POINTER_OUT = unsafeCastStringToDOMTopLevelType('pointerout');\nvar TOP_POINTER_OVER = unsafeCastStringToDOMTopLevelType('pointerover');\nvar TOP_POINTER_UP = unsafeCastStringToDOMTopLevelType('pointerup');\nvar TOP_PROGRESS = unsafeCastStringToDOMTopLevelType('progress');\nvar TOP_RATE_CHANGE = unsafeCastStringToDOMTopLevelType('ratechange');\nvar TOP_RESET = unsafeCastStringToDOMTopLevelType('reset');\nvar TOP_SCROLL = unsafeCastStringToDOMTopLevelType('scroll');\nvar TOP_SEEKED = unsafeCastStringToDOMTopLevelType('seeked');\nvar TOP_SEEKING = unsafeCastStringToDOMTopLevelType('seeking');\nvar TOP_SELECTION_CHANGE = unsafeCastStringToDOMTopLevelType('selectionchange');\nvar TOP_STALLED = unsafeCastStringToDOMTopLevelType('stalled');\nvar TOP_SUBMIT = unsafeCastStringToDOMTopLevelType('submit');\nvar TOP_SUSPEND = unsafeCastStringToDOMTopLevelType('suspend');\nvar TOP_TEXT_INPUT = unsafeCastStringToDOMTopLevelType('textInput');\nvar TOP_TIME_UPDATE = unsafeCastStringToDOMTopLevelType('timeupdate');\nvar TOP_TOGGLE = unsafeCastStringToDOMTopLevelType('toggle');\nvar TOP_TOUCH_CANCEL = unsafeCastStringToDOMTopLevelType('touchcancel');\nvar TOP_TOUCH_END = unsafeCastStringToDOMTopLevelType('touchend');\nvar TOP_TOUCH_MOVE = unsafeCastStringToDOMTopLevelType('touchmove');\nvar TOP_TOUCH_START = unsafeCastStringToDOMTopLevelType('touchstart');\nvar TOP_TRANSITION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('transitionend'));\nvar TOP_VOLUME_CHANGE = unsafeCastStringToDOMTopLevelType('volumechange');\nvar TOP_WAITING = unsafeCastStringToDOMTopLevelType('waiting');\nvar TOP_WHEEL = unsafeCastStringToDOMTopLevelType('wheel'); // List of events that need to be individually attached to media elements.\n// Note that events in this list will *not* be listened to at the top level\n// unless they're explicitly whitelisted in `ReactBrowserEventEmitter.listenTo`.\n\nvar mediaEventTypes = [TOP_ABORT, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_VOLUME_CHANGE, TOP_WAITING];\nfunction getRawEventName(topLevelType) {\n return unsafeCastDOMTopLevelTypeToString(topLevelType);\n}\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // prettier-ignore\n\nvar elementListenerMap = new PossiblyWeakMap();\nfunction getListenerMapForElement(element) {\n var listenerMap = elementListenerMap.get(element);\n\n if (listenerMap === undefined) {\n listenerMap = new Map();\n elementListenerMap.set(element, listenerMap);\n }\n\n return listenerMap;\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\nfunction get(key) {\n return key._reactInternalFiber;\n}\nfunction has(key) {\n return key._reactInternalFiber !== undefined;\n}\nfunction set(key, value) {\n key._reactInternalFiber = value;\n}\n\n// Don't change these two values. They're used by React Dev Tools.\nvar NoEffect =\n/* */\n0;\nvar PerformedWork =\n/* */\n1; // You can change the rest (and add more).\n\nvar Placement =\n/* */\n2;\nvar Update =\n/* */\n4;\nvar PlacementAndUpdate =\n/* */\n6;\nvar Deletion =\n/* */\n8;\nvar ContentReset =\n/* */\n16;\nvar Callback =\n/* */\n32;\nvar DidCapture =\n/* */\n64;\nvar Ref =\n/* */\n128;\nvar Snapshot =\n/* */\n256;\nvar Passive =\n/* */\n512;\nvar Hydrating =\n/* */\n1024;\nvar HydratingAndUpdate =\n/* */\n1028; // Passive & Update & Callback & Ref & Snapshot\n\nvar LifecycleEffectMask =\n/* */\n932; // Union of all host effects\n\nvar HostEffectMask =\n/* */\n2047;\nvar Incomplete =\n/* */\n2048;\nvar ShouldCapture =\n/* */\n4096;\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nfunction getNearestMountedFiber(fiber) {\n var node = fiber;\n var nearestMounted = fiber;\n\n if (!fiber.alternate) {\n // If there is no alternate, this might be a new tree that isn't inserted\n // yet. If it is, then it will have a pending insertion effect on it.\n var nextNode = node;\n\n do {\n node = nextNode;\n\n if ((node.effectTag & (Placement | Hydrating)) !== NoEffect) {\n // This is an insertion or in-progress hydration. The nearest possible\n // mounted fiber is the parent but we need to continue to figure out\n // if that one is still mounted.\n nearestMounted = node.return;\n }\n\n nextNode = node.return;\n } while (nextNode);\n } else {\n while (node.return) {\n node = node.return;\n }\n }\n\n if (node.tag === HostRoot) {\n // TODO: Check if this was a nested HostRoot when used with\n // renderContainerIntoSubtree.\n return nearestMounted;\n } // If we didn't hit the root, that means that we're in an disconnected tree\n // that has been unmounted.\n\n\n return null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (fiber.tag === SuspenseComponent) {\n var suspenseState = fiber.memoizedState;\n\n if (suspenseState === null) {\n var current = fiber.alternate;\n\n if (current !== null) {\n suspenseState = current.memoizedState;\n }\n }\n\n if (suspenseState !== null) {\n return suspenseState.dehydrated;\n }\n }\n\n return null;\n}\nfunction getContainerFromFiber(fiber) {\n return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;\n}\nfunction isFiberMounted(fiber) {\n return getNearestMountedFiber(fiber) === fiber;\n}\nfunction isMounted(component) {\n {\n var owner = ReactCurrentOwner.current;\n\n if (owner !== null && owner.tag === ClassComponent) {\n var ownerFiber = owner;\n var instance = ownerFiber.stateNode;\n\n if (!instance._warnedAboutRefsInRender) {\n error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber.type) || 'A component');\n }\n\n instance._warnedAboutRefsInRender = true;\n }\n }\n\n var fiber = get(component);\n\n if (!fiber) {\n return false;\n }\n\n return getNearestMountedFiber(fiber) === fiber;\n}\n\nfunction assertIsMounted(fiber) {\n if (!(getNearestMountedFiber(fiber) === fiber)) {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n}\n\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n\n if (!alternate) {\n // If there is no alternate, then we only need to check if it is mounted.\n var nearestMounted = getNearestMountedFiber(fiber);\n\n if (!(nearestMounted !== null)) {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n\n if (nearestMounted !== fiber) {\n return null;\n }\n\n return fiber;\n } // If we have two possible branches, we'll walk backwards up to the root\n // to see what path the root points to. On the way we may hit one of the\n // special cases and we'll deal with them.\n\n\n var a = fiber;\n var b = alternate;\n\n while (true) {\n var parentA = a.return;\n\n if (parentA === null) {\n // We're at the root.\n break;\n }\n\n var parentB = parentA.alternate;\n\n if (parentB === null) {\n // There is no alternate. This is an unusual case. Currently, it only\n // happens when a Suspense component is hidden. An extra fragment fiber\n // is inserted in between the Suspense fiber and its children. Skip\n // over this extra fragment fiber and proceed to the next parent.\n var nextParent = parentA.return;\n\n if (nextParent !== null) {\n a = b = nextParent;\n continue;\n } // If there's no parent, we're at the root.\n\n\n break;\n } // If both copies of the parent fiber point to the same child, we can\n // assume that the child is current. This happens when we bailout on low\n // priority: the bailed out fiber's child reuses the current child.\n\n\n if (parentA.child === parentB.child) {\n var child = parentA.child;\n\n while (child) {\n if (child === a) {\n // We've determined that A is the current branch.\n assertIsMounted(parentA);\n return fiber;\n }\n\n if (child === b) {\n // We've determined that B is the current branch.\n assertIsMounted(parentA);\n return alternate;\n }\n\n child = child.sibling;\n } // We should never have an alternate for any mounting node. So the only\n // way this could possibly happen is if this was unmounted, if at all.\n\n\n {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n }\n\n if (a.return !== b.return) {\n // The return pointer of A and the return pointer of B point to different\n // fibers. We assume that return pointers never criss-cross, so A must\n // belong to the child set of A.return, and B must belong to the child\n // set of B.return.\n a = parentA;\n b = parentB;\n } else {\n // The return pointers point to the same fiber. We'll have to use the\n // default, slow path: scan the child sets of each parent alternate to see\n // which child belongs to which set.\n //\n // Search parent A's child set\n var didFindChild = false;\n var _child = parentA.child;\n\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentA;\n b = parentB;\n break;\n }\n\n if (_child === b) {\n didFindChild = true;\n b = parentA;\n a = parentB;\n break;\n }\n\n _child = _child.sibling;\n }\n\n if (!didFindChild) {\n // Search parent B's child set\n _child = parentB.child;\n\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentB;\n b = parentA;\n break;\n }\n\n if (_child === b) {\n didFindChild = true;\n b = parentB;\n a = parentA;\n break;\n }\n\n _child = _child.sibling;\n }\n\n if (!didFindChild) {\n {\n throw Error( \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\" );\n }\n }\n }\n }\n\n if (!(a.alternate === b)) {\n {\n throw Error( \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n } // If the root is not a host container, we're in a disconnected tree. I.e.\n // unmounted.\n\n\n if (!(a.tag === HostRoot)) {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n\n if (a.stateNode.current === a) {\n // We've determined that A is the current branch.\n return fiber;\n } // Otherwise B has to be current branch.\n\n\n return alternate;\n}\nfunction findCurrentHostFiber(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n\n if (!currentParent) {\n return null;\n } // Next we'll drill down this component to find the first HostComponent/Text.\n\n\n var node = currentParent;\n\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText) {\n return node;\n } else if (node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === currentParent) {\n return null;\n }\n\n while (!node.sibling) {\n if (!node.return || node.return === currentParent) {\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n } // Flow needs the return null here, but ESLint complains about it.\n // eslint-disable-next-line no-unreachable\n\n\n return null;\n}\nfunction findCurrentHostFiberWithNoPortals(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n\n if (!currentParent) {\n return null;\n } // Next we'll drill down this component to find the first HostComponent/Text.\n\n\n var node = currentParent;\n\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText || enableFundamentalAPI ) {\n return node;\n } else if (node.child && node.tag !== HostPortal) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === currentParent) {\n return null;\n }\n\n while (!node.sibling) {\n if (!node.return || node.return === currentParent) {\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n } // Flow needs the return null here, but ESLint complains about it.\n // eslint-disable-next-line no-unreachable\n\n\n return null;\n}\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n if (!(next != null)) {\n {\n throw Error( \"accumulateInto(...): Accumulated items must not be null or undefined.\" );\n }\n }\n\n if (current == null) {\n return next;\n } // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n\n\n if (Array.isArray(current)) {\n if (Array.isArray(next)) {\n current.push.apply(current, next);\n return current;\n }\n\n current.push(next);\n return current;\n }\n\n if (Array.isArray(next)) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n * @param {function} cb Callback invoked with each element or a collection.\n * @param {?} [scope] Scope used as `this` in a callback.\n */\nfunction forEachAccumulated(arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n}\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\n\nvar eventQueue = null;\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @private\n */\n\nvar executeDispatchesAndRelease = function (event) {\n if (event) {\n executeDispatchesInOrder(event);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\n\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e);\n};\n\nfunction runEventsInBatch(events) {\n if (events !== null) {\n eventQueue = accumulateInto(eventQueue, events);\n } // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n\n\n var processingEventQueue = eventQueue;\n eventQueue = null;\n\n if (!processingEventQueue) {\n return;\n }\n\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n\n if (!!eventQueue) {\n {\n throw Error( \"processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.\" );\n }\n } // This would be a good time to rethrow if any of the event handlers threw.\n\n\n rethrowCaughtError();\n}\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n // Fallback to nativeEvent.srcElement for IE9\n // https://github.com/facebook/react/issues/12506\n var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963\n\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n } // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n\n\n return target.nodeType === TEXT_NODE ? target.parentNode : target;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\n\nfunction isEventSupported(eventNameSuffix) {\n if (!canUseDOM) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n return isSupported;\n}\n\n/**\n * Summary of `DOMEventPluginSystem` event handling:\n *\n * - Top-level delegation is used to trap most native browser events. This\n * may only occur in the main thread and is the responsibility of\n * ReactDOMEventListener, which is injected and can therefore support\n * pluggable event sources. This is the only work that occurs in the main\n * thread.\n *\n * - We normalize and de-duplicate events to account for browser quirks. This\n * may be done in the worker thread.\n *\n * - Forward these native events (with the associated top-level type used to\n * trap it) to `EventPluginRegistry`, which in turn will ask plugins if they want\n * to extract any synthetic events.\n *\n * - The `EventPluginRegistry` will then process each event by annotating them with\n * \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n * - The `EventPluginRegistry` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+ .\n * | DOM | .\n * +------------+ .\n * | .\n * v .\n * +------------+ .\n * | ReactEvent | .\n * | Listener | .\n * +------------+ . +-----------+\n * | . +--------+|SimpleEvent|\n * | . | |Plugin |\n * +-----|------+ . v +-----------+\n * | | | . +--------------+ +------------+\n * | +-----------.--->|PluginRegistry| | Event |\n * | | . | | +-----------+ | Propagators|\n * | ReactEvent | . | | |TapEvent | |------------|\n * | Emitter | . | |<---+|Plugin | |other plugin|\n * | | . | | +-----------+ | utilities |\n * | +-----------.--->| | +------------+\n * | | | . +--------------+\n * +-----|------+ . ^ +-----------+\n * | . | |Enter/Leave|\n * + . +-------+|Plugin |\n * +-------------+ . +-----------+\n * | application | .\n * |-------------| .\n * | | .\n * | | .\n * +-------------+ .\n * .\n * React Core . General Purpose Event Plugin System\n */\n\nvar CALLBACK_BOOKKEEPING_POOL_SIZE = 10;\nvar callbackBookkeepingPool = [];\n\nfunction releaseTopLevelCallbackBookKeeping(instance) {\n instance.topLevelType = null;\n instance.nativeEvent = null;\n instance.targetInst = null;\n instance.ancestors.length = 0;\n\n if (callbackBookkeepingPool.length < CALLBACK_BOOKKEEPING_POOL_SIZE) {\n callbackBookkeepingPool.push(instance);\n }\n} // Used to store ancestor hierarchy in top level callback\n\n\nfunction getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst, eventSystemFlags) {\n if (callbackBookkeepingPool.length) {\n var instance = callbackBookkeepingPool.pop();\n instance.topLevelType = topLevelType;\n instance.eventSystemFlags = eventSystemFlags;\n instance.nativeEvent = nativeEvent;\n instance.targetInst = targetInst;\n return instance;\n }\n\n return {\n topLevelType: topLevelType,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetInst: targetInst,\n ancestors: []\n };\n}\n/**\n * Find the deepest React component completely containing the root of the\n * passed-in instance (for use when entire React trees are nested within each\n * other). If React trees are not nested, returns null.\n */\n\n\nfunction findRootContainerNode(inst) {\n if (inst.tag === HostRoot) {\n return inst.stateNode.containerInfo;\n } // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n // traversal, but caching is difficult to do correctly without using a\n // mutation observer to listen for all DOM changes.\n\n\n while (inst.return) {\n inst = inst.return;\n }\n\n if (inst.tag !== HostRoot) {\n // This can happen if we're in a detached tree.\n return null;\n }\n\n return inst.stateNode.containerInfo;\n}\n/**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n\n\nfunction extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var events = null;\n\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n\n return events;\n}\n\nfunction runExtractedPluginEventsInBatch(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var events = extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n runEventsInBatch(events);\n}\n\nfunction handleTopLevel(bookKeeping) {\n var targetInst = bookKeeping.targetInst; // Loop through the hierarchy, in case there's any nested components.\n // It's important that we build the array of ancestors before calling any\n // event handlers, because event handlers can modify the DOM, leading to\n // inconsistencies with ReactMount's node cache. See #1105.\n\n var ancestor = targetInst;\n\n do {\n if (!ancestor) {\n var ancestors = bookKeeping.ancestors;\n ancestors.push(ancestor);\n break;\n }\n\n var root = findRootContainerNode(ancestor);\n\n if (!root) {\n break;\n }\n\n var tag = ancestor.tag;\n\n if (tag === HostComponent || tag === HostText) {\n bookKeeping.ancestors.push(ancestor);\n }\n\n ancestor = getClosestInstanceFromNode(root);\n } while (ancestor);\n\n for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n targetInst = bookKeeping.ancestors[i];\n var eventTarget = getEventTarget(bookKeeping.nativeEvent);\n var topLevelType = bookKeeping.topLevelType;\n var nativeEvent = bookKeeping.nativeEvent;\n var eventSystemFlags = bookKeeping.eventSystemFlags; // If this is the first ancestor, we mark it on the system flags\n\n if (i === 0) {\n eventSystemFlags |= IS_FIRST_ANCESTOR;\n }\n\n runExtractedPluginEventsInBatch(topLevelType, targetInst, nativeEvent, eventTarget, eventSystemFlags);\n }\n}\n\nfunction dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, targetInst) {\n var bookKeeping = getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst, eventSystemFlags);\n\n try {\n // Event queue being processed in the same cycle allows\n // `preventDefault`.\n batchedEventUpdates(handleTopLevel, bookKeeping);\n } finally {\n releaseTopLevelCallbackBookKeeping(bookKeeping);\n }\n}\n/**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} mountAt Container where to mount the listener\n */\n\nfunction legacyListenToEvent(registrationName, mountAt) {\n var listenerMap = getListenerMapForElement(mountAt);\n var dependencies = registrationNameDependencies[registrationName];\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n legacyListenToTopLevelEvent(dependency, mountAt, listenerMap);\n }\n}\nfunction legacyListenToTopLevelEvent(topLevelType, mountAt, listenerMap) {\n if (!listenerMap.has(topLevelType)) {\n switch (topLevelType) {\n case TOP_SCROLL:\n trapCapturedEvent(TOP_SCROLL, mountAt);\n break;\n\n case TOP_FOCUS:\n case TOP_BLUR:\n trapCapturedEvent(TOP_FOCUS, mountAt);\n trapCapturedEvent(TOP_BLUR, mountAt); // We set the flag for a single dependency later in this function,\n // but this ensures we mark both as attached rather than just one.\n\n listenerMap.set(TOP_BLUR, null);\n listenerMap.set(TOP_FOCUS, null);\n break;\n\n case TOP_CANCEL:\n case TOP_CLOSE:\n if (isEventSupported(getRawEventName(topLevelType))) {\n trapCapturedEvent(topLevelType, mountAt);\n }\n\n break;\n\n case TOP_INVALID:\n case TOP_SUBMIT:\n case TOP_RESET:\n // We listen to them on the target DOM elements.\n // Some of them bubble so we don't want them to fire twice.\n break;\n\n default:\n // By default, listen on the top level to all non-media events.\n // Media events don't bubble so adding the listener wouldn't do anything.\n var isMediaEvent = mediaEventTypes.indexOf(topLevelType) !== -1;\n\n if (!isMediaEvent) {\n trapBubbledEvent(topLevelType, mountAt);\n }\n\n break;\n }\n\n listenerMap.set(topLevelType, null);\n }\n}\nfunction isListeningToAllDependencies(registrationName, mountAt) {\n var listenerMap = getListenerMapForElement(mountAt);\n var dependencies = registrationNameDependencies[registrationName];\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n\n if (!listenerMap.has(dependency)) {\n return false;\n }\n }\n\n return true;\n}\n\nvar attemptUserBlockingHydration;\nfunction setAttemptUserBlockingHydration(fn) {\n attemptUserBlockingHydration = fn;\n}\nvar attemptContinuousHydration;\nfunction setAttemptContinuousHydration(fn) {\n attemptContinuousHydration = fn;\n}\nvar attemptHydrationAtCurrentPriority;\nfunction setAttemptHydrationAtCurrentPriority(fn) {\n attemptHydrationAtCurrentPriority = fn;\n} // TODO: Upgrade this definition once we're on a newer version of Flow that\nvar hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed.\n\nvar queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout.\n// if the last target was dehydrated.\n\nvar queuedFocus = null;\nvar queuedDrag = null;\nvar queuedMouse = null; // For pointer events there can be one latest event per pointerId.\n\nvar queuedPointers = new Map();\nvar queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.\n\nvar queuedExplicitHydrationTargets = [];\nfunction hasQueuedDiscreteEvents() {\n return queuedDiscreteEvents.length > 0;\n}\nvar discreteReplayableEvents = [TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_TOUCH_CANCEL, TOP_TOUCH_END, TOP_TOUCH_START, TOP_AUX_CLICK, TOP_DOUBLE_CLICK, TOP_POINTER_CANCEL, TOP_POINTER_DOWN, TOP_POINTER_UP, TOP_DRAG_END, TOP_DRAG_START, TOP_DROP, TOP_COMPOSITION_END, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_INPUT, TOP_TEXT_INPUT, TOP_CLOSE, TOP_CANCEL, TOP_COPY, TOP_CUT, TOP_PASTE, TOP_CLICK, TOP_CHANGE, TOP_CONTEXT_MENU, TOP_RESET, TOP_SUBMIT];\nvar continuousReplayableEvents = [TOP_FOCUS, TOP_BLUR, TOP_DRAG_ENTER, TOP_DRAG_LEAVE, TOP_MOUSE_OVER, TOP_MOUSE_OUT, TOP_POINTER_OVER, TOP_POINTER_OUT, TOP_GOT_POINTER_CAPTURE, TOP_LOST_POINTER_CAPTURE];\nfunction isReplayableDiscreteEvent(eventType) {\n return discreteReplayableEvents.indexOf(eventType) > -1;\n}\n\nfunction trapReplayableEventForDocument(topLevelType, document, listenerMap) {\n legacyListenToTopLevelEvent(topLevelType, document, listenerMap);\n}\n\nfunction eagerlyTrapReplayableEvents(container, document) {\n var listenerMapForDoc = getListenerMapForElement(document); // Discrete\n\n discreteReplayableEvents.forEach(function (topLevelType) {\n trapReplayableEventForDocument(topLevelType, document, listenerMapForDoc);\n }); // Continuous\n\n continuousReplayableEvents.forEach(function (topLevelType) {\n trapReplayableEventForDocument(topLevelType, document, listenerMapForDoc);\n });\n}\n\nfunction createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n return {\n blockedOn: blockedOn,\n topLevelType: topLevelType,\n eventSystemFlags: eventSystemFlags | IS_REPLAYED,\n nativeEvent: nativeEvent,\n container: container\n };\n}\n\nfunction queueDiscreteEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n var queuedEvent = createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n queuedDiscreteEvents.push(queuedEvent);\n} // Resets the replaying for this type of continuous event to no event.\n\nfunction clearIfContinuousEvent(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case TOP_FOCUS:\n case TOP_BLUR:\n queuedFocus = null;\n break;\n\n case TOP_DRAG_ENTER:\n case TOP_DRAG_LEAVE:\n queuedDrag = null;\n break;\n\n case TOP_MOUSE_OVER:\n case TOP_MOUSE_OUT:\n queuedMouse = null;\n break;\n\n case TOP_POINTER_OVER:\n case TOP_POINTER_OUT:\n {\n var pointerId = nativeEvent.pointerId;\n queuedPointers.delete(pointerId);\n break;\n }\n\n case TOP_GOT_POINTER_CAPTURE:\n case TOP_LOST_POINTER_CAPTURE:\n {\n var _pointerId = nativeEvent.pointerId;\n queuedPointerCaptures.delete(_pointerId);\n break;\n }\n }\n}\n\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {\n var queuedEvent = createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n\n if (blockedOn !== null) {\n var _fiber2 = getInstanceFromNode$1(blockedOn);\n\n if (_fiber2 !== null) {\n // Attempt to increase the priority of this target.\n attemptContinuousHydration(_fiber2);\n }\n }\n\n return queuedEvent;\n } // If we have already queued this exact event, then it's because\n // the different event systems have different DOM event listeners.\n // We can accumulate the flags and store a single event to be\n // replayed.\n\n\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n return existingQueuedEvent;\n}\n\nfunction queueIfContinuousEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n // These set relatedTarget to null because the replayed event will be treated as if we\n // moved from outside the window (no target) onto the target once it hydrates.\n // Instead of mutating we could clone the event.\n switch (topLevelType) {\n case TOP_FOCUS:\n {\n var focusEvent = nativeEvent;\n queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, topLevelType, eventSystemFlags, container, focusEvent);\n return true;\n }\n\n case TOP_DRAG_ENTER:\n {\n var dragEvent = nativeEvent;\n queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, topLevelType, eventSystemFlags, container, dragEvent);\n return true;\n }\n\n case TOP_MOUSE_OVER:\n {\n var mouseEvent = nativeEvent;\n queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, topLevelType, eventSystemFlags, container, mouseEvent);\n return true;\n }\n\n case TOP_POINTER_OVER:\n {\n var pointerEvent = nativeEvent;\n var pointerId = pointerEvent.pointerId;\n queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, topLevelType, eventSystemFlags, container, pointerEvent));\n return true;\n }\n\n case TOP_GOT_POINTER_CAPTURE:\n {\n var _pointerEvent = nativeEvent;\n var _pointerId2 = _pointerEvent.pointerId;\n queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, topLevelType, eventSystemFlags, container, _pointerEvent));\n return true;\n }\n }\n\n return false;\n} // Check if this target is unblocked. Returns true if it's unblocked.\n\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n // TODO: This function shares a lot of logic with attemptToDispatchEvent.\n // Try to unify them. It's a bit tricky since it would require two return\n // values.\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n\n if (targetInst !== null) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n\n if (nearestMounted !== null) {\n var tag = nearestMounted.tag;\n\n if (tag === SuspenseComponent) {\n var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n if (instance !== null) {\n // We're blocked on hydrating this boundary.\n // Increase its priority.\n queuedTarget.blockedOn = instance;\n Scheduler.unstable_runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (tag === HostRoot) {\n var root = nearestMounted.stateNode;\n\n if (root.hydrate) {\n queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of\n // a root other than sync.\n\n return;\n }\n }\n }\n }\n\n queuedTarget.blockedOn = null;\n}\n\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (queuedEvent.blockedOn !== null) {\n return false;\n }\n\n var nextBlockedOn = attemptToDispatchEvent(queuedEvent.topLevelType, queuedEvent.eventSystemFlags, queuedEvent.container, queuedEvent.nativeEvent);\n\n if (nextBlockedOn !== null) {\n // We're still blocked. Try again later.\n var _fiber3 = getInstanceFromNode$1(nextBlockedOn);\n\n if (_fiber3 !== null) {\n attemptContinuousHydration(_fiber3);\n }\n\n queuedEvent.blockedOn = nextBlockedOn;\n return false;\n }\n\n return true;\n}\n\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n if (attemptReplayContinuousQueuedEvent(queuedEvent)) {\n map.delete(key);\n }\n}\n\nfunction replayUnblockedEvents() {\n hasScheduledReplayAttempt = false; // First replay discrete events.\n\n while (queuedDiscreteEvents.length > 0) {\n var nextDiscreteEvent = queuedDiscreteEvents[0];\n\n if (nextDiscreteEvent.blockedOn !== null) {\n // We're still blocked.\n // Increase the priority of this boundary to unblock\n // the next discrete event.\n var _fiber4 = getInstanceFromNode$1(nextDiscreteEvent.blockedOn);\n\n if (_fiber4 !== null) {\n attemptUserBlockingHydration(_fiber4);\n }\n\n break;\n }\n\n var nextBlockedOn = attemptToDispatchEvent(nextDiscreteEvent.topLevelType, nextDiscreteEvent.eventSystemFlags, nextDiscreteEvent.container, nextDiscreteEvent.nativeEvent);\n\n if (nextBlockedOn !== null) {\n // We're still blocked. Try again later.\n nextDiscreteEvent.blockedOn = nextBlockedOn;\n } else {\n // We've successfully replayed the first event. Let's try the next one.\n queuedDiscreteEvents.shift();\n }\n } // Next replay any continuous events.\n\n\n if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {\n queuedFocus = null;\n }\n\n if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {\n queuedDrag = null;\n }\n\n if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {\n queuedMouse = null;\n }\n\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\n\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n if (queuedEvent.blockedOn === unblocked) {\n queuedEvent.blockedOn = null;\n\n if (!hasScheduledReplayAttempt) {\n hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are\n // now unblocked. This first might not actually be unblocked yet.\n // We could check it early to avoid scheduling an unnecessary callback.\n\n Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, replayUnblockedEvents);\n }\n }\n}\n\nfunction retryIfBlockedOn(unblocked) {\n // Mark anything that was blocked on this as no longer blocked\n // and eligible for a replay.\n if (queuedDiscreteEvents.length > 0) {\n scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's\n // worth it because we expect very few discrete events to queue up and once\n // we are actually fully unblocked it will be fast to replay them.\n\n for (var i = 1; i < queuedDiscreteEvents.length; i++) {\n var queuedEvent = queuedDiscreteEvents[i];\n\n if (queuedEvent.blockedOn === unblocked) {\n queuedEvent.blockedOn = null;\n }\n }\n }\n\n if (queuedFocus !== null) {\n scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n }\n\n if (queuedDrag !== null) {\n scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n }\n\n if (queuedMouse !== null) {\n scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n }\n\n var unblock = function (queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n };\n\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n\n for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) {\n var queuedTarget = queuedExplicitHydrationTargets[_i];\n\n if (queuedTarget.blockedOn === unblocked) {\n queuedTarget.blockedOn = null;\n }\n }\n\n while (queuedExplicitHydrationTargets.length > 0) {\n var nextExplicitTarget = queuedExplicitHydrationTargets[0];\n\n if (nextExplicitTarget.blockedOn !== null) {\n // We're still blocked.\n break;\n } else {\n attemptExplicitHydrationTarget(nextExplicitTarget);\n\n if (nextExplicitTarget.blockedOn === null) {\n // We're unblocked.\n queuedExplicitHydrationTargets.shift();\n }\n }\n }\n}\n\nfunction addEventBubbleListener(element, eventType, listener) {\n element.addEventListener(eventType, listener, false);\n}\nfunction addEventCaptureListener(element, eventType, listener) {\n element.addEventListener(eventType, listener, true);\n}\n\n// do it in two places, which duplicates logic\n// and increases the bundle size, we do it all\n// here once. If we remove or refactor the\n// SimpleEventPlugin, we should also remove or\n// update the below line.\n\nvar simpleEventPluginEventTypes = {};\nvar topLevelEventsToDispatchConfig = new Map();\nvar eventPriorities = new Map(); // We store most of the events in this module in pairs of two strings so we can re-use\n// the code required to apply the same logic for event prioritization and that of the\n// SimpleEventPlugin. This complicates things slightly, but the aim is to reduce code\n// duplication (for which there would be quite a bit). For the events that are not needed\n// for the SimpleEventPlugin (otherDiscreteEvents) we process them separately as an\n// array of top level events.\n// Lastly, we ignore prettier so we can keep the formatting sane.\n// prettier-ignore\n\nvar discreteEventPairsForSimpleEventPlugin = [TOP_BLUR, 'blur', TOP_CANCEL, 'cancel', TOP_CLICK, 'click', TOP_CLOSE, 'close', TOP_CONTEXT_MENU, 'contextMenu', TOP_COPY, 'copy', TOP_CUT, 'cut', TOP_AUX_CLICK, 'auxClick', TOP_DOUBLE_CLICK, 'doubleClick', TOP_DRAG_END, 'dragEnd', TOP_DRAG_START, 'dragStart', TOP_DROP, 'drop', TOP_FOCUS, 'focus', TOP_INPUT, 'input', TOP_INVALID, 'invalid', TOP_KEY_DOWN, 'keyDown', TOP_KEY_PRESS, 'keyPress', TOP_KEY_UP, 'keyUp', TOP_MOUSE_DOWN, 'mouseDown', TOP_MOUSE_UP, 'mouseUp', TOP_PASTE, 'paste', TOP_PAUSE, 'pause', TOP_PLAY, 'play', TOP_POINTER_CANCEL, 'pointerCancel', TOP_POINTER_DOWN, 'pointerDown', TOP_POINTER_UP, 'pointerUp', TOP_RATE_CHANGE, 'rateChange', TOP_RESET, 'reset', TOP_SEEKED, 'seeked', TOP_SUBMIT, 'submit', TOP_TOUCH_CANCEL, 'touchCancel', TOP_TOUCH_END, 'touchEnd', TOP_TOUCH_START, 'touchStart', TOP_VOLUME_CHANGE, 'volumeChange'];\nvar otherDiscreteEvents = [TOP_CHANGE, TOP_SELECTION_CHANGE, TOP_TEXT_INPUT, TOP_COMPOSITION_START, TOP_COMPOSITION_END, TOP_COMPOSITION_UPDATE]; // prettier-ignore\n\nvar userBlockingPairsForSimpleEventPlugin = [TOP_DRAG, 'drag', TOP_DRAG_ENTER, 'dragEnter', TOP_DRAG_EXIT, 'dragExit', TOP_DRAG_LEAVE, 'dragLeave', TOP_DRAG_OVER, 'dragOver', TOP_MOUSE_MOVE, 'mouseMove', TOP_MOUSE_OUT, 'mouseOut', TOP_MOUSE_OVER, 'mouseOver', TOP_POINTER_MOVE, 'pointerMove', TOP_POINTER_OUT, 'pointerOut', TOP_POINTER_OVER, 'pointerOver', TOP_SCROLL, 'scroll', TOP_TOGGLE, 'toggle', TOP_TOUCH_MOVE, 'touchMove', TOP_WHEEL, 'wheel']; // prettier-ignore\n\nvar continuousPairsForSimpleEventPlugin = [TOP_ABORT, 'abort', TOP_ANIMATION_END, 'animationEnd', TOP_ANIMATION_ITERATION, 'animationIteration', TOP_ANIMATION_START, 'animationStart', TOP_CAN_PLAY, 'canPlay', TOP_CAN_PLAY_THROUGH, 'canPlayThrough', TOP_DURATION_CHANGE, 'durationChange', TOP_EMPTIED, 'emptied', TOP_ENCRYPTED, 'encrypted', TOP_ENDED, 'ended', TOP_ERROR, 'error', TOP_GOT_POINTER_CAPTURE, 'gotPointerCapture', TOP_LOAD, 'load', TOP_LOADED_DATA, 'loadedData', TOP_LOADED_METADATA, 'loadedMetadata', TOP_LOAD_START, 'loadStart', TOP_LOST_POINTER_CAPTURE, 'lostPointerCapture', TOP_PLAYING, 'playing', TOP_PROGRESS, 'progress', TOP_SEEKING, 'seeking', TOP_STALLED, 'stalled', TOP_SUSPEND, 'suspend', TOP_TIME_UPDATE, 'timeUpdate', TOP_TRANSITION_END, 'transitionEnd', TOP_WAITING, 'waiting'];\n/**\n * Turns\n * ['abort', ...]\n * into\n * eventTypes = {\n * 'abort': {\n * phasedRegistrationNames: {\n * bubbled: 'onAbort',\n * captured: 'onAbortCapture',\n * },\n * dependencies: [TOP_ABORT],\n * },\n * ...\n * };\n * topLevelEventsToDispatchConfig = new Map([\n * [TOP_ABORT, { sameConfig }],\n * ]);\n */\n\nfunction processSimpleEventPluginPairsByPriority(eventTypes, priority) {\n // As the event types are in pairs of two, we need to iterate\n // through in twos. The events are in pairs of two to save code\n // and improve init perf of processing this array, as it will\n // result in far fewer object allocations and property accesses\n // if we only use three arrays to process all the categories of\n // instead of tuples.\n for (var i = 0; i < eventTypes.length; i += 2) {\n var topEvent = eventTypes[i];\n var event = eventTypes[i + 1];\n var capitalizedEvent = event[0].toUpperCase() + event.slice(1);\n var onEvent = 'on' + capitalizedEvent;\n var config = {\n phasedRegistrationNames: {\n bubbled: onEvent,\n captured: onEvent + 'Capture'\n },\n dependencies: [topEvent],\n eventPriority: priority\n };\n eventPriorities.set(topEvent, priority);\n topLevelEventsToDispatchConfig.set(topEvent, config);\n simpleEventPluginEventTypes[event] = config;\n }\n}\n\nfunction processTopEventPairsByPriority(eventTypes, priority) {\n for (var i = 0; i < eventTypes.length; i++) {\n eventPriorities.set(eventTypes[i], priority);\n }\n} // SimpleEventPlugin\n\n\nprocessSimpleEventPluginPairsByPriority(discreteEventPairsForSimpleEventPlugin, DiscreteEvent);\nprocessSimpleEventPluginPairsByPriority(userBlockingPairsForSimpleEventPlugin, UserBlockingEvent);\nprocessSimpleEventPluginPairsByPriority(continuousPairsForSimpleEventPlugin, ContinuousEvent); // Not used by SimpleEventPlugin\n\nprocessTopEventPairsByPriority(otherDiscreteEvents, DiscreteEvent);\nfunction getEventPriorityForPluginSystem(topLevelType) {\n var priority = eventPriorities.get(topLevelType); // Default to a ContinuousEvent. Note: we might\n // want to warn if we can't detect the priority\n // for the event.\n\n return priority === undefined ? ContinuousEvent : priority;\n}\n\n// Intentionally not named imports because Rollup would use dynamic dispatch for\nvar UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n runWithPriority = Scheduler.unstable_runWithPriority; // TODO: can we stop exporting these?\n\nvar _enabled = true;\nfunction setEnabled(enabled) {\n _enabled = !!enabled;\n}\nfunction isEnabled() {\n return _enabled;\n}\nfunction trapBubbledEvent(topLevelType, element) {\n trapEventForPluginEventSystem(element, topLevelType, false);\n}\nfunction trapCapturedEvent(topLevelType, element) {\n trapEventForPluginEventSystem(element, topLevelType, true);\n}\n\nfunction trapEventForPluginEventSystem(container, topLevelType, capture) {\n var listener;\n\n switch (getEventPriorityForPluginSystem(topLevelType)) {\n case DiscreteEvent:\n listener = dispatchDiscreteEvent.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n break;\n\n case UserBlockingEvent:\n listener = dispatchUserBlockingUpdate.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n break;\n\n case ContinuousEvent:\n default:\n listener = dispatchEvent.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n break;\n }\n\n var rawEventName = getRawEventName(topLevelType);\n\n if (capture) {\n addEventCaptureListener(container, rawEventName, listener);\n } else {\n addEventBubbleListener(container, rawEventName, listener);\n }\n}\n\nfunction dispatchDiscreteEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n flushDiscreteUpdatesIfNeeded(nativeEvent.timeStamp);\n discreteUpdates(dispatchEvent, topLevelType, eventSystemFlags, container, nativeEvent);\n}\n\nfunction dispatchUserBlockingUpdate(topLevelType, eventSystemFlags, container, nativeEvent) {\n runWithPriority(UserBlockingPriority, dispatchEvent.bind(null, topLevelType, eventSystemFlags, container, nativeEvent));\n}\n\nfunction dispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n if (!_enabled) {\n return;\n }\n\n if (hasQueuedDiscreteEvents() && isReplayableDiscreteEvent(topLevelType)) {\n // If we already have a queue of discrete events, and this is another discrete\n // event, then we can't dispatch it regardless of its target, since they\n // need to dispatch in order.\n queueDiscreteEvent(null, // Flags that we're not actually blocked on anything as far as we know.\n topLevelType, eventSystemFlags, container, nativeEvent);\n return;\n }\n\n var blockedOn = attemptToDispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent);\n\n if (blockedOn === null) {\n // We successfully dispatched this event.\n clearIfContinuousEvent(topLevelType, nativeEvent);\n return;\n }\n\n if (isReplayableDiscreteEvent(topLevelType)) {\n // This this to be replayed later once the target is available.\n queueDiscreteEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n return;\n }\n\n if (queueIfContinuousEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent)) {\n return;\n } // We need to clear only if we didn't queue because\n // queueing is accummulative.\n\n\n clearIfContinuousEvent(topLevelType, nativeEvent); // This is not replayable so we'll invoke it but without a target,\n // in case the event system needs to trace it.\n\n {\n dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, null);\n }\n} // Attempt dispatching an event. Returns a SuspenseInstance or Container if it's blocked.\n\nfunction attemptToDispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n // TODO: Warn if _enabled is false.\n var nativeEventTarget = getEventTarget(nativeEvent);\n var targetInst = getClosestInstanceFromNode(nativeEventTarget);\n\n if (targetInst !== null) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n\n if (nearestMounted === null) {\n // This tree has been unmounted already. Dispatch without a target.\n targetInst = null;\n } else {\n var tag = nearestMounted.tag;\n\n if (tag === SuspenseComponent) {\n var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n if (instance !== null) {\n // Queue the event to be replayed later. Abort dispatching since we\n // don't want this event dispatched twice through the event system.\n // TODO: If this is the first discrete event in the queue. Schedule an increased\n // priority for this boundary.\n return instance;\n } // This shouldn't happen, something went wrong but to avoid blocking\n // the whole system, dispatch the event without a target.\n // TODO: Warn.\n\n\n targetInst = null;\n } else if (tag === HostRoot) {\n var root = nearestMounted.stateNode;\n\n if (root.hydrate) {\n // If this happens during a replay something went wrong and it might block\n // the whole system.\n return getContainerFromFiber(nearestMounted);\n }\n\n targetInst = null;\n } else if (nearestMounted !== targetInst) {\n // If we get an event (ex: img onload) before committing that\n // component's mount, ignore it for now (that is, treat it as if it was an\n // event on a non-React tree). We might also consider queueing events and\n // dispatching them after the mount.\n targetInst = null;\n }\n }\n }\n\n {\n dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, targetInst);\n } // We're not blocked on anything.\n\n\n return null;\n}\n\n// List derived from Gecko source code:\n// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js\nvar shorthandToLonghand = {\n animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],\n background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],\n backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],\n borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],\n borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],\n borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],\n borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],\n borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],\n borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],\n borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],\n borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],\n borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],\n borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],\n borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],\n columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],\n columns: ['columnCount', 'columnWidth'],\n flex: ['flexBasis', 'flexGrow', 'flexShrink'],\n flexFlow: ['flexDirection', 'flexWrap'],\n font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],\n fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],\n gap: ['columnGap', 'rowGap'],\n grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],\n gridColumn: ['gridColumnEnd', 'gridColumnStart'],\n gridColumnGap: ['columnGap'],\n gridGap: ['columnGap', 'rowGap'],\n gridRow: ['gridRowEnd', 'gridRowStart'],\n gridRowGap: ['rowGap'],\n gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],\n margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],\n marker: ['markerEnd', 'markerMid', 'markerStart'],\n mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],\n maskPosition: ['maskPositionX', 'maskPositionY'],\n outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],\n overflow: ['overflowX', 'overflowY'],\n padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],\n placeContent: ['alignContent', 'justifyContent'],\n placeItems: ['alignItems', 'justifyItems'],\n placeSelf: ['alignSelf', 'justifySelf'],\n textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],\n textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],\n transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],\n wordWrap: ['overflowWrap']\n};\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n columns: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridArea: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowSpan: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnSpan: true,\n gridColumnStart: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\n\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\n\n\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\n\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\n\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n\n if (isEmpty) {\n return '';\n }\n\n if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n }\n\n return ('' + value).trim();\n}\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\nfunction hyphenateStyleName(name) {\n return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n}\n\nvar warnValidStyle = function () {};\n\n{\n // 'msTransform' is correct, but the other prefixes should be capitalized\n var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n var msPattern$1 = /^-ms-/;\n var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\n var badStyleValueWithSemicolonPattern = /;\\s*$/;\n var warnedStyleNames = {};\n var warnedStyleValues = {};\n var warnedForNaNValue = false;\n var warnedForInfinityValue = false;\n\n var camelize = function (string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n };\n\n var warnHyphenatedStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n\n error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n // is converted to lowercase `ms`.\n camelize(name.replace(msPattern$1, 'ms-')));\n };\n\n var warnBadVendoredStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n\n error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n };\n\n var warnStyleValueWithSemicolon = function (name, value) {\n if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n return;\n }\n\n warnedStyleValues[value] = true;\n\n error(\"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n };\n\n var warnStyleValueIsNaN = function (name, value) {\n if (warnedForNaNValue) {\n return;\n }\n\n warnedForNaNValue = true;\n\n error('`NaN` is an invalid value for the `%s` css style property.', name);\n };\n\n var warnStyleValueIsInfinity = function (name, value) {\n if (warnedForInfinityValue) {\n return;\n }\n\n warnedForInfinityValue = true;\n\n error('`Infinity` is an invalid value for the `%s` css style property.', name);\n };\n\n warnValidStyle = function (name, value) {\n if (name.indexOf('-') > -1) {\n warnHyphenatedStyleName(name);\n } else if (badVendoredStyleNamePattern.test(name)) {\n warnBadVendoredStyleName(name);\n } else if (badStyleValueWithSemicolonPattern.test(value)) {\n warnStyleValueWithSemicolon(name, value);\n }\n\n if (typeof value === 'number') {\n if (isNaN(value)) {\n warnStyleValueIsNaN(name, value);\n } else if (!isFinite(value)) {\n warnStyleValueIsInfinity(name, value);\n }\n }\n };\n}\n\nvar warnValidStyle$1 = warnValidStyle;\n\n/**\n * Operations for dealing with CSS properties.\n */\n\n/**\n * This creates a string that is expected to be equivalent to the style\n * attribute generated by server-side rendering. It by-passes warnings and\n * security checks so it's not safe to use this value for anything other than\n * comparison. It is only used in DEV for SSR validation.\n */\n\nfunction createDangerousStringForStyles(styles) {\n {\n var serialized = '';\n var delimiter = '';\n\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n\n var styleValue = styles[styleName];\n\n if (styleValue != null) {\n var isCustomProperty = styleName.indexOf('--') === 0;\n serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':';\n serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);\n delimiter = ';';\n }\n }\n\n return serialized || null;\n }\n}\n/**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\n\nfunction setValueForStyles(node, styles) {\n var style = node.style;\n\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n\n var isCustomProperty = styleName.indexOf('--') === 0;\n\n {\n if (!isCustomProperty) {\n warnValidStyle$1(styleName, styles[styleName]);\n }\n }\n\n var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n\n if (styleName === 'float') {\n styleName = 'cssFloat';\n }\n\n if (isCustomProperty) {\n style.setProperty(styleName, styleValue);\n } else {\n style[styleName] = styleValue;\n }\n }\n}\n\nfunction isValueEmpty(value) {\n return value == null || typeof value === 'boolean' || value === '';\n}\n/**\n * Given {color: 'red', overflow: 'hidden'} returns {\n * color: 'color',\n * overflowX: 'overflow',\n * overflowY: 'overflow',\n * }. This can be read as \"the overflowY property was set by the overflow\n * shorthand\". That is, the values are the property that each was derived from.\n */\n\n\nfunction expandShorthandMap(styles) {\n var expanded = {};\n\n for (var key in styles) {\n var longhands = shorthandToLonghand[key] || [key];\n\n for (var i = 0; i < longhands.length; i++) {\n expanded[longhands[i]] = key;\n }\n }\n\n return expanded;\n}\n/**\n * When mixing shorthand and longhand property names, we warn during updates if\n * we expect an incorrect result to occur. In particular, we warn for:\n *\n * Updating a shorthand property (longhand gets overwritten):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}\n * becomes .style.font = 'baz'\n * Removing a shorthand property (longhand gets lost too):\n * {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}\n * becomes .style.font = ''\n * Removing a longhand property (should revert to shorthand; doesn't):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}\n * becomes .style.fontVariant = ''\n */\n\n\nfunction validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {\n {\n\n if (!nextStyles) {\n return;\n }\n\n var expandedUpdates = expandShorthandMap(styleUpdates);\n var expandedStyles = expandShorthandMap(nextStyles);\n var warnedAbout = {};\n\n for (var key in expandedUpdates) {\n var originalKey = expandedUpdates[key];\n var correctOriginalKey = expandedStyles[key];\n\n if (correctOriginalKey && originalKey !== correctOriginalKey) {\n var warningKey = originalKey + ',' + correctOriginalKey;\n\n if (warnedAbout[warningKey]) {\n continue;\n }\n\n warnedAbout[warningKey] = true;\n\n error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + \"avoid this, don't mix shorthand and non-shorthand properties \" + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);\n }\n }\n }\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\nvar omittedCloseTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.\n\n};\n\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = _assign({\n menuitem: true\n}, omittedCloseTags);\n\nvar HTML = '__html';\nvar ReactDebugCurrentFrame$3 = null;\n\n{\n ReactDebugCurrentFrame$3 = ReactSharedInternals.ReactDebugCurrentFrame;\n}\n\nfunction assertValidProps(tag, props) {\n if (!props) {\n return;\n } // Note the use of `==` which checks for null or undefined.\n\n\n if (voidElementTags[tag]) {\n if (!(props.children == null && props.dangerouslySetInnerHTML == null)) {\n {\n throw Error( tag + \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\" + ( ReactDebugCurrentFrame$3.getStackAddendum() ) );\n }\n }\n }\n\n if (props.dangerouslySetInnerHTML != null) {\n if (!(props.children == null)) {\n {\n throw Error( \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\" );\n }\n }\n\n if (!(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML)) {\n {\n throw Error( \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.\" );\n }\n }\n }\n\n {\n if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {\n error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');\n }\n }\n\n if (!(props.style == null || typeof props.style === 'object')) {\n {\n throw Error( \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\" + ( ReactDebugCurrentFrame$3.getStackAddendum() ) );\n }\n }\n}\n\nfunction isCustomComponent(tagName, props) {\n if (tagName.indexOf('-') === -1) {\n return typeof props.is === 'string';\n }\n\n switch (tagName) {\n // These are reserved SVG and MathML elements.\n // We don't mind this whitelist too much because we expect it to never grow.\n // The alternative is to track the namespace in a few places which is convoluted.\n // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n case 'annotation-xml':\n case 'color-profile':\n case 'font-face':\n case 'font-face-src':\n case 'font-face-uri':\n case 'font-face-format':\n case 'font-face-name':\n case 'missing-glyph':\n return false;\n\n default:\n return true;\n }\n}\n\n// When adding attributes to the HTML or SVG whitelist, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n // HTML\n accept: 'accept',\n acceptcharset: 'acceptCharset',\n 'accept-charset': 'acceptCharset',\n accesskey: 'accessKey',\n action: 'action',\n allowfullscreen: 'allowFullScreen',\n alt: 'alt',\n as: 'as',\n async: 'async',\n autocapitalize: 'autoCapitalize',\n autocomplete: 'autoComplete',\n autocorrect: 'autoCorrect',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n autosave: 'autoSave',\n capture: 'capture',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n challenge: 'challenge',\n charset: 'charSet',\n checked: 'checked',\n children: 'children',\n cite: 'cite',\n class: 'className',\n classid: 'classID',\n classname: 'className',\n cols: 'cols',\n colspan: 'colSpan',\n content: 'content',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n controls: 'controls',\n controlslist: 'controlsList',\n coords: 'coords',\n crossorigin: 'crossOrigin',\n dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n data: 'data',\n datetime: 'dateTime',\n default: 'default',\n defaultchecked: 'defaultChecked',\n defaultvalue: 'defaultValue',\n defer: 'defer',\n dir: 'dir',\n disabled: 'disabled',\n disablepictureinpicture: 'disablePictureInPicture',\n download: 'download',\n draggable: 'draggable',\n enctype: 'encType',\n for: 'htmlFor',\n form: 'form',\n formmethod: 'formMethod',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n headers: 'headers',\n height: 'height',\n hidden: 'hidden',\n high: 'high',\n href: 'href',\n hreflang: 'hrefLang',\n htmlfor: 'htmlFor',\n httpequiv: 'httpEquiv',\n 'http-equiv': 'httpEquiv',\n icon: 'icon',\n id: 'id',\n innerhtml: 'innerHTML',\n inputmode: 'inputMode',\n integrity: 'integrity',\n is: 'is',\n itemid: 'itemID',\n itemprop: 'itemProp',\n itemref: 'itemRef',\n itemscope: 'itemScope',\n itemtype: 'itemType',\n keyparams: 'keyParams',\n keytype: 'keyType',\n kind: 'kind',\n label: 'label',\n lang: 'lang',\n list: 'list',\n loop: 'loop',\n low: 'low',\n manifest: 'manifest',\n marginwidth: 'marginWidth',\n marginheight: 'marginHeight',\n max: 'max',\n maxlength: 'maxLength',\n media: 'media',\n mediagroup: 'mediaGroup',\n method: 'method',\n min: 'min',\n minlength: 'minLength',\n multiple: 'multiple',\n muted: 'muted',\n name: 'name',\n nomodule: 'noModule',\n nonce: 'nonce',\n novalidate: 'noValidate',\n open: 'open',\n optimum: 'optimum',\n pattern: 'pattern',\n placeholder: 'placeholder',\n playsinline: 'playsInline',\n poster: 'poster',\n preload: 'preload',\n profile: 'profile',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n referrerpolicy: 'referrerPolicy',\n rel: 'rel',\n required: 'required',\n reversed: 'reversed',\n role: 'role',\n rows: 'rows',\n rowspan: 'rowSpan',\n sandbox: 'sandbox',\n scope: 'scope',\n scoped: 'scoped',\n scrolling: 'scrolling',\n seamless: 'seamless',\n selected: 'selected',\n shape: 'shape',\n size: 'size',\n sizes: 'sizes',\n span: 'span',\n spellcheck: 'spellCheck',\n src: 'src',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n start: 'start',\n step: 'step',\n style: 'style',\n summary: 'summary',\n tabindex: 'tabIndex',\n target: 'target',\n title: 'title',\n type: 'type',\n usemap: 'useMap',\n value: 'value',\n width: 'width',\n wmode: 'wmode',\n wrap: 'wrap',\n // SVG\n about: 'about',\n accentheight: 'accentHeight',\n 'accent-height': 'accentHeight',\n accumulate: 'accumulate',\n additive: 'additive',\n alignmentbaseline: 'alignmentBaseline',\n 'alignment-baseline': 'alignmentBaseline',\n allowreorder: 'allowReorder',\n alphabetic: 'alphabetic',\n amplitude: 'amplitude',\n arabicform: 'arabicForm',\n 'arabic-form': 'arabicForm',\n ascent: 'ascent',\n attributename: 'attributeName',\n attributetype: 'attributeType',\n autoreverse: 'autoReverse',\n azimuth: 'azimuth',\n basefrequency: 'baseFrequency',\n baselineshift: 'baselineShift',\n 'baseline-shift': 'baselineShift',\n baseprofile: 'baseProfile',\n bbox: 'bbox',\n begin: 'begin',\n bias: 'bias',\n by: 'by',\n calcmode: 'calcMode',\n capheight: 'capHeight',\n 'cap-height': 'capHeight',\n clip: 'clip',\n clippath: 'clipPath',\n 'clip-path': 'clipPath',\n clippathunits: 'clipPathUnits',\n cliprule: 'clipRule',\n 'clip-rule': 'clipRule',\n color: 'color',\n colorinterpolation: 'colorInterpolation',\n 'color-interpolation': 'colorInterpolation',\n colorinterpolationfilters: 'colorInterpolationFilters',\n 'color-interpolation-filters': 'colorInterpolationFilters',\n colorprofile: 'colorProfile',\n 'color-profile': 'colorProfile',\n colorrendering: 'colorRendering',\n 'color-rendering': 'colorRendering',\n contentscripttype: 'contentScriptType',\n contentstyletype: 'contentStyleType',\n cursor: 'cursor',\n cx: 'cx',\n cy: 'cy',\n d: 'd',\n datatype: 'datatype',\n decelerate: 'decelerate',\n descent: 'descent',\n diffuseconstant: 'diffuseConstant',\n direction: 'direction',\n display: 'display',\n divisor: 'divisor',\n dominantbaseline: 'dominantBaseline',\n 'dominant-baseline': 'dominantBaseline',\n dur: 'dur',\n dx: 'dx',\n dy: 'dy',\n edgemode: 'edgeMode',\n elevation: 'elevation',\n enablebackground: 'enableBackground',\n 'enable-background': 'enableBackground',\n end: 'end',\n exponent: 'exponent',\n externalresourcesrequired: 'externalResourcesRequired',\n fill: 'fill',\n fillopacity: 'fillOpacity',\n 'fill-opacity': 'fillOpacity',\n fillrule: 'fillRule',\n 'fill-rule': 'fillRule',\n filter: 'filter',\n filterres: 'filterRes',\n filterunits: 'filterUnits',\n floodopacity: 'floodOpacity',\n 'flood-opacity': 'floodOpacity',\n floodcolor: 'floodColor',\n 'flood-color': 'floodColor',\n focusable: 'focusable',\n fontfamily: 'fontFamily',\n 'font-family': 'fontFamily',\n fontsize: 'fontSize',\n 'font-size': 'fontSize',\n fontsizeadjust: 'fontSizeAdjust',\n 'font-size-adjust': 'fontSizeAdjust',\n fontstretch: 'fontStretch',\n 'font-stretch': 'fontStretch',\n fontstyle: 'fontStyle',\n 'font-style': 'fontStyle',\n fontvariant: 'fontVariant',\n 'font-variant': 'fontVariant',\n fontweight: 'fontWeight',\n 'font-weight': 'fontWeight',\n format: 'format',\n from: 'from',\n fx: 'fx',\n fy: 'fy',\n g1: 'g1',\n g2: 'g2',\n glyphname: 'glyphName',\n 'glyph-name': 'glyphName',\n glyphorientationhorizontal: 'glyphOrientationHorizontal',\n 'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n glyphorientationvertical: 'glyphOrientationVertical',\n 'glyph-orientation-vertical': 'glyphOrientationVertical',\n glyphref: 'glyphRef',\n gradienttransform: 'gradientTransform',\n gradientunits: 'gradientUnits',\n hanging: 'hanging',\n horizadvx: 'horizAdvX',\n 'horiz-adv-x': 'horizAdvX',\n horizoriginx: 'horizOriginX',\n 'horiz-origin-x': 'horizOriginX',\n ideographic: 'ideographic',\n imagerendering: 'imageRendering',\n 'image-rendering': 'imageRendering',\n in2: 'in2',\n in: 'in',\n inlist: 'inlist',\n intercept: 'intercept',\n k1: 'k1',\n k2: 'k2',\n k3: 'k3',\n k4: 'k4',\n k: 'k',\n kernelmatrix: 'kernelMatrix',\n kernelunitlength: 'kernelUnitLength',\n kerning: 'kerning',\n keypoints: 'keyPoints',\n keysplines: 'keySplines',\n keytimes: 'keyTimes',\n lengthadjust: 'lengthAdjust',\n letterspacing: 'letterSpacing',\n 'letter-spacing': 'letterSpacing',\n lightingcolor: 'lightingColor',\n 'lighting-color': 'lightingColor',\n limitingconeangle: 'limitingConeAngle',\n local: 'local',\n markerend: 'markerEnd',\n 'marker-end': 'markerEnd',\n markerheight: 'markerHeight',\n markermid: 'markerMid',\n 'marker-mid': 'markerMid',\n markerstart: 'markerStart',\n 'marker-start': 'markerStart',\n markerunits: 'markerUnits',\n markerwidth: 'markerWidth',\n mask: 'mask',\n maskcontentunits: 'maskContentUnits',\n maskunits: 'maskUnits',\n mathematical: 'mathematical',\n mode: 'mode',\n numoctaves: 'numOctaves',\n offset: 'offset',\n opacity: 'opacity',\n operator: 'operator',\n order: 'order',\n orient: 'orient',\n orientation: 'orientation',\n origin: 'origin',\n overflow: 'overflow',\n overlineposition: 'overlinePosition',\n 'overline-position': 'overlinePosition',\n overlinethickness: 'overlineThickness',\n 'overline-thickness': 'overlineThickness',\n paintorder: 'paintOrder',\n 'paint-order': 'paintOrder',\n panose1: 'panose1',\n 'panose-1': 'panose1',\n pathlength: 'pathLength',\n patterncontentunits: 'patternContentUnits',\n patterntransform: 'patternTransform',\n patternunits: 'patternUnits',\n pointerevents: 'pointerEvents',\n 'pointer-events': 'pointerEvents',\n points: 'points',\n pointsatx: 'pointsAtX',\n pointsaty: 'pointsAtY',\n pointsatz: 'pointsAtZ',\n prefix: 'prefix',\n preservealpha: 'preserveAlpha',\n preserveaspectratio: 'preserveAspectRatio',\n primitiveunits: 'primitiveUnits',\n property: 'property',\n r: 'r',\n radius: 'radius',\n refx: 'refX',\n refy: 'refY',\n renderingintent: 'renderingIntent',\n 'rendering-intent': 'renderingIntent',\n repeatcount: 'repeatCount',\n repeatdur: 'repeatDur',\n requiredextensions: 'requiredExtensions',\n requiredfeatures: 'requiredFeatures',\n resource: 'resource',\n restart: 'restart',\n result: 'result',\n results: 'results',\n rotate: 'rotate',\n rx: 'rx',\n ry: 'ry',\n scale: 'scale',\n security: 'security',\n seed: 'seed',\n shaperendering: 'shapeRendering',\n 'shape-rendering': 'shapeRendering',\n slope: 'slope',\n spacing: 'spacing',\n specularconstant: 'specularConstant',\n specularexponent: 'specularExponent',\n speed: 'speed',\n spreadmethod: 'spreadMethod',\n startoffset: 'startOffset',\n stddeviation: 'stdDeviation',\n stemh: 'stemh',\n stemv: 'stemv',\n stitchtiles: 'stitchTiles',\n stopcolor: 'stopColor',\n 'stop-color': 'stopColor',\n stopopacity: 'stopOpacity',\n 'stop-opacity': 'stopOpacity',\n strikethroughposition: 'strikethroughPosition',\n 'strikethrough-position': 'strikethroughPosition',\n strikethroughthickness: 'strikethroughThickness',\n 'strikethrough-thickness': 'strikethroughThickness',\n string: 'string',\n stroke: 'stroke',\n strokedasharray: 'strokeDasharray',\n 'stroke-dasharray': 'strokeDasharray',\n strokedashoffset: 'strokeDashoffset',\n 'stroke-dashoffset': 'strokeDashoffset',\n strokelinecap: 'strokeLinecap',\n 'stroke-linecap': 'strokeLinecap',\n strokelinejoin: 'strokeLinejoin',\n 'stroke-linejoin': 'strokeLinejoin',\n strokemiterlimit: 'strokeMiterlimit',\n 'stroke-miterlimit': 'strokeMiterlimit',\n strokewidth: 'strokeWidth',\n 'stroke-width': 'strokeWidth',\n strokeopacity: 'strokeOpacity',\n 'stroke-opacity': 'strokeOpacity',\n suppresscontenteditablewarning: 'suppressContentEditableWarning',\n suppresshydrationwarning: 'suppressHydrationWarning',\n surfacescale: 'surfaceScale',\n systemlanguage: 'systemLanguage',\n tablevalues: 'tableValues',\n targetx: 'targetX',\n targety: 'targetY',\n textanchor: 'textAnchor',\n 'text-anchor': 'textAnchor',\n textdecoration: 'textDecoration',\n 'text-decoration': 'textDecoration',\n textlength: 'textLength',\n textrendering: 'textRendering',\n 'text-rendering': 'textRendering',\n to: 'to',\n transform: 'transform',\n typeof: 'typeof',\n u1: 'u1',\n u2: 'u2',\n underlineposition: 'underlinePosition',\n 'underline-position': 'underlinePosition',\n underlinethickness: 'underlineThickness',\n 'underline-thickness': 'underlineThickness',\n unicode: 'unicode',\n unicodebidi: 'unicodeBidi',\n 'unicode-bidi': 'unicodeBidi',\n unicoderange: 'unicodeRange',\n 'unicode-range': 'unicodeRange',\n unitsperem: 'unitsPerEm',\n 'units-per-em': 'unitsPerEm',\n unselectable: 'unselectable',\n valphabetic: 'vAlphabetic',\n 'v-alphabetic': 'vAlphabetic',\n values: 'values',\n vectoreffect: 'vectorEffect',\n 'vector-effect': 'vectorEffect',\n version: 'version',\n vertadvy: 'vertAdvY',\n 'vert-adv-y': 'vertAdvY',\n vertoriginx: 'vertOriginX',\n 'vert-origin-x': 'vertOriginX',\n vertoriginy: 'vertOriginY',\n 'vert-origin-y': 'vertOriginY',\n vhanging: 'vHanging',\n 'v-hanging': 'vHanging',\n videographic: 'vIdeographic',\n 'v-ideographic': 'vIdeographic',\n viewbox: 'viewBox',\n viewtarget: 'viewTarget',\n visibility: 'visibility',\n vmathematical: 'vMathematical',\n 'v-mathematical': 'vMathematical',\n vocab: 'vocab',\n widths: 'widths',\n wordspacing: 'wordSpacing',\n 'word-spacing': 'wordSpacing',\n writingmode: 'writingMode',\n 'writing-mode': 'writingMode',\n x1: 'x1',\n x2: 'x2',\n x: 'x',\n xchannelselector: 'xChannelSelector',\n xheight: 'xHeight',\n 'x-height': 'xHeight',\n xlinkactuate: 'xlinkActuate',\n 'xlink:actuate': 'xlinkActuate',\n xlinkarcrole: 'xlinkArcrole',\n 'xlink:arcrole': 'xlinkArcrole',\n xlinkhref: 'xlinkHref',\n 'xlink:href': 'xlinkHref',\n xlinkrole: 'xlinkRole',\n 'xlink:role': 'xlinkRole',\n xlinkshow: 'xlinkShow',\n 'xlink:show': 'xlinkShow',\n xlinktitle: 'xlinkTitle',\n 'xlink:title': 'xlinkTitle',\n xlinktype: 'xlinkType',\n 'xlink:type': 'xlinkType',\n xmlbase: 'xmlBase',\n 'xml:base': 'xmlBase',\n xmllang: 'xmlLang',\n 'xml:lang': 'xmlLang',\n xmlns: 'xmlns',\n 'xml:space': 'xmlSpace',\n xmlnsxlink: 'xmlnsXlink',\n 'xmlns:xlink': 'xmlnsXlink',\n xmlspace: 'xmlSpace',\n y1: 'y1',\n y2: 'y2',\n y: 'y',\n ychannelselector: 'yChannelSelector',\n z: 'z',\n zoomandpan: 'zoomAndPan'\n};\n\nvar ariaProperties = {\n 'aria-current': 0,\n // state\n 'aria-details': 0,\n 'aria-disabled': 0,\n // state\n 'aria-hidden': 0,\n // state\n 'aria-invalid': 0,\n // state\n 'aria-keyshortcuts': 0,\n 'aria-label': 0,\n 'aria-roledescription': 0,\n // Widget Attributes\n 'aria-autocomplete': 0,\n 'aria-checked': 0,\n 'aria-expanded': 0,\n 'aria-haspopup': 0,\n 'aria-level': 0,\n 'aria-modal': 0,\n 'aria-multiline': 0,\n 'aria-multiselectable': 0,\n 'aria-orientation': 0,\n 'aria-placeholder': 0,\n 'aria-pressed': 0,\n 'aria-readonly': 0,\n 'aria-required': 0,\n 'aria-selected': 0,\n 'aria-sort': 0,\n 'aria-valuemax': 0,\n 'aria-valuemin': 0,\n 'aria-valuenow': 0,\n 'aria-valuetext': 0,\n // Live Region Attributes\n 'aria-atomic': 0,\n 'aria-busy': 0,\n 'aria-live': 0,\n 'aria-relevant': 0,\n // Drag-and-Drop Attributes\n 'aria-dropeffect': 0,\n 'aria-grabbed': 0,\n // Relationship Attributes\n 'aria-activedescendant': 0,\n 'aria-colcount': 0,\n 'aria-colindex': 0,\n 'aria-colspan': 0,\n 'aria-controls': 0,\n 'aria-describedby': 0,\n 'aria-errormessage': 0,\n 'aria-flowto': 0,\n 'aria-labelledby': 0,\n 'aria-owns': 0,\n 'aria-posinset': 0,\n 'aria-rowcount': 0,\n 'aria-rowindex': 0,\n 'aria-rowspan': 0,\n 'aria-setsize': 0\n};\n\nvar warnedProperties = {};\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\nfunction validateProperty(tagName, name) {\n {\n if (hasOwnProperty$1.call(warnedProperties, name) && warnedProperties[name]) {\n return true;\n }\n\n if (rARIACamel.test(name)) {\n var ariaName = 'aria-' + name.slice(4).toLowerCase();\n var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (correctName == null) {\n error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n\n warnedProperties[name] = true;\n return true;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== correctName) {\n error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n\n warnedProperties[name] = true;\n return true;\n }\n }\n\n if (rARIA.test(name)) {\n var lowerCasedName = name.toLowerCase();\n var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (standardName == null) {\n warnedProperties[name] = true;\n return false;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== standardName) {\n error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n\n warnedProperties[name] = true;\n return true;\n }\n }\n }\n\n return true;\n}\n\nfunction warnInvalidARIAProps(type, props) {\n {\n var invalidProps = [];\n\n for (var key in props) {\n var isValid = validateProperty(type, key);\n\n if (!isValid) {\n invalidProps.push(key);\n }\n }\n\n var unknownPropString = invalidProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (invalidProps.length === 1) {\n error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n } else if (invalidProps.length > 1) {\n error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n }\n }\n}\n\nfunction validateProperties(type, props) {\n if (isCustomComponent(type, props)) {\n return;\n }\n\n warnInvalidARIAProps(type, props);\n}\n\nvar didWarnValueNull = false;\nfunction validateProperties$1(type, props) {\n {\n if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n return;\n }\n\n if (props != null && props.value === null && !didWarnValueNull) {\n didWarnValueNull = true;\n\n if (type === 'select' && props.multiple) {\n error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n } else {\n error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n }\n }\n }\n}\n\nvar validateProperty$1 = function () {};\n\n{\n var warnedProperties$1 = {};\n var _hasOwnProperty = Object.prototype.hasOwnProperty;\n var EVENT_NAME_REGEX = /^on./;\n var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n validateProperty$1 = function (tagName, name, value, canUseEventSystem) {\n if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n return true;\n }\n\n var lowerCasedName = name.toLowerCase();\n\n if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n\n warnedProperties$1[name] = true;\n return true;\n } // We can't rely on the event system being injected on the server.\n\n\n if (canUseEventSystem) {\n if (registrationNameModules.hasOwnProperty(name)) {\n return true;\n }\n\n var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n if (registrationName != null) {\n error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (EVENT_NAME_REGEX.test(name)) {\n error('Unknown event handler property `%s`. It will be ignored.', name);\n\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (EVENT_NAME_REGEX.test(name)) {\n // If no event plugins have been injected, we are in a server environment.\n // So we can't tell if the event name is correct for sure, but we can filter\n // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n if (INVALID_EVENT_NAME_REGEX.test(name)) {\n error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n }\n\n warnedProperties$1[name] = true;\n return true;\n } // Let the ARIA attribute hook validate ARIA attributes\n\n\n if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n return true;\n }\n\n if (lowerCasedName === 'innerhtml') {\n error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'aria') {\n error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'number' && isNaN(value)) {\n error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n var propertyInfo = getPropertyInfo(name);\n var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.\n\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n var standardName = possibleStandardNames[lowerCasedName];\n\n if (standardName !== name) {\n error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (!isReserved && name !== lowerCasedName) {\n // Unknown attributes should have lowercase casing since that's how they\n // will be cased anyway with server rendering.\n error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n if (value) {\n error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n } else {\n error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n }\n\n warnedProperties$1[name] = true;\n return true;\n } // Now that we've validated casing, do not validate\n // data types for reserved props\n\n\n if (isReserved) {\n return true;\n } // Warn when a known attribute is a bad type\n\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n warnedProperties$1[name] = true;\n return false;\n } // Warn when passing the strings 'false' or 'true' into a boolean prop\n\n\n if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n return true;\n };\n}\n\nvar warnUnknownProperties = function (type, props, canUseEventSystem) {\n {\n var unknownProps = [];\n\n for (var key in props) {\n var isValid = validateProperty$1(type, key, props[key], canUseEventSystem);\n\n if (!isValid) {\n unknownProps.push(key);\n }\n }\n\n var unknownPropString = unknownProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (unknownProps.length === 1) {\n error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n } else if (unknownProps.length > 1) {\n error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n }\n }\n};\n\nfunction validateProperties$2(type, props, canUseEventSystem) {\n if (isCustomComponent(type, props)) {\n return;\n }\n\n warnUnknownProperties(type, props, canUseEventSystem);\n}\n\nvar didWarnInvalidHydration = false;\nvar DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';\nvar SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';\nvar SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';\nvar AUTOFOCUS = 'autoFocus';\nvar CHILDREN = 'children';\nvar STYLE = 'style';\nvar HTML$1 = '__html';\nvar HTML_NAMESPACE$1 = Namespaces.html;\nvar warnedUnknownTags;\nvar suppressHydrationWarning;\nvar validatePropertiesInDevelopment;\nvar warnForTextDifference;\nvar warnForPropDifference;\nvar warnForExtraAttributes;\nvar warnForInvalidEventListener;\nvar canDiffStyleForHydrationWarning;\nvar normalizeMarkupForTextOrAttribute;\nvar normalizeHTML;\n\n{\n warnedUnknownTags = {\n // Chrome is the only major browser not shipping <time>. But as of July\n // 2017 it intends to ship it due to widespread usage. We intentionally\n // *don't* warn for <time> even if it's unrecognized by Chrome because\n // it soon will be, and many apps have been using it anyway.\n time: true,\n // There are working polyfills for <dialog>. Let people use it.\n dialog: true,\n // Electron ships a custom <webview> tag to display external web content in\n // an isolated frame and process.\n // This tag is not present in non Electron environments such as JSDom which\n // is often used for testing purposes.\n // @see https://electronjs.org/docs/api/webview-tag\n webview: true\n };\n\n validatePropertiesInDevelopment = function (type, props) {\n validateProperties(type, props);\n validateProperties$1(type, props);\n validateProperties$2(type, props,\n /* canUseEventSystem */\n true);\n }; // IE 11 parses & normalizes the style attribute as opposed to other\n // browsers. It adds spaces and sorts the properties in some\n // non-alphabetical order. Handling that would require sorting CSS\n // properties in the client & server versions or applying\n // `expectedStyle` to a temporary DOM node to read its `style` attribute\n // normalized. Since it only affects IE, we're skipping style warnings\n // in that browser completely in favor of doing all that work.\n // See https://github.com/facebook/react/issues/11807\n\n\n canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode; // HTML parsing normalizes CR and CRLF to LF.\n // It also can turn \\u0000 into \\uFFFD inside attributes.\n // https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream\n // If we have a mismatch, it might be caused by that.\n // We will still patch up in this case but not fire the warning.\n\n var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g;\n var NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\n\n normalizeMarkupForTextOrAttribute = function (markup) {\n var markupString = typeof markup === 'string' ? markup : '' + markup;\n return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');\n };\n\n warnForTextDifference = function (serverText, clientText) {\n if (didWarnInvalidHydration) {\n return;\n }\n\n var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);\n var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);\n\n if (normalizedServerText === normalizedClientText) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Text content did not match. Server: \"%s\" Client: \"%s\"', normalizedServerText, normalizedClientText);\n };\n\n warnForPropDifference = function (propName, serverValue, clientValue) {\n if (didWarnInvalidHydration) {\n return;\n }\n\n var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);\n var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);\n\n if (normalizedServerValue === normalizedClientValue) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));\n };\n\n warnForExtraAttributes = function (attributeNames) {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n var names = [];\n attributeNames.forEach(function (name) {\n names.push(name);\n });\n\n error('Extra attributes from the server: %s', names);\n };\n\n warnForInvalidEventListener = function (registrationName, listener) {\n if (listener === false) {\n error('Expected `%s` listener to be a function, instead got `false`.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);\n } else {\n error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);\n }\n }; // Parse the HTML and read it back to normalize the HTML string so that it\n // can be used for comparison.\n\n\n normalizeHTML = function (parent, html) {\n // We could have created a separate document here to avoid\n // re-initializing custom elements if they exist. But this breaks\n // how <noscript> is being handled. So we use the same document.\n // See the discussion in https://github.com/facebook/react/pull/11157.\n var testElement = parent.namespaceURI === HTML_NAMESPACE$1 ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);\n testElement.innerHTML = html;\n return testElement.innerHTML;\n };\n}\n\nfunction ensureListeningTo(rootContainerElement, registrationName) {\n var isDocumentOrFragment = rootContainerElement.nodeType === DOCUMENT_NODE || rootContainerElement.nodeType === DOCUMENT_FRAGMENT_NODE;\n var doc = isDocumentOrFragment ? rootContainerElement : rootContainerElement.ownerDocument;\n legacyListenToEvent(registrationName, doc);\n}\n\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n}\n\nfunction noop() {}\n\nfunction trapClickOnNonInteractiveElement(node) {\n // Mobile Safari does not fire properly bubble click events on\n // non-interactive elements, which means delegated click listeners do not\n // fire. The workaround for this bug involves attaching an empty click\n // listener on the target node.\n // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n // Just set it using the onclick property so that we don't have to manage any\n // bookkeeping for it. Not sure if we need to clear it when the listener is\n // removed.\n // TODO: Only do this for the relevant Safaris maybe?\n node.onclick = noop;\n}\n\nfunction setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {\n for (var propKey in nextProps) {\n if (!nextProps.hasOwnProperty(propKey)) {\n continue;\n }\n\n var nextProp = nextProps[propKey];\n\n if (propKey === STYLE) {\n {\n if (nextProp) {\n // Freeze the next style object so that we can assume it won't be\n // mutated. We have already warned for this in the past.\n Object.freeze(nextProp);\n }\n } // Relies on `updateStylesByID` not mutating `styleUpdates`.\n\n\n setValueForStyles(domElement, nextProp);\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n\n if (nextHtml != null) {\n setInnerHTML(domElement, nextHtml);\n }\n } else if (propKey === CHILDREN) {\n if (typeof nextProp === 'string') {\n // Avoid setting initial textContent when the text is empty. In IE11 setting\n // textContent on a <textarea> will cause the placeholder to not\n // show within the <textarea> until it has been focused and blurred again.\n // https://github.com/facebook/react/issues/6731#issuecomment-254874553\n var canSetTextContent = tag !== 'textarea' || nextProp !== '';\n\n if (canSetTextContent) {\n setTextContent(domElement, nextProp);\n }\n } else if (typeof nextProp === 'number') {\n setTextContent(domElement, '' + nextProp);\n }\n } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n if ( typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n\n ensureListeningTo(rootContainerElement, propKey);\n }\n } else if (nextProp != null) {\n setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);\n }\n }\n}\n\nfunction updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {\n // TODO: Handle wasCustomComponentTag\n for (var i = 0; i < updatePayload.length; i += 2) {\n var propKey = updatePayload[i];\n var propValue = updatePayload[i + 1];\n\n if (propKey === STYLE) {\n setValueForStyles(domElement, propValue);\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n setInnerHTML(domElement, propValue);\n } else if (propKey === CHILDREN) {\n setTextContent(domElement, propValue);\n } else {\n setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);\n }\n }\n}\n\nfunction createElement(type, props, rootContainerElement, parentNamespace) {\n var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML\n // tags get no namespace.\n\n var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);\n var domElement;\n var namespaceURI = parentNamespace;\n\n if (namespaceURI === HTML_NAMESPACE$1) {\n namespaceURI = getIntrinsicNamespace(type);\n }\n\n if (namespaceURI === HTML_NAMESPACE$1) {\n {\n isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to\n // allow <SVG> or <mATH>.\n\n if (!isCustomComponentTag && type !== type.toLowerCase()) {\n error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);\n }\n }\n\n if (type === 'script') {\n // Create the script via .innerHTML so its \"parser-inserted\" flag is\n // set to true and it does not execute\n var div = ownerDocument.createElement('div');\n\n div.innerHTML = '<script><' + '/script>'; // eslint-disable-line\n // This is guaranteed to yield a script element.\n\n var firstChild = div.firstChild;\n domElement = div.removeChild(firstChild);\n } else if (typeof props.is === 'string') {\n // $FlowIssue `createElement` should be updated for Web Components\n domElement = ownerDocument.createElement(type, {\n is: props.is\n });\n } else {\n // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.\n // See discussion in https://github.com/facebook/react/pull/6896\n // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`\n // attributes on `select`s needs to be added before `option`s are inserted.\n // This prevents:\n // - a bug where the `select` does not scroll to the correct option because singular\n // `select` elements automatically pick the first item #13222\n // - a bug where the `select` set the first item as selected despite the `size` attribute #14239\n // See https://github.com/facebook/react/issues/13222\n // and https://github.com/facebook/react/issues/14239\n\n if (type === 'select') {\n var node = domElement;\n\n if (props.multiple) {\n node.multiple = true;\n } else if (props.size) {\n // Setting a size greater than 1 causes a select to behave like `multiple=true`, where\n // it is possible that no option is selected.\n //\n // This is only necessary when a select in \"single selection mode\".\n node.size = props.size;\n }\n }\n }\n } else {\n domElement = ownerDocument.createElementNS(namespaceURI, type);\n }\n\n {\n if (namespaceURI === HTML_NAMESPACE$1) {\n if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !Object.prototype.hasOwnProperty.call(warnedUnknownTags, type)) {\n warnedUnknownTags[type] = true;\n\n error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);\n }\n }\n }\n\n return domElement;\n}\nfunction createTextNode(text, rootContainerElement) {\n return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);\n}\nfunction setInitialProperties(domElement, tag, rawProps, rootContainerElement) {\n var isCustomComponentTag = isCustomComponent(tag, rawProps);\n\n {\n validatePropertiesInDevelopment(tag, rawProps);\n } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n var props;\n\n switch (tag) {\n case 'iframe':\n case 'object':\n case 'embed':\n trapBubbledEvent(TOP_LOAD, domElement);\n props = rawProps;\n break;\n\n case 'video':\n case 'audio':\n // Create listener for each media event\n for (var i = 0; i < mediaEventTypes.length; i++) {\n trapBubbledEvent(mediaEventTypes[i], domElement);\n }\n\n props = rawProps;\n break;\n\n case 'source':\n trapBubbledEvent(TOP_ERROR, domElement);\n props = rawProps;\n break;\n\n case 'img':\n case 'image':\n case 'link':\n trapBubbledEvent(TOP_ERROR, domElement);\n trapBubbledEvent(TOP_LOAD, domElement);\n props = rawProps;\n break;\n\n case 'form':\n trapBubbledEvent(TOP_RESET, domElement);\n trapBubbledEvent(TOP_SUBMIT, domElement);\n props = rawProps;\n break;\n\n case 'details':\n trapBubbledEvent(TOP_TOGGLE, domElement);\n props = rawProps;\n break;\n\n case 'input':\n initWrapperState(domElement, rawProps);\n props = getHostProps(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n case 'option':\n validateProps(domElement, rawProps);\n props = getHostProps$1(domElement, rawProps);\n break;\n\n case 'select':\n initWrapperState$1(domElement, rawProps);\n props = getHostProps$2(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n case 'textarea':\n initWrapperState$2(domElement, rawProps);\n props = getHostProps$3(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n default:\n props = rawProps;\n }\n\n assertValidProps(tag, props);\n setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);\n\n switch (tag) {\n case 'input':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper(domElement, rawProps, false);\n break;\n\n case 'textarea':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper$3(domElement);\n break;\n\n case 'option':\n postMountWrapper$1(domElement, rawProps);\n break;\n\n case 'select':\n postMountWrapper$2(domElement, rawProps);\n break;\n\n default:\n if (typeof props.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n} // Calculate the diff between the two objects.\n\nfunction diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {\n {\n validatePropertiesInDevelopment(tag, nextRawProps);\n }\n\n var updatePayload = null;\n var lastProps;\n var nextProps;\n\n switch (tag) {\n case 'input':\n lastProps = getHostProps(domElement, lastRawProps);\n nextProps = getHostProps(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n case 'option':\n lastProps = getHostProps$1(domElement, lastRawProps);\n nextProps = getHostProps$1(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n case 'select':\n lastProps = getHostProps$2(domElement, lastRawProps);\n nextProps = getHostProps$2(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n case 'textarea':\n lastProps = getHostProps$3(domElement, lastRawProps);\n nextProps = getHostProps$3(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n default:\n lastProps = lastRawProps;\n nextProps = nextRawProps;\n\n if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n\n assertValidProps(tag, nextProps);\n var propKey;\n var styleName;\n var styleUpdates = null;\n\n for (propKey in lastProps) {\n if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n continue;\n }\n\n if (propKey === STYLE) {\n var lastStyle = lastProps[propKey];\n\n for (styleName in lastStyle) {\n if (lastStyle.hasOwnProperty(styleName)) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n\n styleUpdates[styleName] = '';\n }\n }\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n // This is a special case. If any listener updates we need to ensure\n // that the \"current\" fiber pointer gets updated so we need a commit\n // to update this element.\n if (!updatePayload) {\n updatePayload = [];\n }\n } else {\n // For all other deleted properties we add it to the queue. We use\n // the whitelist in the commit phase instead.\n (updatePayload = updatePayload || []).push(propKey, null);\n }\n }\n\n for (propKey in nextProps) {\n var nextProp = nextProps[propKey];\n var lastProp = lastProps != null ? lastProps[propKey] : undefined;\n\n if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n continue;\n }\n\n if (propKey === STYLE) {\n {\n if (nextProp) {\n // Freeze the next style object so that we can assume it won't be\n // mutated. We have already warned for this in the past.\n Object.freeze(nextProp);\n }\n }\n\n if (lastProp) {\n // Unset styles on `lastProp` but not on `nextProp`.\n for (styleName in lastProp) {\n if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n\n styleUpdates[styleName] = '';\n }\n } // Update styles that changed since `lastProp`.\n\n\n for (styleName in nextProp) {\n if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n\n styleUpdates[styleName] = nextProp[styleName];\n }\n }\n } else {\n // Relies on `updateStylesByID` not mutating `styleUpdates`.\n if (!styleUpdates) {\n if (!updatePayload) {\n updatePayload = [];\n }\n\n updatePayload.push(propKey, styleUpdates);\n }\n\n styleUpdates = nextProp;\n }\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n var lastHtml = lastProp ? lastProp[HTML$1] : undefined;\n\n if (nextHtml != null) {\n if (lastHtml !== nextHtml) {\n (updatePayload = updatePayload || []).push(propKey, nextHtml);\n }\n }\n } else if (propKey === CHILDREN) {\n if (lastProp !== nextProp && (typeof nextProp === 'string' || typeof nextProp === 'number')) {\n (updatePayload = updatePayload || []).push(propKey, '' + nextProp);\n }\n } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n // We eagerly listen to this even though we haven't committed yet.\n if ( typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n\n ensureListeningTo(rootContainerElement, propKey);\n }\n\n if (!updatePayload && lastProp !== nextProp) {\n // This is a special case. If any listener updates we need to ensure\n // that the \"current\" props pointer gets updated so we need a commit\n // to update this element.\n updatePayload = [];\n }\n } else {\n // For any other property we always add it to the queue and then we\n // filter it out using the whitelist during the commit.\n (updatePayload = updatePayload || []).push(propKey, nextProp);\n }\n }\n\n if (styleUpdates) {\n {\n validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);\n }\n\n (updatePayload = updatePayload || []).push(STYLE, styleUpdates);\n }\n\n return updatePayload;\n} // Apply the diff.\n\nfunction updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {\n // Update checked *before* name.\n // In the middle of an update, it is possible to have multiple checked.\n // When a checked radio tries to change name, browser makes another radio's checked false.\n if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {\n updateChecked(domElement, nextRawProps);\n }\n\n var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);\n var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.\n\n updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props\n // changed.\n\n switch (tag) {\n case 'input':\n // Update the wrapper around inputs *after* updating props. This has to\n // happen after `updateDOMProperties`. Otherwise HTML5 input validations\n // raise warnings and prevent the new value from being assigned.\n updateWrapper(domElement, nextRawProps);\n break;\n\n case 'textarea':\n updateWrapper$1(domElement, nextRawProps);\n break;\n\n case 'select':\n // <select> value update needs to occur after <option> children\n // reconciliation\n postUpdateWrapper(domElement, nextRawProps);\n break;\n }\n}\n\nfunction getPossibleStandardName(propName) {\n {\n var lowerCasedName = propName.toLowerCase();\n\n if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n return null;\n }\n\n return possibleStandardNames[lowerCasedName] || null;\n }\n}\n\nfunction diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement) {\n var isCustomComponentTag;\n var extraAttributeNames;\n\n {\n suppressHydrationWarning = rawProps[SUPPRESS_HYDRATION_WARNING] === true;\n isCustomComponentTag = isCustomComponent(tag, rawProps);\n validatePropertiesInDevelopment(tag, rawProps);\n } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n switch (tag) {\n case 'iframe':\n case 'object':\n case 'embed':\n trapBubbledEvent(TOP_LOAD, domElement);\n break;\n\n case 'video':\n case 'audio':\n // Create listener for each media event\n for (var i = 0; i < mediaEventTypes.length; i++) {\n trapBubbledEvent(mediaEventTypes[i], domElement);\n }\n\n break;\n\n case 'source':\n trapBubbledEvent(TOP_ERROR, domElement);\n break;\n\n case 'img':\n case 'image':\n case 'link':\n trapBubbledEvent(TOP_ERROR, domElement);\n trapBubbledEvent(TOP_LOAD, domElement);\n break;\n\n case 'form':\n trapBubbledEvent(TOP_RESET, domElement);\n trapBubbledEvent(TOP_SUBMIT, domElement);\n break;\n\n case 'details':\n trapBubbledEvent(TOP_TOGGLE, domElement);\n break;\n\n case 'input':\n initWrapperState(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n case 'option':\n validateProps(domElement, rawProps);\n break;\n\n case 'select':\n initWrapperState$1(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n case 'textarea':\n initWrapperState$2(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n }\n\n assertValidProps(tag, rawProps);\n\n {\n extraAttributeNames = new Set();\n var attributes = domElement.attributes;\n\n for (var _i = 0; _i < attributes.length; _i++) {\n var name = attributes[_i].name.toLowerCase();\n\n switch (name) {\n // Built-in SSR attribute is whitelisted\n case 'data-reactroot':\n break;\n // Controlled attributes are not validated\n // TODO: Only ignore them on controlled tags.\n\n case 'value':\n break;\n\n case 'checked':\n break;\n\n case 'selected':\n break;\n\n default:\n // Intentionally use the original name.\n // See discussion in https://github.com/facebook/react/pull/10676.\n extraAttributeNames.add(attributes[_i].name);\n }\n }\n }\n\n var updatePayload = null;\n\n for (var propKey in rawProps) {\n if (!rawProps.hasOwnProperty(propKey)) {\n continue;\n }\n\n var nextProp = rawProps[propKey];\n\n if (propKey === CHILDREN) {\n // For text content children we compare against textContent. This\n // might match additional HTML that is hidden when we read it using\n // textContent. E.g. \"foo\" will match \"f<span>oo</span>\" but that still\n // satisfies our requirement. Our requirement is not to produce perfect\n // HTML and attributes. Ideally we should preserve structure but it's\n // ok not to if the visible content is still enough to indicate what\n // even listeners these nodes might be wired up to.\n // TODO: Warn if there is more than a single textNode as a child.\n // TODO: Should we use domElement.firstChild.nodeValue to compare?\n if (typeof nextProp === 'string') {\n if (domElement.textContent !== nextProp) {\n if ( !suppressHydrationWarning) {\n warnForTextDifference(domElement.textContent, nextProp);\n }\n\n updatePayload = [CHILDREN, nextProp];\n }\n } else if (typeof nextProp === 'number') {\n if (domElement.textContent !== '' + nextProp) {\n if ( !suppressHydrationWarning) {\n warnForTextDifference(domElement.textContent, nextProp);\n }\n\n updatePayload = [CHILDREN, '' + nextProp];\n }\n }\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n if ( typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n\n ensureListeningTo(rootContainerElement, propKey);\n }\n } else if ( // Convince Flow we've calculated it (it's DEV-only in this method.)\n typeof isCustomComponentTag === 'boolean') {\n // Validate that the properties correspond to their expected values.\n var serverValue = void 0;\n var propertyInfo = getPropertyInfo(propKey);\n\n if (suppressHydrationWarning) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated\n // TODO: Only ignore them on controlled tags.\n propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var serverHTML = domElement.innerHTML;\n var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n var expectedHTML = normalizeHTML(domElement, nextHtml != null ? nextHtml : '');\n\n if (expectedHTML !== serverHTML) {\n warnForPropDifference(propKey, serverHTML, expectedHTML);\n }\n } else if (propKey === STYLE) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey);\n\n if (canDiffStyleForHydrationWarning) {\n var expectedStyle = createDangerousStringForStyles(nextProp);\n serverValue = domElement.getAttribute('style');\n\n if (expectedStyle !== serverValue) {\n warnForPropDifference(propKey, serverValue, expectedStyle);\n }\n }\n } else if (isCustomComponentTag) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey.toLowerCase());\n serverValue = getValueForAttribute(domElement, propKey, nextProp);\n\n if (nextProp !== serverValue) {\n warnForPropDifference(propKey, serverValue, nextProp);\n }\n } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {\n var isMismatchDueToBadCasing = false;\n\n if (propertyInfo !== null) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propertyInfo.attributeName);\n serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);\n } else {\n var ownNamespace = parentNamespace;\n\n if (ownNamespace === HTML_NAMESPACE$1) {\n ownNamespace = getIntrinsicNamespace(tag);\n }\n\n if (ownNamespace === HTML_NAMESPACE$1) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey.toLowerCase());\n } else {\n var standardName = getPossibleStandardName(propKey);\n\n if (standardName !== null && standardName !== propKey) {\n // If an SVG prop is supplied with bad casing, it will\n // be successfully parsed from HTML, but will produce a mismatch\n // (and would be incorrectly rendered on the client).\n // However, we already warn about bad casing elsewhere.\n // So we'll skip the misleading extra mismatch warning in this case.\n isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined.\n\n extraAttributeNames.delete(standardName);\n } // $FlowFixMe - Should be inferred as not undefined.\n\n\n extraAttributeNames.delete(propKey);\n }\n\n serverValue = getValueForAttribute(domElement, propKey, nextProp);\n }\n\n if (nextProp !== serverValue && !isMismatchDueToBadCasing) {\n warnForPropDifference(propKey, serverValue, nextProp);\n }\n }\n }\n }\n\n {\n // $FlowFixMe - Should be inferred as not undefined.\n if (extraAttributeNames.size > 0 && !suppressHydrationWarning) {\n // $FlowFixMe - Should be inferred as not undefined.\n warnForExtraAttributes(extraAttributeNames);\n }\n }\n\n switch (tag) {\n case 'input':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper(domElement, rawProps, true);\n break;\n\n case 'textarea':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper$3(domElement);\n break;\n\n case 'select':\n case 'option':\n // For input and textarea we current always set the value property at\n // post mount to force it to diverge from attributes. However, for\n // option and select we don't quite do the same thing and select\n // is not resilient to the DOM state changing so we don't do that here.\n // TODO: Consider not doing this for input and textarea.\n break;\n\n default:\n if (typeof rawProps.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n\n return updatePayload;\n}\nfunction diffHydratedText(textNode, text) {\n var isDifferent = textNode.nodeValue !== text;\n return isDifferent;\n}\nfunction warnForUnmatchedText(textNode, text) {\n {\n warnForTextDifference(textNode.nodeValue, text);\n }\n}\nfunction warnForDeletedHydratableElement(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForDeletedHydratableText(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Did not expect server HTML to contain the text node \"%s\" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForInsertedHydratedElement(parentNode, tag, props) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForInsertedHydratedText(parentNode, text) {\n {\n if (text === '') {\n // We expect to insert empty text nodes since they're not represented in\n // the HTML.\n // TODO: Remove this special case if we can just avoid inserting empty\n // text nodes.\n return;\n }\n\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Expected server HTML to contain a matching text node for \"%s\" in <%s>.', text, parentNode.nodeName.toLowerCase());\n }\n}\nfunction restoreControlledState$3(domElement, tag, props) {\n switch (tag) {\n case 'input':\n restoreControlledState(domElement, props);\n return;\n\n case 'textarea':\n restoreControlledState$2(domElement, props);\n return;\n\n case 'select':\n restoreControlledState$1(domElement, props);\n return;\n }\n}\n\nfunction getActiveElement(doc) {\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n\n if (typeof doc === 'undefined') {\n return null;\n }\n\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n while (node && node.firstChild) {\n node = node.firstChild;\n }\n\n return node;\n}\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\n\n\nfunction getSiblingNode(node) {\n while (node) {\n if (node.nextSibling) {\n return node.nextSibling;\n }\n\n node = node.parentNode;\n }\n}\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\n\n\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n var nodeStart = 0;\n var nodeEnd = 0;\n\n while (node) {\n if (node.nodeType === TEXT_NODE) {\n nodeEnd = nodeStart + node.textContent.length;\n\n if (nodeStart <= offset && nodeEnd >= offset) {\n return {\n node: node,\n offset: offset - nodeStart\n };\n }\n\n nodeStart = nodeEnd;\n }\n\n node = getLeafNode(getSiblingNode(node));\n }\n}\n\n/**\n * @param {DOMElement} outerNode\n * @return {?object}\n */\n\nfunction getOffsets(outerNode) {\n var ownerDocument = outerNode.ownerDocument;\n var win = ownerDocument && ownerDocument.defaultView || window;\n var selection = win.getSelection && win.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n return null;\n }\n\n var anchorNode = selection.anchorNode,\n anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode,\n focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be \"anonymous divs\", e.g. the\n // up/down buttons on an <input type=\"number\">. Anonymous divs do not seem to\n // expose properties, triggering a \"Permission denied error\" if any of its\n // properties are accessed. The only seemingly possible way to avoid erroring\n // is to access a property that typically works for non-anonymous divs and\n // catch any error that may otherwise arise. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n\n try {\n /* eslint-disable no-unused-expressions */\n anchorNode.nodeType;\n focusNode.nodeType;\n /* eslint-enable no-unused-expressions */\n } catch (e) {\n return null;\n }\n\n return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);\n}\n/**\n * Returns {start, end} where `start` is the character/codepoint index of\n * (anchorNode, anchorOffset) within the textContent of `outerNode`, and\n * `end` is the index of (focusNode, focusOffset).\n *\n * Returns null if you pass in garbage input but we should probably just crash.\n *\n * Exported only for testing.\n */\n\nfunction getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {\n var length = 0;\n var start = -1;\n var end = -1;\n var indexWithinAnchor = 0;\n var indexWithinFocus = 0;\n var node = outerNode;\n var parentNode = null;\n\n outer: while (true) {\n var next = null;\n\n while (true) {\n if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {\n start = length + anchorOffset;\n }\n\n if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {\n end = length + focusOffset;\n }\n\n if (node.nodeType === TEXT_NODE) {\n length += node.nodeValue.length;\n }\n\n if ((next = node.firstChild) === null) {\n break;\n } // Moving from `node` to its first child `next`.\n\n\n parentNode = node;\n node = next;\n }\n\n while (true) {\n if (node === outerNode) {\n // If `outerNode` has children, this is always the second time visiting\n // it. If it has no children, this is still the first loop, and the only\n // valid selection is anchorNode and focusNode both equal to this node\n // and both offsets 0, in which case we will have handled above.\n break outer;\n }\n\n if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {\n start = length;\n }\n\n if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {\n end = length;\n }\n\n if ((next = node.nextSibling) !== null) {\n break;\n }\n\n node = parentNode;\n parentNode = node.parentNode;\n } // Moving from `node` to its next sibling `next`.\n\n\n node = next;\n }\n\n if (start === -1 || end === -1) {\n // This should never happen. (Would happen if the anchor/focus nodes aren't\n // actually inside the passed-in node.)\n return null;\n }\n\n return {\n start: start,\n end: end\n };\n}\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n\nfunction setOffsets(node, offsets) {\n var doc = node.ownerDocument || document;\n var win = doc && doc.defaultView || window; // Edge fails with \"Object expected\" in some scenarios.\n // (For instance: TinyMCE editor used in a list component that supports pasting to add more,\n // fails when pasting 100+ items)\n\n if (!win.getSelection) {\n return;\n }\n\n var selection = win.getSelection();\n var length = node.textContent.length;\n var start = Math.min(offsets.start, length);\n var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.\n // Flip backward selections, so we can set with a single range.\n\n if (!selection.extend && start > end) {\n var temp = end;\n end = start;\n start = temp;\n }\n\n var startMarker = getNodeForCharacterOffset(node, start);\n var endMarker = getNodeForCharacterOffset(node, end);\n\n if (startMarker && endMarker) {\n if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {\n return;\n }\n\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n\n if (start > end) {\n selection.addRange(range);\n selection.extend(endMarker.node, endMarker.offset);\n } else {\n range.setEnd(endMarker.node, endMarker.offset);\n selection.addRange(range);\n }\n }\n}\n\nfunction isTextNode(node) {\n return node && node.nodeType === TEXT_NODE;\n}\n\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nfunction isInDocument(node) {\n return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);\n}\n\nfunction isSameOriginFrame(iframe) {\n try {\n // Accessing the contentDocument of a HTMLIframeElement can cause the browser\n // to throw, e.g. if it has a cross-origin src attribute.\n // Safari will show an error in the console when the access results in \"Blocked a frame with origin\". e.g:\n // iframe.contentDocument.defaultView;\n // A safety way is to access one of the cross origin properties: Window or Location\n // Which might result in \"SecurityError\" DOM Exception and it is compatible to Safari.\n // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl\n return typeof iframe.contentWindow.location.href === 'string';\n } catch (err) {\n return false;\n }\n}\n\nfunction getActiveElementDeep() {\n var win = window;\n var element = getActiveElement();\n\n while (element instanceof win.HTMLIFrameElement) {\n if (isSameOriginFrame(element)) {\n win = element.contentWindow;\n } else {\n return element;\n }\n\n element = getActiveElement(win.document);\n }\n\n return element;\n}\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\n\n/**\n * @hasSelectionCapabilities: we get the element types that support selection\n * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`\n * and `selectionEnd` rows.\n */\n\n\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');\n}\nfunction getSelectionInformation() {\n var focusedElem = getActiveElementDeep();\n return {\n // Used by Flare\n activeElementDetached: null,\n focusedElem: focusedElem,\n selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null\n };\n}\n/**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n\nfunction restoreSelection(priorSelectionInformation) {\n var curFocusedElem = getActiveElementDeep();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {\n setSelection(priorFocusedElem, priorSelectionRange);\n } // Focusing a node can change the scroll position, which is undesirable\n\n\n var ancestors = [];\n var ancestor = priorFocusedElem;\n\n while (ancestor = ancestor.parentNode) {\n if (ancestor.nodeType === ELEMENT_NODE) {\n ancestors.push({\n element: ancestor,\n left: ancestor.scrollLeft,\n top: ancestor.scrollTop\n });\n }\n }\n\n if (typeof priorFocusedElem.focus === 'function') {\n priorFocusedElem.focus();\n }\n\n for (var i = 0; i < ancestors.length; i++) {\n var info = ancestors[i];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n}\n/**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n\nfunction getSelection(input) {\n var selection;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else {\n // Content editable or old IE textarea.\n selection = getOffsets(input);\n }\n\n return selection || {\n start: 0,\n end: 0\n };\n}\n/**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\n\nfunction setSelection(input, offsets) {\n var start = offsets.start,\n end = offsets.end;\n\n if (end === undefined) {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else {\n setOffsets(input, offsets);\n }\n}\n\nvar validateDOMNesting = function () {};\n\nvar updatedAncestorInfo = function () {};\n\n{\n // This validation code was written based on the HTML5 parsing spec:\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n //\n // Note: this does not catch all invalid nesting, nor does it try to (as it's\n // not clear what practical benefit doing so provides); instead, we warn only\n // for cases where the parser will give a parse tree differing from what React\n // intended. For example, <b><div></div></b> is invalid but we don't warn\n // because it still parses correctly; we do warn for other cases like nested\n // <p> tags where the beginning of the second element implicitly closes the\n // first, causing a confusing mess.\n // https://html.spec.whatwg.org/multipage/syntax.html#special\n var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n\n var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n // TODO: Distinguish by namespace here -- for <title>, including it here\n // errs on the side of fewer warnings\n 'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n\n var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n\n var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n var emptyAncestorInfo = {\n current: null,\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null\n };\n\n updatedAncestorInfo = function (oldInfo, tag) {\n var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n\n var info = {\n tag: tag\n };\n\n if (inScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.aTagInScope = null;\n ancestorInfo.buttonTagInScope = null;\n ancestorInfo.nobrTagInScope = null;\n }\n\n if (buttonScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.pTagInButtonScope = null;\n } // See rules for 'li', 'dd', 'dt' start tags in\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n ancestorInfo.listItemTagAutoclosing = null;\n ancestorInfo.dlItemTagAutoclosing = null;\n }\n\n ancestorInfo.current = info;\n\n if (tag === 'form') {\n ancestorInfo.formTag = info;\n }\n\n if (tag === 'a') {\n ancestorInfo.aTagInScope = info;\n }\n\n if (tag === 'button') {\n ancestorInfo.buttonTagInScope = info;\n }\n\n if (tag === 'nobr') {\n ancestorInfo.nobrTagInScope = info;\n }\n\n if (tag === 'p') {\n ancestorInfo.pTagInButtonScope = info;\n }\n\n if (tag === 'li') {\n ancestorInfo.listItemTagAutoclosing = info;\n }\n\n if (tag === 'dd' || tag === 'dt') {\n ancestorInfo.dlItemTagAutoclosing = info;\n }\n\n return ancestorInfo;\n };\n /**\n * Returns whether\n */\n\n\n var isTagValidWithParent = function (tag, parentTag) {\n // First, let's check if we're in an unusual parsing mode...\n switch (parentTag) {\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n case 'select':\n return tag === 'option' || tag === 'optgroup' || tag === '#text';\n\n case 'optgroup':\n return tag === 'option' || tag === '#text';\n // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n // but\n\n case 'option':\n return tag === '#text';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n // No special behavior since these rules fall back to \"in body\" mode for\n // all except special table nodes which cause bad parsing behavior anyway.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n\n case 'tr':\n return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n\n case 'tbody':\n case 'thead':\n case 'tfoot':\n return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n\n case 'colgroup':\n return tag === 'col' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n\n case 'table':\n return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n\n case 'head':\n return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n\n case 'html':\n return tag === 'head' || tag === 'body' || tag === 'frameset';\n\n case 'frameset':\n return tag === 'frame';\n\n case '#document':\n return tag === 'html';\n } // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n // where the parsing rules cause implicit opens or closes to be added.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n case 'rp':\n case 'rt':\n return impliedEndTags.indexOf(parentTag) === -1;\n\n case 'body':\n case 'caption':\n case 'col':\n case 'colgroup':\n case 'frameset':\n case 'frame':\n case 'head':\n case 'html':\n case 'tbody':\n case 'td':\n case 'tfoot':\n case 'th':\n case 'thead':\n case 'tr':\n // These tags are only valid with a few parents that have special child\n // parsing rules -- if we're down here, then none of those matched and\n // so we allow it only if we don't know what the parent is, as all other\n // cases are invalid.\n return parentTag == null;\n }\n\n return true;\n };\n /**\n * Returns whether\n */\n\n\n var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n switch (tag) {\n case 'address':\n case 'article':\n case 'aside':\n case 'blockquote':\n case 'center':\n case 'details':\n case 'dialog':\n case 'dir':\n case 'div':\n case 'dl':\n case 'fieldset':\n case 'figcaption':\n case 'figure':\n case 'footer':\n case 'header':\n case 'hgroup':\n case 'main':\n case 'menu':\n case 'nav':\n case 'ol':\n case 'p':\n case 'section':\n case 'summary':\n case 'ul':\n case 'pre':\n case 'listing':\n case 'table':\n case 'hr':\n case 'xmp':\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return ancestorInfo.pTagInButtonScope;\n\n case 'form':\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n case 'li':\n return ancestorInfo.listItemTagAutoclosing;\n\n case 'dd':\n case 'dt':\n return ancestorInfo.dlItemTagAutoclosing;\n\n case 'button':\n return ancestorInfo.buttonTagInScope;\n\n case 'a':\n // Spec says something about storing a list of markers, but it sounds\n // equivalent to this check.\n return ancestorInfo.aTagInScope;\n\n case 'nobr':\n return ancestorInfo.nobrTagInScope;\n }\n\n return null;\n };\n\n var didWarn$1 = {};\n\n validateDOMNesting = function (childTag, childText, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.current;\n var parentTag = parentInfo && parentInfo.tag;\n\n if (childText != null) {\n if (childTag != null) {\n error('validateDOMNesting: when childText is passed, childTag should be null');\n }\n\n childTag = '#text';\n }\n\n var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n var invalidParentOrAncestor = invalidParent || invalidAncestor;\n\n if (!invalidParentOrAncestor) {\n return;\n }\n\n var ancestorTag = invalidParentOrAncestor.tag;\n var addendum = getCurrentFiberStackInDev();\n var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + addendum;\n\n if (didWarn$1[warnKey]) {\n return;\n }\n\n didWarn$1[warnKey] = true;\n var tagDisplayName = childTag;\n var whitespaceInfo = '';\n\n if (childTag === '#text') {\n if (/\\S/.test(childText)) {\n tagDisplayName = 'Text nodes';\n } else {\n tagDisplayName = 'Whitespace text nodes';\n whitespaceInfo = \" Make sure you don't have any extra whitespace between tags on \" + 'each line of your source code.';\n }\n } else {\n tagDisplayName = '<' + childTag + '>';\n }\n\n if (invalidParent) {\n var info = '';\n\n if (ancestorTag === 'table' && childTag === 'tr') {\n info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';\n }\n\n error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info);\n } else {\n error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);\n }\n };\n}\n\nvar SUPPRESS_HYDRATION_WARNING$1;\n\n{\n SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';\n}\n\nvar SUSPENSE_START_DATA = '$';\nvar SUSPENSE_END_DATA = '/$';\nvar SUSPENSE_PENDING_START_DATA = '$?';\nvar SUSPENSE_FALLBACK_START_DATA = '$!';\nvar STYLE$1 = 'style';\nvar eventsEnabled = null;\nvar selectionInformation = null;\n\nfunction shouldAutoFocusHostComponent(type, props) {\n switch (type) {\n case 'button':\n case 'input':\n case 'select':\n case 'textarea':\n return !!props.autoFocus;\n }\n\n return false;\n}\nfunction getRootHostContext(rootContainerInstance) {\n var type;\n var namespace;\n var nodeType = rootContainerInstance.nodeType;\n\n switch (nodeType) {\n case DOCUMENT_NODE:\n case DOCUMENT_FRAGMENT_NODE:\n {\n type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';\n var root = rootContainerInstance.documentElement;\n namespace = root ? root.namespaceURI : getChildNamespace(null, '');\n break;\n }\n\n default:\n {\n var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;\n var ownNamespace = container.namespaceURI || null;\n type = container.tagName;\n namespace = getChildNamespace(ownNamespace, type);\n break;\n }\n }\n\n {\n var validatedTag = type.toLowerCase();\n var ancestorInfo = updatedAncestorInfo(null, validatedTag);\n return {\n namespace: namespace,\n ancestorInfo: ancestorInfo\n };\n }\n}\nfunction getChildHostContext(parentHostContext, type, rootContainerInstance) {\n {\n var parentHostContextDev = parentHostContext;\n var namespace = getChildNamespace(parentHostContextDev.namespace, type);\n var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);\n return {\n namespace: namespace,\n ancestorInfo: ancestorInfo\n };\n }\n}\nfunction getPublicInstance(instance) {\n return instance;\n}\nfunction prepareForCommit(containerInfo) {\n eventsEnabled = isEnabled();\n selectionInformation = getSelectionInformation();\n setEnabled(false);\n}\nfunction resetAfterCommit(containerInfo) {\n restoreSelection(selectionInformation);\n setEnabled(eventsEnabled);\n eventsEnabled = null;\n\n selectionInformation = null;\n}\nfunction createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n var parentNamespace;\n\n {\n // TODO: take namespace into account when validating.\n var hostContextDev = hostContext;\n validateDOMNesting(type, null, hostContextDev.ancestorInfo);\n\n if (typeof props.children === 'string' || typeof props.children === 'number') {\n var string = '' + props.children;\n var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n validateDOMNesting(null, string, ownAncestorInfo);\n }\n\n parentNamespace = hostContextDev.namespace;\n }\n\n var domElement = createElement(type, props, rootContainerInstance, parentNamespace);\n precacheFiberNode(internalInstanceHandle, domElement);\n updateFiberProps(domElement, props);\n return domElement;\n}\nfunction appendInitialChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\nfunction finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {\n setInitialProperties(domElement, type, props, rootContainerInstance);\n return shouldAutoFocusHostComponent(type, props);\n}\nfunction prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {\n {\n var hostContextDev = hostContext;\n\n if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {\n var string = '' + newProps.children;\n var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n validateDOMNesting(null, string, ownAncestorInfo);\n }\n }\n\n return diffProperties(domElement, type, oldProps, newProps, rootContainerInstance);\n}\nfunction shouldSetTextContent(type, props) {\n return type === 'textarea' || type === 'option' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;\n}\nfunction shouldDeprioritizeSubtree(type, props) {\n return !!props.hidden;\n}\nfunction createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {\n {\n var hostContextDev = hostContext;\n validateDOMNesting(null, text, hostContextDev.ancestorInfo);\n }\n\n var textNode = createTextNode(text, rootContainerInstance);\n precacheFiberNode(internalInstanceHandle, textNode);\n return textNode;\n}\n// if a component just imports ReactDOM (e.g. for findDOMNode).\n// Some environments might not have setTimeout or clearTimeout.\n\nvar scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;\nvar cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;\nvar noTimeout = -1; // -------------------\nfunction commitMount(domElement, type, newProps, internalInstanceHandle) {\n // Despite the naming that might imply otherwise, this method only\n // fires if there is an `Update` effect scheduled during mounting.\n // This happens if `finalizeInitialChildren` returns `true` (which it\n // does to implement the `autoFocus` attribute on the client). But\n // there are also other cases when this might happen (such as patching\n // up text content during hydration mismatch). So we'll check this again.\n if (shouldAutoFocusHostComponent(type, newProps)) {\n domElement.focus();\n }\n}\nfunction commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {\n // Update the props handle so that we know which props are the ones with\n // with current event handlers.\n updateFiberProps(domElement, newProps); // Apply the diff to the DOM node.\n\n updateProperties(domElement, updatePayload, type, oldProps, newProps);\n}\nfunction resetTextContent(domElement) {\n setTextContent(domElement, '');\n}\nfunction commitTextUpdate(textInstance, oldText, newText) {\n textInstance.nodeValue = newText;\n}\nfunction appendChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\nfunction appendChildToContainer(container, child) {\n var parentNode;\n\n if (container.nodeType === COMMENT_NODE) {\n parentNode = container.parentNode;\n parentNode.insertBefore(child, container);\n } else {\n parentNode = container;\n parentNode.appendChild(child);\n } // This container might be used for a portal.\n // If something inside a portal is clicked, that click should bubble\n // through the React tree. However, on Mobile Safari the click would\n // never bubble through the *DOM* tree unless an ancestor with onclick\n // event exists. So we wouldn't see it and dispatch it.\n // This is why we ensure that non React root containers have inline onclick\n // defined.\n // https://github.com/facebook/react/issues/11918\n\n\n var reactRootContainer = container._reactRootContainer;\n\n if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(parentNode);\n }\n}\nfunction insertBefore(parentInstance, child, beforeChild) {\n parentInstance.insertBefore(child, beforeChild);\n}\nfunction insertInContainerBefore(container, child, beforeChild) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.insertBefore(child, beforeChild);\n } else {\n container.insertBefore(child, beforeChild);\n }\n}\nfunction removeChild(parentInstance, child) {\n parentInstance.removeChild(child);\n}\nfunction removeChildFromContainer(container, child) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.removeChild(child);\n } else {\n container.removeChild(child);\n }\n}\n\nfunction hideInstance(instance) {\n // pass host context to this method?\n\n\n instance = instance;\n var style = instance.style;\n\n if (typeof style.setProperty === 'function') {\n style.setProperty('display', 'none', 'important');\n } else {\n style.display = 'none';\n }\n}\nfunction hideTextInstance(textInstance) {\n textInstance.nodeValue = '';\n}\nfunction unhideInstance(instance, props) {\n instance = instance;\n var styleProp = props[STYLE$1];\n var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;\n instance.style.display = dangerousStyleValue('display', display);\n}\nfunction unhideTextInstance(textInstance, text) {\n textInstance.nodeValue = text;\n} // -------------------\nfunction canHydrateInstance(instance, type, props) {\n if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {\n return null;\n } // This has now been refined to an element node.\n\n\n return instance;\n}\nfunction canHydrateTextInstance(instance, text) {\n if (text === '' || instance.nodeType !== TEXT_NODE) {\n // Empty strings are not parsed by HTML so there won't be a correct match here.\n return null;\n } // This has now been refined to a text node.\n\n\n return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n return instance.data === SUSPENSE_PENDING_START_DATA;\n}\nfunction isSuspenseInstanceFallback(instance) {\n return instance.data === SUSPENSE_FALLBACK_START_DATA;\n}\n\nfunction getNextHydratable(node) {\n // Skip non-hydratable nodes.\n for (; node != null; node = node.nextSibling) {\n var nodeType = node.nodeType;\n\n if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {\n break;\n }\n }\n\n return node;\n}\n\nfunction getNextHydratableSibling(instance) {\n return getNextHydratable(instance.nextSibling);\n}\nfunction getFirstHydratableChild(parentInstance) {\n return getNextHydratable(parentInstance.firstChild);\n}\nfunction hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events\n // get attached.\n\n updateFiberProps(instance, props);\n var parentNamespace;\n\n {\n var hostContextDev = hostContext;\n parentNamespace = hostContextDev.namespace;\n }\n\n return diffHydratedProperties(instance, type, props, parentNamespace, rootContainerInstance);\n}\nfunction hydrateTextInstance(textInstance, text, internalInstanceHandle) {\n precacheFiberNode(internalInstanceHandle, textInstance);\n return diffHydratedText(textInstance, text);\n}\nfunction getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n while (node) {\n if (node.nodeType === COMMENT_NODE) {\n var data = node.data;\n\n if (data === SUSPENSE_END_DATA) {\n if (depth === 0) {\n return getNextHydratableSibling(node);\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n depth++;\n }\n }\n\n node = node.nextSibling;\n } // TODO: Warn, we didn't find the end comment boundary.\n\n\n return null;\n} // Returns the SuspenseInstance if this node is a direct child of a\n// SuspenseInstance. I.e. if its previous sibling is a Comment with\n// SUSPENSE_x_START_DATA. Otherwise, null.\n\nfunction getParentSuspenseInstance(targetInstance) {\n var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n while (node) {\n if (node.nodeType === COMMENT_NODE) {\n var data = node.data;\n\n if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n if (depth === 0) {\n return node;\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_END_DATA) {\n depth++;\n }\n }\n\n node = node.previousSibling;\n }\n\n return null;\n}\nfunction commitHydratedContainer(container) {\n // Retry if any event replaying was blocked on this.\n retryIfBlockedOn(container);\n}\nfunction commitHydratedSuspenseInstance(suspenseInstance) {\n // Retry if any event replaying was blocked on this.\n retryIfBlockedOn(suspenseInstance);\n}\nfunction didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text) {\n {\n warnForUnmatchedText(textInstance, text);\n }\n}\nfunction didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n warnForUnmatchedText(textInstance, text);\n }\n}\nfunction didNotHydrateContainerInstance(parentContainer, instance) {\n {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentContainer, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentContainer, instance);\n }\n }\n}\nfunction didNotHydrateInstance(parentType, parentProps, parentInstance, instance) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentInstance, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentInstance, instance);\n }\n }\n}\nfunction didNotFindHydratableContainerInstance(parentContainer, type, props) {\n {\n warnForInsertedHydratedElement(parentContainer, type);\n }\n}\nfunction didNotFindHydratableContainerTextInstance(parentContainer, text) {\n {\n warnForInsertedHydratedText(parentContainer, text);\n }\n}\nfunction didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n warnForInsertedHydratedElement(parentInstance, type);\n }\n}\nfunction didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n warnForInsertedHydratedText(parentInstance, text);\n }\n}\nfunction didNotFindHydratableSuspenseInstance(parentType, parentProps, parentInstance) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) ;\n}\n\nvar randomKey = Math.random().toString(36).slice(2);\nvar internalInstanceKey = '__reactInternalInstance$' + randomKey;\nvar internalEventHandlersKey = '__reactEventHandlers$' + randomKey;\nvar internalContainerInstanceKey = '__reactContainere$' + randomKey;\nfunction precacheFiberNode(hostInst, node) {\n node[internalInstanceKey] = hostInst;\n}\nfunction markContainerAsRoot(hostRoot, node) {\n node[internalContainerInstanceKey] = hostRoot;\n}\nfunction unmarkContainerAsRoot(node) {\n node[internalContainerInstanceKey] = null;\n}\nfunction isContainerMarkedAsRoot(node) {\n return !!node[internalContainerInstanceKey];\n} // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.\n// If the target node is part of a hydrated or not yet rendered subtree, then\n// this may also return a SuspenseComponent or HostRoot to indicate that.\n// Conceptually the HostRoot fiber is a child of the Container node. So if you\n// pass the Container node as the targetNode, you will not actually get the\n// HostRoot back. To get to the HostRoot, you need to pass a child of it.\n// The same thing applies to Suspense boundaries.\n\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n\n if (targetInst) {\n // Don't return HostRoot or SuspenseComponent here.\n return targetInst;\n } // If the direct event target isn't a React owned DOM node, we need to look\n // to see if one of its parents is a React owned DOM node.\n\n\n var parentNode = targetNode.parentNode;\n\n while (parentNode) {\n // We'll check if this is a container root that could include\n // React nodes in the future. We need to check this first because\n // if we're a child of a dehydrated container, we need to first\n // find that inner container before moving on to finding the parent\n // instance. Note that we don't check this field on the targetNode\n // itself because the fibers are conceptually between the container\n // node and the first child. It isn't surrounding the container node.\n // If it's not a container, we check if it's an instance.\n targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];\n\n if (targetInst) {\n // Since this wasn't the direct target of the event, we might have\n // stepped past dehydrated DOM nodes to get here. However they could\n // also have been non-React nodes. We need to answer which one.\n // If we the instance doesn't have any children, then there can't be\n // a nested suspense boundary within it. So we can use this as a fast\n // bailout. Most of the time, when people add non-React children to\n // the tree, it is using a ref to a child-less DOM node.\n // Normally we'd only need to check one of the fibers because if it\n // has ever gone from having children to deleting them or vice versa\n // it would have deleted the dehydrated boundary nested inside already.\n // However, since the HostRoot starts out with an alternate it might\n // have one on the alternate so we need to check in case this was a\n // root.\n var alternate = targetInst.alternate;\n\n if (targetInst.child !== null || alternate !== null && alternate.child !== null) {\n // Next we need to figure out if the node that skipped past is\n // nested within a dehydrated boundary and if so, which one.\n var suspenseInstance = getParentSuspenseInstance(targetNode);\n\n while (suspenseInstance !== null) {\n // We found a suspense instance. That means that we haven't\n // hydrated it yet. Even though we leave the comments in the\n // DOM after hydrating, and there are boundaries in the DOM\n // that could already be hydrated, we wouldn't have found them\n // through this pass since if the target is hydrated it would\n // have had an internalInstanceKey on it.\n // Let's get the fiber associated with the SuspenseComponent\n // as the deepest instance.\n var targetSuspenseInst = suspenseInstance[internalInstanceKey];\n\n if (targetSuspenseInst) {\n return targetSuspenseInst;\n } // If we don't find a Fiber on the comment, it might be because\n // we haven't gotten to hydrate it yet. There might still be a\n // parent boundary that hasn't above this one so we need to find\n // the outer most that is known.\n\n\n suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent\n // host component also hasn't hydrated yet. We can return it\n // below since it will bail out on the isMounted check later.\n }\n }\n\n return targetInst;\n }\n\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n\n return null;\n}\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\n\nfunction getInstanceFromNode$1(node) {\n var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];\n\n if (inst) {\n if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) {\n return inst;\n } else {\n return null;\n }\n }\n\n return null;\n}\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\n\nfunction getNodeFromInstance$1(inst) {\n if (inst.tag === HostComponent || inst.tag === HostText) {\n // In Fiber this, is just the state node right now. We assume it will be\n // a host component or host text.\n return inst.stateNode;\n } // Without this first invariant, passing a non-DOM-component triggers the next\n // invariant for a missing parent, which is super confusing.\n\n\n {\n {\n throw Error( \"getNodeFromInstance: Invalid argument.\" );\n }\n }\n}\nfunction getFiberCurrentPropsFromNode$1(node) {\n return node[internalEventHandlersKey] || null;\n}\nfunction updateFiberProps(node, props) {\n node[internalEventHandlersKey] = props;\n}\n\nfunction getParent(inst) {\n do {\n inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.\n // That is depending on if we want nested subtrees (layers) to bubble\n // events to their parent. We could also go through parentNode on the\n // host node but that wouldn't work for React Native and doesn't let us\n // do the portal feature.\n } while (inst && inst.tag !== HostComponent);\n\n if (inst) {\n return inst;\n }\n\n return null;\n}\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\n\n\nfunction getLowestCommonAncestor(instA, instB) {\n var depthA = 0;\n\n for (var tempA = instA; tempA; tempA = getParent(tempA)) {\n depthA++;\n }\n\n var depthB = 0;\n\n for (var tempB = instB; tempB; tempB = getParent(tempB)) {\n depthB++;\n } // If A is deeper, crawl up.\n\n\n while (depthA - depthB > 0) {\n instA = getParent(instA);\n depthA--;\n } // If B is deeper, crawl up.\n\n\n while (depthB - depthA > 0) {\n instB = getParent(instB);\n depthB--;\n } // Walk in lockstep until we find a match.\n\n\n var depth = depthA;\n\n while (depth--) {\n if (instA === instB || instA === instB.alternate) {\n return instA;\n }\n\n instA = getParent(instA);\n instB = getParent(instB);\n }\n\n return null;\n}\n/**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n */\n\nfunction traverseTwoPhase(inst, fn, arg) {\n var path = [];\n\n while (inst) {\n path.push(inst);\n inst = getParent(inst);\n }\n\n var i;\n\n for (i = path.length; i-- > 0;) {\n fn(path[i], 'captured', arg);\n }\n\n for (i = 0; i < path.length; i++) {\n fn(path[i], 'bubbled', arg);\n }\n}\n/**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * Does not invoke the callback on the nearest common ancestor because nothing\n * \"entered\" or \"left\" that element.\n */\n\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\n var common = from && to ? getLowestCommonAncestor(from, to) : null;\n var pathFrom = [];\n\n while (true) {\n if (!from) {\n break;\n }\n\n if (from === common) {\n break;\n }\n\n var alternate = from.alternate;\n\n if (alternate !== null && alternate === common) {\n break;\n }\n\n pathFrom.push(from);\n from = getParent(from);\n }\n\n var pathTo = [];\n\n while (true) {\n if (!to) {\n break;\n }\n\n if (to === common) {\n break;\n }\n\n var _alternate = to.alternate;\n\n if (_alternate !== null && _alternate === common) {\n break;\n }\n\n pathTo.push(to);\n to = getParent(to);\n }\n\n for (var i = 0; i < pathFrom.length; i++) {\n fn(pathFrom[i], 'bubbled', argFrom);\n }\n\n for (var _i = pathTo.length; _i-- > 0;) {\n fn(pathTo[_i], 'captured', argTo);\n }\n}\n\nfunction isInteractive(tag) {\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n switch (name) {\n case 'onClick':\n case 'onClickCapture':\n case 'onDoubleClick':\n case 'onDoubleClickCapture':\n case 'onMouseDown':\n case 'onMouseDownCapture':\n case 'onMouseMove':\n case 'onMouseMoveCapture':\n case 'onMouseUp':\n case 'onMouseUpCapture':\n case 'onMouseEnter':\n return !!(props.disabled && isInteractive(type));\n\n default:\n return false;\n }\n}\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n\n\nfunction getListener(inst, registrationName) {\n var listener; // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not\n // live here; needs to be moved to a better place soon\n\n var stateNode = inst.stateNode;\n\n if (!stateNode) {\n // Work in progress (ex: onload events in incremental mode).\n return null;\n }\n\n var props = getFiberCurrentPropsFromNode(stateNode);\n\n if (!props) {\n // Work in progress.\n return null;\n }\n\n listener = props[registrationName];\n\n if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n return null;\n }\n\n if (!(!listener || typeof listener === 'function')) {\n {\n throw Error( \"Expected `\" + registrationName + \"` listener to be a function, instead got a value of `\" + typeof listener + \"` type.\" );\n }\n }\n\n return listener;\n}\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n return getListener(inst, registrationName);\n}\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing even a\n * single one.\n */\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\n\n\nfunction accumulateDirectionalDispatches(inst, phase, event) {\n {\n if (!inst) {\n error('Dispatching inst must not be null');\n }\n }\n\n var listener = listenerAtPhase(inst, event, phase);\n\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n}\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory. We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\n\n\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n }\n}\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\n\n\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n if (inst && event && event.dispatchConfig.registrationName) {\n var registrationName = event.dispatchConfig.registrationName;\n var listener = getListener(inst, registrationName);\n\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n }\n}\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\n\n\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n accumulateDispatches(event._targetInst, null, event);\n }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\nfunction accumulateDirectDispatches(events) {\n forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\nvar root = null;\nvar startText = null;\nvar fallbackText = null;\nfunction initialize(nativeEventTarget) {\n root = nativeEventTarget;\n startText = getText();\n return true;\n}\nfunction reset() {\n root = null;\n startText = null;\n fallbackText = null;\n}\nfunction getData() {\n if (fallbackText) {\n return fallbackText;\n }\n\n var start;\n var startValue = startText;\n var startLength = startValue.length;\n var end;\n var endValue = getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n fallbackText = endValue.slice(start, sliceTail);\n return fallbackText;\n}\nfunction getText() {\n if ('value' in root) {\n return root.value;\n }\n\n return root.textContent;\n}\n\nvar EVENT_POOL_SIZE = 10;\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar EventInterface = {\n type: null,\n target: null,\n // currentTarget is set when dispatching; no use in copying it here\n currentTarget: function () {\n return null;\n },\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\nfunction functionThatReturnsTrue() {\n return true;\n}\n\nfunction functionThatReturnsFalse() {\n return false;\n}\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\n\n\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n {\n // these have a getter/setter for warnings\n delete this.nativeEvent;\n delete this.preventDefault;\n delete this.stopPropagation;\n delete this.isDefaultPrevented;\n delete this.isPropagationStopped;\n }\n\n this.dispatchConfig = dispatchConfig;\n this._targetInst = targetInst;\n this.nativeEvent = nativeEvent;\n var Interface = this.constructor.Interface;\n\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n\n {\n delete this[propName]; // this has a getter/setter for warnings\n }\n\n var normalize = Interface[propName];\n\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n if (propName === 'target') {\n this.target = nativeEventTarget;\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n\n if (defaultPrevented) {\n this.isDefaultPrevented = functionThatReturnsTrue;\n } else {\n this.isDefaultPrevented = functionThatReturnsFalse;\n }\n\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault();\n } else if (typeof event.returnValue !== 'unknown') {\n event.returnValue = false;\n }\n\n this.isDefaultPrevented = functionThatReturnsTrue;\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (typeof event.cancelBubble !== 'unknown') {\n // The ChangeEventPlugin registers a \"propertychange\" event for\n // IE. This event does not support bubbling or cancelling, and\n // any references to cancelBubble throw \"Member not found\". A\n // typeof check of \"unknown\" circumvents this issue (and is also\n // IE specific).\n event.cancelBubble = true;\n }\n\n this.isPropagationStopped = functionThatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {\n this.isPersistent = functionThatReturnsTrue;\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: functionThatReturnsFalse,\n\n /**\n * `PooledClass` looks for `destructor` on each instance it releases.\n */\n destructor: function () {\n var Interface = this.constructor.Interface;\n\n for (var propName in Interface) {\n {\n Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n }\n }\n\n this.dispatchConfig = null;\n this._targetInst = null;\n this.nativeEvent = null;\n this.isDefaultPrevented = functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n this._dispatchListeners = null;\n this._dispatchInstances = null;\n\n {\n Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n Object.defineProperty(this, 'isDefaultPrevented', getPooledWarningPropertyDefinition('isDefaultPrevented', functionThatReturnsFalse));\n Object.defineProperty(this, 'isPropagationStopped', getPooledWarningPropertyDefinition('isPropagationStopped', functionThatReturnsFalse));\n Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', function () {}));\n Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', function () {}));\n }\n }\n});\n\nSyntheticEvent.Interface = EventInterface;\n/**\n * Helper to reduce boilerplate when creating subclasses.\n */\n\nSyntheticEvent.extend = function (Interface) {\n var Super = this;\n\n var E = function () {};\n\n E.prototype = Super.prototype;\n var prototype = new E();\n\n function Class() {\n return Super.apply(this, arguments);\n }\n\n _assign(prototype, Class.prototype);\n\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n Class.Interface = _assign({}, Super.Interface, Interface);\n Class.extend = Super.extend;\n addEventPoolingTo(Class);\n return Class;\n};\n\naddEventPoolingTo(SyntheticEvent);\n/**\n * Helper to nullify syntheticEvent instance properties when destructing\n *\n * @param {String} propName\n * @param {?object} getVal\n * @return {object} defineProperty object\n */\n\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n var isFunction = typeof getVal === 'function';\n return {\n configurable: true,\n set: set,\n get: get\n };\n\n function set(val) {\n var action = isFunction ? 'setting the method' : 'setting the property';\n warn(action, 'This is effectively a no-op');\n return val;\n }\n\n function get() {\n var action = isFunction ? 'accessing the method' : 'accessing the property';\n var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n warn(action, result);\n return getVal;\n }\n\n function warn(action, result) {\n {\n error(\"This synthetic event is reused for performance reasons. If you're seeing this, \" + \"you're %s `%s` on a released/nullified synthetic event. %s. \" + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result);\n }\n }\n}\n\nfunction getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeInst) {\n var EventConstructor = this;\n\n if (EventConstructor.eventPool.length) {\n var instance = EventConstructor.eventPool.pop();\n EventConstructor.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);\n return instance;\n }\n\n return new EventConstructor(dispatchConfig, targetInst, nativeEvent, nativeInst);\n}\n\nfunction releasePooledEvent(event) {\n var EventConstructor = this;\n\n if (!(event instanceof EventConstructor)) {\n {\n throw Error( \"Trying to release an event instance into a pool of a different type.\" );\n }\n }\n\n event.destructor();\n\n if (EventConstructor.eventPool.length < EVENT_POOL_SIZE) {\n EventConstructor.eventPool.push(event);\n }\n}\n\nfunction addEventPoolingTo(EventConstructor) {\n EventConstructor.eventPool = [];\n EventConstructor.getPooled = getPooledEvent;\n EventConstructor.release = releasePooledEvent;\n}\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\n\nvar SyntheticCompositionEvent = SyntheticEvent.extend({\n data: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\n\nvar SyntheticInputEvent = SyntheticEvent.extend({\n data: null\n});\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\n\nvar START_KEYCODE = 229;\nvar canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;\nvar documentMode = null;\n\nif (canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n} // Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\n\n\nvar canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\n\nvar useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE); // Events and their corresponding property names.\n\nvar eventTypes = {\n beforeInput: {\n phasedRegistrationNames: {\n bubbled: 'onBeforeInput',\n captured: 'onBeforeInputCapture'\n },\n dependencies: [TOP_COMPOSITION_END, TOP_KEY_PRESS, TOP_TEXT_INPUT, TOP_PASTE]\n },\n compositionEnd: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionEnd',\n captured: 'onCompositionEndCapture'\n },\n dependencies: [TOP_BLUR, TOP_COMPOSITION_END, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n },\n compositionStart: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionStart',\n captured: 'onCompositionStartCapture'\n },\n dependencies: [TOP_BLUR, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n },\n compositionUpdate: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionUpdate',\n captured: 'onCompositionUpdateCapture'\n },\n dependencies: [TOP_BLUR, TOP_COMPOSITION_UPDATE, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n }\n}; // Track whether we've ever handled a keypress on the space key.\n\nvar hasSpaceKeypress = false;\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\n\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\n\n\nfunction getCompositionEventType(topLevelType) {\n switch (topLevelType) {\n case TOP_COMPOSITION_START:\n return eventTypes.compositionStart;\n\n case TOP_COMPOSITION_END:\n return eventTypes.compositionEnd;\n\n case TOP_COMPOSITION_UPDATE:\n return eventTypes.compositionUpdate;\n }\n}\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n return topLevelType === TOP_KEY_DOWN && nativeEvent.keyCode === START_KEYCODE;\n}\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case TOP_KEY_UP:\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n\n case TOP_KEY_DOWN:\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n\n case TOP_KEY_PRESS:\n case TOP_MOUSE_DOWN:\n case TOP_BLUR:\n // Events are not possible without cancelling IME.\n return true;\n\n default:\n return false;\n }\n}\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\n\n\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n\n return null;\n}\n/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isUsingKoreanIME(nativeEvent) {\n return nativeEvent.locale === 'ko';\n} // Track the current IME composition status, if any.\n\n\nvar isComposing = false;\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\n\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var eventType;\n var fallbackData;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(topLevelType);\n } else if (!isComposing) {\n if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionStart;\n }\n } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionEnd;\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!isComposing && eventType === eventTypes.compositionStart) {\n isComposing = initialize(nativeEventTarget);\n } else if (eventType === eventTypes.compositionEnd) {\n if (isComposing) {\n fallbackData = getData();\n }\n }\n }\n\n var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n\n if (customData !== null) {\n event.data = customData;\n }\n }\n\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n/**\n * @param {TopLevelType} topLevelType Number from `TopLevelType`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\n\n\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case TOP_COMPOSITION_END:\n return getDataFromCustomEvent(nativeEvent);\n\n case TOP_KEY_PRESS:\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case TOP_TEXT_INPUT:\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to ignore it.\n\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {number} topLevelType Number from `TopLevelEventTypes`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\n\n\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n // If composition event is available, we extract a string only at\n // compositionevent, otherwise extract it at fallback events.\n if (isComposing) {\n if (topLevelType === TOP_COMPOSITION_END || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n var chars = getData();\n reset();\n isComposing = false;\n return chars;\n }\n\n return null;\n }\n\n switch (topLevelType) {\n case TOP_PASTE:\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n\n case TOP_KEY_PRESS:\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (!isKeypressCommand(nativeEvent)) {\n // IE fires the `keypress` event when a user types an emoji via\n // Touch keyboard of Windows. In such a case, the `char` property\n // holds an emoji character like `\\uD83D\\uDE0A`. Because its length\n // is 2, the property `which` does not represent an emoji correctly.\n // In such a case, we directly return the `char` property instead of\n // using `which`.\n if (nativeEvent.char && nativeEvent.char.length > 1) {\n return nativeEvent.char;\n } else if (nativeEvent.which) {\n return String.fromCharCode(nativeEvent.which);\n }\n }\n\n return null;\n\n case TOP_COMPOSITION_END:\n return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;\n\n default:\n return null;\n }\n}\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\n\n\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var chars;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n } // If no characters are being inserted, no BeforeInput event should\n // be fired.\n\n\n if (!chars) {\n return null;\n }\n\n var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n event.data = chars;\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\n\n\nvar BeforeInputEventPlugin = {\n eventTypes: eventTypes,\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var composition = extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n var beforeInput = extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n\n if (composition === null) {\n return beforeInput;\n }\n\n if (beforeInput === null) {\n return composition;\n }\n\n return [composition, beforeInput];\n }\n};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n color: true,\n date: true,\n datetime: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n if (nodeName === 'input') {\n return !!supportedInputTypes[elem.type];\n }\n\n if (nodeName === 'textarea') {\n return true;\n }\n\n return false;\n}\n\nvar eventTypes$1 = {\n change: {\n phasedRegistrationNames: {\n bubbled: 'onChange',\n captured: 'onChangeCapture'\n },\n dependencies: [TOP_BLUR, TOP_CHANGE, TOP_CLICK, TOP_FOCUS, TOP_INPUT, TOP_KEY_DOWN, TOP_KEY_UP, TOP_SELECTION_CHANGE]\n }\n};\n\nfunction createAndAccumulateChangeEvent(inst, nativeEvent, target) {\n var event = SyntheticEvent.getPooled(eventTypes$1.change, inst, nativeEvent, target);\n event.type = 'change'; // Flag this event loop as needing state restore.\n\n enqueueStateRestore(target);\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n/**\n * For IE shims\n */\n\n\nvar activeElement = null;\nvar activeElementInst = null;\n/**\n * SECTION: handle `change` event\n */\n\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var event = createAndAccumulateChangeEvent(activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n\n batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n runEventsInBatch(event);\n}\n\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance$1(targetInst);\n\n if (updateValueIfChanged(targetNode)) {\n return targetInst;\n }\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n if (topLevelType === TOP_CHANGE) {\n return targetInst;\n }\n}\n/**\n * SECTION: handle `input` event\n */\n\n\nvar isInputEventSupported = false;\n\nif (canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events.\n isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);\n}\n/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\n\n\nfunction startWatchingForValueChange(target, targetInst) {\n activeElement = target;\n activeElementInst = targetInst;\n activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\n\n\nfunction stopWatchingForValueChange() {\n if (!activeElement) {\n return;\n }\n\n activeElement.detachEvent('onpropertychange', handlePropertyChange);\n activeElement = null;\n activeElementInst = null;\n}\n/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\n\n\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n\n if (getInstIfValueChanged(activeElementInst)) {\n manualDispatchChangeEvent(nativeEvent);\n }\n}\n\nfunction handleEventsForInputEventPolyfill(topLevelType, target, targetInst) {\n if (topLevelType === TOP_FOCUS) {\n // In IE9, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(target, targetInst);\n } else if (topLevelType === TOP_BLUR) {\n stopWatchingForValueChange();\n }\n} // For IE8 and IE9.\n\n\nfunction getTargetInstForInputEventPolyfill(topLevelType, targetInst) {\n if (topLevelType === TOP_SELECTION_CHANGE || topLevelType === TOP_KEY_UP || topLevelType === TOP_KEY_DOWN) {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n return getInstIfValueChanged(activeElementInst);\n }\n}\n/**\n * SECTION: handle `click` event\n */\n\n\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n if (topLevelType === TOP_CLICK) {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction getTargetInstForInputOrChangeEvent(topLevelType, targetInst) {\n if (topLevelType === TOP_INPUT || topLevelType === TOP_CHANGE) {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction handleControlledInputBlur(node) {\n var state = node._wrapperState;\n\n if (!state || !state.controlled || node.type !== 'number') {\n return;\n }\n\n {\n // If controlled, assign the value attribute to the current value on blur\n setDefaultValue(node, 'number', node.value);\n }\n}\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\n\n\nvar ChangeEventPlugin = {\n eventTypes: eventTypes$1,\n _isInputEventSupported: isInputEventSupported,\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n var getTargetInstFunc, handleEventFunc;\n\n if (shouldUseChangeEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForChangeEvent;\n } else if (isTextInputElement(targetNode)) {\n if (isInputEventSupported) {\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n } else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n handleEventFunc = handleEventsForInputEventPolyfill;\n }\n } else if (shouldUseClickEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForClickEvent;\n }\n\n if (getTargetInstFunc) {\n var inst = getTargetInstFunc(topLevelType, targetInst);\n\n if (inst) {\n var event = createAndAccumulateChangeEvent(inst, nativeEvent, nativeEventTarget);\n return event;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(topLevelType, targetNode, targetInst);\n } // When blurring, set the value attribute for number inputs\n\n\n if (topLevelType === TOP_BLUR) {\n handleControlledInputBlur(targetNode);\n }\n }\n};\n\nvar SyntheticUIEvent = SyntheticEvent.extend({\n view: null,\n detail: null\n});\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\nvar modifierKeyToProp = {\n Alt: 'altKey',\n Control: 'ctrlKey',\n Meta: 'metaKey',\n Shift: 'shiftKey'\n}; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support\n// getModifierState. If getModifierState is not supported, we map it to a set of\n// modifier keys exposed by the event. In this case, Lock-keys are not supported.\n\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n\nvar previousScreenX = 0;\nvar previousScreenY = 0; // Use flags to signal movementX/Y has already been set\n\nvar isMovementXSet = false;\nvar isMovementYSet = false;\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticMouseEvent = SyntheticUIEvent.extend({\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n pageX: null,\n pageY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: getEventModifierState,\n button: null,\n buttons: null,\n relatedTarget: function (event) {\n return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n },\n movementX: function (event) {\n if ('movementX' in event) {\n return event.movementX;\n }\n\n var screenX = previousScreenX;\n previousScreenX = event.screenX;\n\n if (!isMovementXSet) {\n isMovementXSet = true;\n return 0;\n }\n\n return event.type === 'mousemove' ? event.screenX - screenX : 0;\n },\n movementY: function (event) {\n if ('movementY' in event) {\n return event.movementY;\n }\n\n var screenY = previousScreenY;\n previousScreenY = event.screenY;\n\n if (!isMovementYSet) {\n isMovementYSet = true;\n return 0;\n }\n\n return event.type === 'mousemove' ? event.screenY - screenY : 0;\n }\n});\n\n/**\n * @interface PointerEvent\n * @see http://www.w3.org/TR/pointerevents/\n */\n\nvar SyntheticPointerEvent = SyntheticMouseEvent.extend({\n pointerId: null,\n width: null,\n height: null,\n pressure: null,\n tangentialPressure: null,\n tiltX: null,\n tiltY: null,\n twist: null,\n pointerType: null,\n isPrimary: null\n});\n\nvar eventTypes$2 = {\n mouseEnter: {\n registrationName: 'onMouseEnter',\n dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n },\n mouseLeave: {\n registrationName: 'onMouseLeave',\n dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n },\n pointerEnter: {\n registrationName: 'onPointerEnter',\n dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n },\n pointerLeave: {\n registrationName: 'onPointerLeave',\n dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n }\n};\nvar EnterLeaveEventPlugin = {\n eventTypes: eventTypes$2,\n\n /**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var isOverEvent = topLevelType === TOP_MOUSE_OVER || topLevelType === TOP_POINTER_OVER;\n var isOutEvent = topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_POINTER_OUT;\n\n if (isOverEvent && (eventSystemFlags & IS_REPLAYED) === 0 && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n // If this is an over event with a target, then we've already dispatched\n // the event in the out event of the other target. If this is replayed,\n // then it's because we couldn't dispatch against this target previously\n // so we have to do it now instead.\n return null;\n }\n\n if (!isOutEvent && !isOverEvent) {\n // Must not be a mouse or pointer in or out - ignoring.\n return null;\n }\n\n var win;\n\n if (nativeEventTarget.window === nativeEventTarget) {\n // `nativeEventTarget` is probably a window object.\n win = nativeEventTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = nativeEventTarget.ownerDocument;\n\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from;\n var to;\n\n if (isOutEvent) {\n from = targetInst;\n var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n to = related ? getClosestInstanceFromNode(related) : null;\n\n if (to !== null) {\n var nearestMounted = getNearestMountedFiber(to);\n\n if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) {\n to = null;\n }\n }\n } else {\n // Moving to a node from outside the window.\n from = null;\n to = targetInst;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return null;\n }\n\n var eventInterface, leaveEventType, enterEventType, eventTypePrefix;\n\n if (topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_MOUSE_OVER) {\n eventInterface = SyntheticMouseEvent;\n leaveEventType = eventTypes$2.mouseLeave;\n enterEventType = eventTypes$2.mouseEnter;\n eventTypePrefix = 'mouse';\n } else if (topLevelType === TOP_POINTER_OUT || topLevelType === TOP_POINTER_OVER) {\n eventInterface = SyntheticPointerEvent;\n leaveEventType = eventTypes$2.pointerLeave;\n enterEventType = eventTypes$2.pointerEnter;\n eventTypePrefix = 'pointer';\n }\n\n var fromNode = from == null ? win : getNodeFromInstance$1(from);\n var toNode = to == null ? win : getNodeFromInstance$1(to);\n var leave = eventInterface.getPooled(leaveEventType, from, nativeEvent, nativeEventTarget);\n leave.type = eventTypePrefix + 'leave';\n leave.target = fromNode;\n leave.relatedTarget = toNode;\n var enter = eventInterface.getPooled(enterEventType, to, nativeEvent, nativeEventTarget);\n enter.type = eventTypePrefix + 'enter';\n enter.target = toNode;\n enter.relatedTarget = fromNode;\n accumulateEnterLeaveDispatches(leave, enter, from, to); // If we are not processing the first ancestor, then we\n // should not process the same nativeEvent again, as we\n // will have already processed it in the first ancestor.\n\n if ((eventSystemFlags & IS_FIRST_ANCESTOR) === 0) {\n return [leave];\n }\n\n return [leave, enter];\n }\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\n\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n } // Test for A's keys different from B.\n\n\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty$2.call(objB, keysA[i]) || !objectIs(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nvar skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;\nvar eventTypes$3 = {\n select: {\n phasedRegistrationNames: {\n bubbled: 'onSelect',\n captured: 'onSelectCapture'\n },\n dependencies: [TOP_BLUR, TOP_CONTEXT_MENU, TOP_DRAG_END, TOP_FOCUS, TOP_KEY_DOWN, TOP_KEY_UP, TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_SELECTION_CHANGE]\n }\n};\nvar activeElement$1 = null;\nvar activeElementInst$1 = null;\nvar lastSelection = null;\nvar mouseDown = false;\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\n\nfunction getSelection$1(node) {\n if ('selectionStart' in node && hasSelectionCapabilities(node)) {\n return {\n start: node.selectionStart,\n end: node.selectionEnd\n };\n } else {\n var win = node.ownerDocument && node.ownerDocument.defaultView || window;\n var selection = win.getSelection();\n return {\n anchorNode: selection.anchorNode,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode,\n focusOffset: selection.focusOffset\n };\n }\n}\n/**\n * Get document associated with the event target.\n *\n * @param {object} nativeEventTarget\n * @return {Document}\n */\n\n\nfunction getEventTargetDocument(eventTarget) {\n return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;\n}\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @param {object} nativeEventTarget\n * @return {?SyntheticEvent}\n */\n\n\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n // Ensure we have the right element, and that the user is not dragging a\n // selection (this matches native `select` event behavior). In HTML5, select\n // fires only on input and textarea thus if there's no focused element we\n // won't dispatch.\n var doc = getEventTargetDocument(nativeEventTarget);\n\n if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {\n return null;\n } // Only fire when selection has actually changed.\n\n\n var currentSelection = getSelection$1(activeElement$1);\n\n if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n lastSelection = currentSelection;\n var syntheticEvent = SyntheticEvent.getPooled(eventTypes$3.select, activeElementInst$1, nativeEvent, nativeEventTarget);\n syntheticEvent.type = 'select';\n syntheticEvent.target = activeElement$1;\n accumulateTwoPhaseDispatches(syntheticEvent);\n return syntheticEvent;\n }\n\n return null;\n}\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\n\n\nvar SelectEventPlugin = {\n eventTypes: eventTypes$3,\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, container) {\n var containerOrDoc = container || getEventTargetDocument(nativeEventTarget); // Track whether all listeners exists for this plugin. If none exist, we do\n // not extract events. See #3639.\n\n if (!containerOrDoc || !isListeningToAllDependencies('onSelect', containerOrDoc)) {\n return null;\n }\n\n var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n\n switch (topLevelType) {\n // Track the input node that has focus.\n case TOP_FOCUS:\n if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n activeElement$1 = targetNode;\n activeElementInst$1 = targetInst;\n lastSelection = null;\n }\n\n break;\n\n case TOP_BLUR:\n activeElement$1 = null;\n activeElementInst$1 = null;\n lastSelection = null;\n break;\n // Don't fire the event while the user is dragging. This matches the\n // semantics of the native select event.\n\n case TOP_MOUSE_DOWN:\n mouseDown = true;\n break;\n\n case TOP_CONTEXT_MENU:\n case TOP_MOUSE_UP:\n case TOP_DRAG_END:\n mouseDown = false;\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n // Chrome and IE fire non-standard event when selection is changed (and\n // sometimes when it hasn't). IE's event fires out of order with respect\n // to key and input events on deletion, so we discard it.\n //\n // Firefox doesn't support selectionchange, so check selection status\n // after each key entry. The selection changes after keydown and before\n // keyup, but we check on keydown as well in the case of holding down a\n // key, when multiple keydown events are fired but only one keyup is.\n // This is also our approach for IE handling, for the reason above.\n\n case TOP_SELECTION_CHANGE:\n if (skipSelectionChangeEvent) {\n break;\n }\n\n // falls through\n\n case TOP_KEY_DOWN:\n case TOP_KEY_UP:\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n }\n\n return null;\n }\n};\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\n\nvar SyntheticAnimationEvent = SyntheticEvent.extend({\n animationName: null,\n elapsedTime: null,\n pseudoElement: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\n\nvar SyntheticClipboardEvent = SyntheticEvent.extend({\n clipboardData: function (event) {\n return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n }\n});\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticFocusEvent = SyntheticUIEvent.extend({\n relatedTarget: null\n});\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n var charCode;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)\n // report Enter as charCode 10 when ctrl is pressed.\n\n\n if (charCode === 10) {\n charCode = 13;\n } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n\n\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar normalizeKey = {\n Esc: 'Escape',\n Spacebar: ' ',\n Left: 'ArrowLeft',\n Up: 'ArrowUp',\n Right: 'ArrowRight',\n Down: 'ArrowDown',\n Del: 'Delete',\n Win: 'OS',\n Menu: 'ContextMenu',\n Apps: 'ContextMenu',\n Scroll: 'ScrollLock',\n MozPrintableKey: 'Unidentified'\n};\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar translateToKey = {\n '8': 'Backspace',\n '9': 'Tab',\n '12': 'Clear',\n '13': 'Enter',\n '16': 'Shift',\n '17': 'Control',\n '18': 'Alt',\n '19': 'Pause',\n '20': 'CapsLock',\n '27': 'Escape',\n '32': ' ',\n '33': 'PageUp',\n '34': 'PageDown',\n '35': 'End',\n '36': 'Home',\n '37': 'ArrowLeft',\n '38': 'ArrowUp',\n '39': 'ArrowRight',\n '40': 'ArrowDown',\n '45': 'Insert',\n '46': 'Delete',\n '112': 'F1',\n '113': 'F2',\n '114': 'F3',\n '115': 'F4',\n '116': 'F5',\n '117': 'F6',\n '118': 'F7',\n '119': 'F8',\n '120': 'F9',\n '121': 'F10',\n '122': 'F11',\n '123': 'F12',\n '144': 'NumLock',\n '145': 'ScrollLock',\n '224': 'Meta'\n};\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\n\nfunction getEventKey(nativeEvent) {\n if (nativeEvent.key) {\n // Normalize inconsistent values reported by browsers due to\n // implementations of a working draft specification.\n // FireFox implements `key` but returns `MozPrintableKey` for all\n // printable characters (normalized to `Unidentified`), ignore it.\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n\n if (key !== 'Unidentified') {\n return key;\n }\n } // Browser does not implement `key`, polyfill as much of it as we can.\n\n\n if (nativeEvent.type === 'keypress') {\n var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can\n // thus be captured by `keypress`, no other non-printable key should.\n\n return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n }\n\n if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n // While user keyboard layout determines the actual meaning of each\n // `keyCode` value, almost all function keys have a universal value.\n return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n }\n\n return '';\n}\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticKeyboardEvent = SyntheticUIEvent.extend({\n key: getEventKey,\n location: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n repeat: null,\n locale: null,\n getModifierState: getEventModifierState,\n // Legacy Interface\n charCode: function (event) {\n // `charCode` is the result of a KeyPress event and represents the value of\n // the actual printable character.\n // KeyPress is deprecated, but its replacement is not yet final and not\n // implemented in any major browser. Only KeyPress has charCode.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n\n return 0;\n },\n keyCode: function (event) {\n // `keyCode` is the result of a KeyDown/Up event and represents the value of\n // physical keyboard key.\n // The actual meaning of the value depends on the users' keyboard layout\n // which cannot be detected. Assuming that it is a US keyboard layout\n // provides a surprisingly accurate mapping for US and European users.\n // Due to this, it is left to the user to implement at this time.\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n\n return 0;\n },\n which: function (event) {\n // `which` is an alias for either `keyCode` or `charCode` depending on the\n // type of the event.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n\n return 0;\n }\n});\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticDragEvent = SyntheticMouseEvent.extend({\n dataTransfer: null\n});\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\n\nvar SyntheticTouchEvent = SyntheticUIEvent.extend({\n touches: null,\n targetTouches: null,\n changedTouches: null,\n altKey: null,\n metaKey: null,\n ctrlKey: null,\n shiftKey: null,\n getModifierState: getEventModifierState\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\n\nvar SyntheticTransitionEvent = SyntheticEvent.extend({\n propertyName: null,\n elapsedTime: null,\n pseudoElement: null\n});\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticWheelEvent = SyntheticMouseEvent.extend({\n deltaX: function (event) {\n return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n },\n deltaY: function (event) {\n return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n 'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n 'wheelDelta' in event ? -event.wheelDelta : 0;\n },\n deltaZ: null,\n // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n deltaMode: null\n});\n\nvar knownHTMLTopLevelTypes = [TOP_ABORT, TOP_CANCEL, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_CLOSE, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_INPUT, TOP_INVALID, TOP_LOAD, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_RESET, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUBMIT, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_TOGGLE, TOP_VOLUME_CHANGE, TOP_WAITING];\nvar SimpleEventPlugin = {\n // simpleEventPluginEventTypes gets populated from\n // the DOMEventProperties module.\n eventTypes: simpleEventPluginEventTypes,\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var dispatchConfig = topLevelEventsToDispatchConfig.get(topLevelType);\n\n if (!dispatchConfig) {\n return null;\n }\n\n var EventConstructor;\n\n switch (topLevelType) {\n case TOP_KEY_PRESS:\n // Firefox creates a keypress event for function keys too. This removes\n // the unwanted keypress events. Enter is however both printable and\n // non-printable. One would expect Tab to be as well (but it isn't).\n if (getEventCharCode(nativeEvent) === 0) {\n return null;\n }\n\n /* falls through */\n\n case TOP_KEY_DOWN:\n case TOP_KEY_UP:\n EventConstructor = SyntheticKeyboardEvent;\n break;\n\n case TOP_BLUR:\n case TOP_FOCUS:\n EventConstructor = SyntheticFocusEvent;\n break;\n\n case TOP_CLICK:\n // Firefox creates a click event on right mouse clicks. This removes the\n // unwanted click events.\n if (nativeEvent.button === 2) {\n return null;\n }\n\n /* falls through */\n\n case TOP_AUX_CLICK:\n case TOP_DOUBLE_CLICK:\n case TOP_MOUSE_DOWN:\n case TOP_MOUSE_MOVE:\n case TOP_MOUSE_UP: // TODO: Disabled elements should not respond to mouse events\n\n /* falls through */\n\n case TOP_MOUSE_OUT:\n case TOP_MOUSE_OVER:\n case TOP_CONTEXT_MENU:\n EventConstructor = SyntheticMouseEvent;\n break;\n\n case TOP_DRAG:\n case TOP_DRAG_END:\n case TOP_DRAG_ENTER:\n case TOP_DRAG_EXIT:\n case TOP_DRAG_LEAVE:\n case TOP_DRAG_OVER:\n case TOP_DRAG_START:\n case TOP_DROP:\n EventConstructor = SyntheticDragEvent;\n break;\n\n case TOP_TOUCH_CANCEL:\n case TOP_TOUCH_END:\n case TOP_TOUCH_MOVE:\n case TOP_TOUCH_START:\n EventConstructor = SyntheticTouchEvent;\n break;\n\n case TOP_ANIMATION_END:\n case TOP_ANIMATION_ITERATION:\n case TOP_ANIMATION_START:\n EventConstructor = SyntheticAnimationEvent;\n break;\n\n case TOP_TRANSITION_END:\n EventConstructor = SyntheticTransitionEvent;\n break;\n\n case TOP_SCROLL:\n EventConstructor = SyntheticUIEvent;\n break;\n\n case TOP_WHEEL:\n EventConstructor = SyntheticWheelEvent;\n break;\n\n case TOP_COPY:\n case TOP_CUT:\n case TOP_PASTE:\n EventConstructor = SyntheticClipboardEvent;\n break;\n\n case TOP_GOT_POINTER_CAPTURE:\n case TOP_LOST_POINTER_CAPTURE:\n case TOP_POINTER_CANCEL:\n case TOP_POINTER_DOWN:\n case TOP_POINTER_MOVE:\n case TOP_POINTER_OUT:\n case TOP_POINTER_OVER:\n case TOP_POINTER_UP:\n EventConstructor = SyntheticPointerEvent;\n break;\n\n default:\n {\n if (knownHTMLTopLevelTypes.indexOf(topLevelType) === -1) {\n error('SimpleEventPlugin: Unhandled event type, `%s`. This warning ' + 'is likely caused by a bug in React. Please file an issue.', topLevelType);\n }\n } // HTML Events\n // @see http://www.w3.org/TR/html5/index.html#events-0\n\n\n EventConstructor = SyntheticEvent;\n break;\n }\n\n var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\n accumulateTwoPhaseDispatches(event);\n return event;\n }\n};\n\n/**\n * Specifies a deterministic ordering of `EventPlugin`s. A convenient way to\n * reason about plugins, without having to package every one of them. This\n * is better than having plugins be ordered in the same order that they\n * are injected because that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\n\nvar DOMEventPluginOrder = ['ResponderEventPlugin', 'SimpleEventPlugin', 'EnterLeaveEventPlugin', 'ChangeEventPlugin', 'SelectEventPlugin', 'BeforeInputEventPlugin'];\n/**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\n\ninjectEventPluginOrder(DOMEventPluginOrder);\nsetComponentTree(getFiberCurrentPropsFromNode$1, getInstanceFromNode$1, getNodeFromInstance$1);\n/**\n * Some important event plugins included by default (without having to require\n * them).\n */\n\ninjectEventPluginsByName({\n SimpleEventPlugin: SimpleEventPlugin,\n EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n ChangeEventPlugin: ChangeEventPlugin,\n SelectEventPlugin: SelectEventPlugin,\n BeforeInputEventPlugin: BeforeInputEventPlugin\n});\n\n// Prefix measurements so that it's possible to filter them.\n// Longer prefixes are hard to read in DevTools.\nvar reactEmoji = \"\\u269B\";\nvar warningEmoji = \"\\u26D4\";\nvar supportsUserTiming = typeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function'; // Keep track of current fiber so that we know the path to unwind on pause.\n// TODO: this looks the same as nextUnitOfWork in scheduler. Can we unify them?\n\nvar currentFiber = null; // If we're in the middle of user code, which fiber and method is it?\n// Reusing `currentFiber` would be confusing for this because user code fiber\n// can change during commit phase too, but we don't need to unwind it (since\n// lifecycles in the commit phase don't resemble a tree).\n\nvar currentPhase = null;\nvar currentPhaseFiber = null; // Did lifecycle hook schedule an update? This is often a performance problem,\n// so we will keep track of it, and include it in the report.\n// Track commits caused by cascading updates.\n\nvar isCommitting = false;\nvar hasScheduledUpdateInCurrentCommit = false;\nvar hasScheduledUpdateInCurrentPhase = false;\nvar commitCountInCurrentWorkLoop = 0;\nvar effectCountInCurrentCommit = 0;\n// to avoid stretch the commit phase with measurement overhead.\n\nvar labelsInCurrentCommit = new Set();\n\nvar formatMarkName = function (markName) {\n return reactEmoji + \" \" + markName;\n};\n\nvar formatLabel = function (label, warning) {\n var prefix = warning ? warningEmoji + \" \" : reactEmoji + \" \";\n var suffix = warning ? \" Warning: \" + warning : '';\n return \"\" + prefix + label + suffix;\n};\n\nvar beginMark = function (markName) {\n performance.mark(formatMarkName(markName));\n};\n\nvar clearMark = function (markName) {\n performance.clearMarks(formatMarkName(markName));\n};\n\nvar endMark = function (label, markName, warning) {\n var formattedMarkName = formatMarkName(markName);\n var formattedLabel = formatLabel(label, warning);\n\n try {\n performance.measure(formattedLabel, formattedMarkName);\n } catch (err) {} // If previous mark was missing for some reason, this will throw.\n // This could only happen if React crashed in an unexpected place earlier.\n // Don't pile on with more errors.\n // Clear marks immediately to avoid growing buffer.\n\n\n performance.clearMarks(formattedMarkName);\n performance.clearMeasures(formattedLabel);\n};\n\nvar getFiberMarkName = function (label, debugID) {\n return label + \" (#\" + debugID + \")\";\n};\n\nvar getFiberLabel = function (componentName, isMounted, phase) {\n if (phase === null) {\n // These are composite component total time measurements.\n return componentName + \" [\" + (isMounted ? 'update' : 'mount') + \"]\";\n } else {\n // Composite component methods.\n return componentName + \".\" + phase;\n }\n};\n\nvar beginFiberMark = function (fiber, phase) {\n var componentName = getComponentName(fiber.type) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n\n if (isCommitting && labelsInCurrentCommit.has(label)) {\n // During the commit phase, we don't show duplicate labels because\n // there is a fixed overhead for every measurement, and we don't\n // want to stretch the commit phase beyond necessary.\n return false;\n }\n\n labelsInCurrentCommit.add(label);\n var markName = getFiberMarkName(label, debugID);\n beginMark(markName);\n return true;\n};\n\nvar clearFiberMark = function (fiber, phase) {\n var componentName = getComponentName(fiber.type) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n var markName = getFiberMarkName(label, debugID);\n clearMark(markName);\n};\n\nvar endFiberMark = function (fiber, phase, warning) {\n var componentName = getComponentName(fiber.type) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n var markName = getFiberMarkName(label, debugID);\n endMark(label, markName, warning);\n};\n\nvar shouldIgnoreFiber = function (fiber) {\n // Host components should be skipped in the timeline.\n // We could check typeof fiber.type, but does this work with RN?\n switch (fiber.tag) {\n case HostRoot:\n case HostComponent:\n case HostText:\n case HostPortal:\n case Fragment:\n case ContextProvider:\n case ContextConsumer:\n case Mode:\n return true;\n\n default:\n return false;\n }\n};\n\nvar clearPendingPhaseMeasurement = function () {\n if (currentPhase !== null && currentPhaseFiber !== null) {\n clearFiberMark(currentPhaseFiber, currentPhase);\n }\n\n currentPhaseFiber = null;\n currentPhase = null;\n hasScheduledUpdateInCurrentPhase = false;\n};\n\nvar pauseTimers = function () {\n // Stops all currently active measurements so that they can be resumed\n // if we continue in a later deferred loop from the same unit of work.\n var fiber = currentFiber;\n\n while (fiber) {\n if (fiber._debugIsCurrentlyTiming) {\n endFiberMark(fiber, null, null);\n }\n\n fiber = fiber.return;\n }\n};\n\nvar resumeTimersRecursively = function (fiber) {\n if (fiber.return !== null) {\n resumeTimersRecursively(fiber.return);\n }\n\n if (fiber._debugIsCurrentlyTiming) {\n beginFiberMark(fiber, null);\n }\n};\n\nvar resumeTimers = function () {\n // Resumes all measurements that were active during the last deferred loop.\n if (currentFiber !== null) {\n resumeTimersRecursively(currentFiber);\n }\n};\n\nfunction recordEffect() {\n {\n effectCountInCurrentCommit++;\n }\n}\nfunction recordScheduleUpdate() {\n {\n if (isCommitting) {\n hasScheduledUpdateInCurrentCommit = true;\n }\n\n if (currentPhase !== null && currentPhase !== 'componentWillMount' && currentPhase !== 'componentWillReceiveProps') {\n hasScheduledUpdateInCurrentPhase = true;\n }\n }\n}\nfunction startWorkTimer(fiber) {\n {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n } // If we pause, this is the fiber to unwind from.\n\n\n currentFiber = fiber;\n\n if (!beginFiberMark(fiber, null)) {\n return;\n }\n\n fiber._debugIsCurrentlyTiming = true;\n }\n}\nfunction cancelWorkTimer(fiber) {\n {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n } // Remember we shouldn't complete measurement for this fiber.\n // Otherwise flamechart will be deep even for small updates.\n\n\n fiber._debugIsCurrentlyTiming = false;\n clearFiberMark(fiber, null);\n }\n}\nfunction stopWorkTimer(fiber) {\n {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n } // If we pause, its parent is the fiber to unwind from.\n\n\n currentFiber = fiber.return;\n\n if (!fiber._debugIsCurrentlyTiming) {\n return;\n }\n\n fiber._debugIsCurrentlyTiming = false;\n endFiberMark(fiber, null, null);\n }\n}\nfunction stopFailedWorkTimer(fiber) {\n {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n } // If we pause, its parent is the fiber to unwind from.\n\n\n currentFiber = fiber.return;\n\n if (!fiber._debugIsCurrentlyTiming) {\n return;\n }\n\n fiber._debugIsCurrentlyTiming = false;\n var warning = fiber.tag === SuspenseComponent ? 'Rendering was suspended' : 'An error was thrown inside this error boundary';\n endFiberMark(fiber, null, warning);\n }\n}\nfunction startPhaseTimer(fiber, phase) {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n clearPendingPhaseMeasurement();\n\n if (!beginFiberMark(fiber, phase)) {\n return;\n }\n\n currentPhaseFiber = fiber;\n currentPhase = phase;\n }\n}\nfunction stopPhaseTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n if (currentPhase !== null && currentPhaseFiber !== null) {\n var warning = hasScheduledUpdateInCurrentPhase ? 'Scheduled a cascading update' : null;\n endFiberMark(currentPhaseFiber, currentPhase, warning);\n }\n\n currentPhase = null;\n currentPhaseFiber = null;\n }\n}\nfunction startWorkLoopTimer(nextUnitOfWork) {\n {\n currentFiber = nextUnitOfWork;\n\n if (!supportsUserTiming) {\n return;\n }\n\n commitCountInCurrentWorkLoop = 0; // This is top level call.\n // Any other measurements are performed within.\n\n beginMark('(React Tree Reconciliation)'); // Resume any measurements that were in progress during the last loop.\n\n resumeTimers();\n }\n}\nfunction stopWorkLoopTimer(interruptedBy, didCompleteRoot) {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var warning = null;\n\n if (interruptedBy !== null) {\n if (interruptedBy.tag === HostRoot) {\n warning = 'A top-level update interrupted the previous render';\n } else {\n var componentName = getComponentName(interruptedBy.type) || 'Unknown';\n warning = \"An update to \" + componentName + \" interrupted the previous render\";\n }\n } else if (commitCountInCurrentWorkLoop > 1) {\n warning = 'There were cascading updates';\n }\n\n commitCountInCurrentWorkLoop = 0;\n var label = didCompleteRoot ? '(React Tree Reconciliation: Completed Root)' : '(React Tree Reconciliation: Yielded)'; // Pause any measurements until the next loop.\n\n pauseTimers();\n endMark(label, '(React Tree Reconciliation)', warning);\n }\n}\nfunction startCommitTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n isCommitting = true;\n hasScheduledUpdateInCurrentCommit = false;\n labelsInCurrentCommit.clear();\n beginMark('(Committing Changes)');\n }\n}\nfunction stopCommitTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var warning = null;\n\n if (hasScheduledUpdateInCurrentCommit) {\n warning = 'Lifecycle hook scheduled a cascading update';\n } else if (commitCountInCurrentWorkLoop > 0) {\n warning = 'Caused by a cascading update in earlier commit';\n }\n\n hasScheduledUpdateInCurrentCommit = false;\n commitCountInCurrentWorkLoop++;\n isCommitting = false;\n labelsInCurrentCommit.clear();\n endMark('(Committing Changes)', '(Committing Changes)', warning);\n }\n}\nfunction startCommitSnapshotEffectsTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n effectCountInCurrentCommit = 0;\n beginMark('(Committing Snapshot Effects)');\n }\n}\nfunction stopCommitSnapshotEffectsTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark(\"(Committing Snapshot Effects: \" + count + \" Total)\", '(Committing Snapshot Effects)', null);\n }\n}\nfunction startCommitHostEffectsTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n effectCountInCurrentCommit = 0;\n beginMark('(Committing Host Effects)');\n }\n}\nfunction stopCommitHostEffectsTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark(\"(Committing Host Effects: \" + count + \" Total)\", '(Committing Host Effects)', null);\n }\n}\nfunction startCommitLifeCyclesTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n effectCountInCurrentCommit = 0;\n beginMark('(Calling Lifecycle Methods)');\n }\n}\nfunction stopCommitLifeCyclesTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark(\"(Calling Lifecycle Methods: \" + count + \" Total)\", '(Calling Lifecycle Methods)', null);\n }\n}\n\nvar valueStack = [];\nvar fiberStack;\n\n{\n fiberStack = [];\n}\n\nvar index = -1;\n\nfunction createCursor(defaultValue) {\n return {\n current: defaultValue\n };\n}\n\nfunction pop(cursor, fiber) {\n if (index < 0) {\n {\n error('Unexpected pop.');\n }\n\n return;\n }\n\n {\n if (fiber !== fiberStack[index]) {\n error('Unexpected Fiber popped.');\n }\n }\n\n cursor.current = valueStack[index];\n valueStack[index] = null;\n\n {\n fiberStack[index] = null;\n }\n\n index--;\n}\n\nfunction push(cursor, value, fiber) {\n index++;\n valueStack[index] = cursor.current;\n\n {\n fiberStack[index] = fiber;\n }\n\n cursor.current = value;\n}\n\nvar warnedAboutMissingGetChildContext;\n\n{\n warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n\n{\n Object.freeze(emptyContextObject);\n} // A cursor to the current merged context object on the stack.\n\n\nvar contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.\n\nvar didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\n\nvar previousContext = emptyContextObject;\n\nfunction getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {\n {\n if (didPushOwnContextIfProvider && isContextProvider(Component)) {\n // If the fiber is a context provider itself, when we read its context\n // we may have already pushed its own child context on the stack. A context\n // provider should not \"see\" its own child context. Therefore we read the\n // previous (parent) context instead for a context provider.\n return previousContext;\n }\n\n return contextStackCursor.current;\n }\n}\n\nfunction cacheContext(workInProgress, unmaskedContext, maskedContext) {\n {\n var instance = workInProgress.stateNode;\n instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;\n instance.__reactInternalMemoizedMaskedChildContext = maskedContext;\n }\n}\n\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n {\n var type = workInProgress.type;\n var contextTypes = type.contextTypes;\n\n if (!contextTypes) {\n return emptyContextObject;\n } // Avoid recreating masked context unless unmasked context has changed.\n // Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n // This may trigger infinite loops if componentWillReceiveProps calls setState.\n\n\n var instance = workInProgress.stateNode;\n\n if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {\n return instance.__reactInternalMemoizedMaskedChildContext;\n }\n\n var context = {};\n\n for (var key in contextTypes) {\n context[key] = unmaskedContext[key];\n }\n\n {\n var name = getComponentName(type) || 'Unknown';\n checkPropTypes(contextTypes, context, 'context', name, getCurrentFiberStackInDev);\n } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // Context is created before the class component is instantiated so check for instance.\n\n\n if (instance) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return context;\n }\n}\n\nfunction hasContextChanged() {\n {\n return didPerformWorkStackCursor.current;\n }\n}\n\nfunction isContextProvider(type) {\n {\n var childContextTypes = type.childContextTypes;\n return childContextTypes !== null && childContextTypes !== undefined;\n }\n}\n\nfunction popContext(fiber) {\n {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n }\n}\n\nfunction popTopLevelContextObject(fiber) {\n {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n }\n}\n\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n {\n if (!(contextStackCursor.current === emptyContextObject)) {\n {\n throw Error( \"Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n push(contextStackCursor, context, fiber);\n push(didPerformWorkStackCursor, didChange, fiber);\n }\n}\n\nfunction processChildContext(fiber, type, parentContext) {\n {\n var instance = fiber.stateNode;\n var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n\n if (typeof instance.getChildContext !== 'function') {\n {\n var componentName = getComponentName(type) || 'Unknown';\n\n if (!warnedAboutMissingGetChildContext[componentName]) {\n warnedAboutMissingGetChildContext[componentName] = true;\n\n error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n }\n }\n\n return parentContext;\n }\n\n var childContext;\n startPhaseTimer(fiber, 'getChildContext');\n childContext = instance.getChildContext();\n stopPhaseTimer();\n\n for (var contextKey in childContext) {\n if (!(contextKey in childContextTypes)) {\n {\n throw Error( (getComponentName(type) || 'Unknown') + \".getChildContext(): key \\\"\" + contextKey + \"\\\" is not defined in childContextTypes.\" );\n }\n }\n }\n\n {\n var name = getComponentName(type) || 'Unknown';\n checkPropTypes(childContextTypes, childContext, 'child context', name, // In practice, there is one case in which we won't get a stack. It's when\n // somebody calls unstable_renderSubtreeIntoContainer() and we process\n // context from the parent component instance. The stack will be missing\n // because it's outside of the reconciliation, and so the pointer has not\n // been set. This is rare and doesn't matter. We'll also remove that API.\n getCurrentFiberStackInDev);\n }\n\n return _assign({}, parentContext, {}, childContext);\n }\n}\n\nfunction pushContextProvider(workInProgress) {\n {\n var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.\n // If the instance does not exist yet, we will push null at first,\n // and replace it on the stack later when invalidating the context.\n\n var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.\n // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\n\n previousContext = contextStackCursor.current;\n push(contextStackCursor, memoizedMergedChildContext, workInProgress);\n push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);\n return true;\n }\n}\n\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n {\n var instance = workInProgress.stateNode;\n\n if (!instance) {\n {\n throw Error( \"Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n if (didChange) {\n // Merge parent and own context.\n // Skip this if we're not updating due to sCU.\n // This avoids unnecessarily recomputing memoized values.\n var mergedContext = processChildContext(workInProgress, type, previousContext);\n instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.\n // It is important to unwind the context in the reverse order.\n\n pop(didPerformWorkStackCursor, workInProgress);\n pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.\n\n push(contextStackCursor, mergedContext, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n } else {\n pop(didPerformWorkStackCursor, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n }\n }\n}\n\nfunction findCurrentUnmaskedContext(fiber) {\n {\n // Currently this is only used with renderSubtreeIntoContainer; not sure if it\n // makes sense elsewhere\n if (!(isFiberMounted(fiber) && fiber.tag === ClassComponent)) {\n {\n throw Error( \"Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var node = fiber;\n\n do {\n switch (node.tag) {\n case HostRoot:\n return node.stateNode.context;\n\n case ClassComponent:\n {\n var Component = node.type;\n\n if (isContextProvider(Component)) {\n return node.stateNode.__reactInternalMemoizedMergedChildContext;\n }\n\n break;\n }\n }\n\n node = node.return;\n } while (node !== null);\n\n {\n {\n throw Error( \"Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n }\n}\n\nvar LegacyRoot = 0;\nvar BlockingRoot = 1;\nvar ConcurrentRoot = 2;\n\nvar Scheduler_runWithPriority = Scheduler.unstable_runWithPriority,\n Scheduler_scheduleCallback = Scheduler.unstable_scheduleCallback,\n Scheduler_cancelCallback = Scheduler.unstable_cancelCallback,\n Scheduler_shouldYield = Scheduler.unstable_shouldYield,\n Scheduler_requestPaint = Scheduler.unstable_requestPaint,\n Scheduler_now = Scheduler.unstable_now,\n Scheduler_getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n Scheduler_ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n Scheduler_UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n Scheduler_NormalPriority = Scheduler.unstable_NormalPriority,\n Scheduler_LowPriority = Scheduler.unstable_LowPriority,\n Scheduler_IdlePriority = Scheduler.unstable_IdlePriority;\n\n{\n // Provide explicit error message when production+profiling bundle of e.g.\n // react-dom is used with production (non-profiling) bundle of\n // scheduler/tracing\n if (!(tracing.__interactionsRef != null && tracing.__interactionsRef.current != null)) {\n {\n throw Error( \"It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at http://fb.me/react-profiling\" );\n }\n }\n}\n\nvar fakeCallbackNode = {}; // Except for NoPriority, these correspond to Scheduler priorities. We use\n// ascending numbers so we can compare them like numbers. They start at 90 to\n// avoid clashing with Scheduler's priorities.\n\nvar ImmediatePriority = 99;\nvar UserBlockingPriority$1 = 98;\nvar NormalPriority = 97;\nvar LowPriority = 96;\nvar IdlePriority = 95; // NoPriority is the absence of priority. Also React-only.\n\nvar NoPriority = 90;\nvar shouldYield = Scheduler_shouldYield;\nvar requestPaint = // Fall back gracefully if we're running an older version of Scheduler.\nScheduler_requestPaint !== undefined ? Scheduler_requestPaint : function () {};\nvar syncQueue = null;\nvar immediateQueueCallbackNode = null;\nvar isFlushingSyncQueue = false;\nvar initialTimeMs = Scheduler_now(); // If the initial timestamp is reasonably small, use Scheduler's `now` directly.\n// This will be the case for modern browsers that support `performance.now`. In\n// older browsers, Scheduler falls back to `Date.now`, which returns a Unix\n// timestamp. In that case, subtract the module initialization time to simulate\n// the behavior of performance.now and keep our times small enough to fit\n// within 32 bits.\n// TODO: Consider lifting this into Scheduler.\n\nvar now = initialTimeMs < 10000 ? Scheduler_now : function () {\n return Scheduler_now() - initialTimeMs;\n};\nfunction getCurrentPriorityLevel() {\n switch (Scheduler_getCurrentPriorityLevel()) {\n case Scheduler_ImmediatePriority:\n return ImmediatePriority;\n\n case Scheduler_UserBlockingPriority:\n return UserBlockingPriority$1;\n\n case Scheduler_NormalPriority:\n return NormalPriority;\n\n case Scheduler_LowPriority:\n return LowPriority;\n\n case Scheduler_IdlePriority:\n return IdlePriority;\n\n default:\n {\n {\n throw Error( \"Unknown priority level.\" );\n }\n }\n\n }\n}\n\nfunction reactPriorityToSchedulerPriority(reactPriorityLevel) {\n switch (reactPriorityLevel) {\n case ImmediatePriority:\n return Scheduler_ImmediatePriority;\n\n case UserBlockingPriority$1:\n return Scheduler_UserBlockingPriority;\n\n case NormalPriority:\n return Scheduler_NormalPriority;\n\n case LowPriority:\n return Scheduler_LowPriority;\n\n case IdlePriority:\n return Scheduler_IdlePriority;\n\n default:\n {\n {\n throw Error( \"Unknown priority level.\" );\n }\n }\n\n }\n}\n\nfunction runWithPriority$1(reactPriorityLevel, fn) {\n var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);\n return Scheduler_runWithPriority(priorityLevel, fn);\n}\nfunction scheduleCallback(reactPriorityLevel, callback, options) {\n var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);\n return Scheduler_scheduleCallback(priorityLevel, callback, options);\n}\nfunction scheduleSyncCallback(callback) {\n // Push this callback into an internal queue. We'll flush these either in\n // the next tick, or earlier if something calls `flushSyncCallbackQueue`.\n if (syncQueue === null) {\n syncQueue = [callback]; // Flush the queue in the next tick, at the earliest.\n\n immediateQueueCallbackNode = Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueueImpl);\n } else {\n // Push onto existing queue. Don't need to schedule a callback because\n // we already scheduled one when we created the queue.\n syncQueue.push(callback);\n }\n\n return fakeCallbackNode;\n}\nfunction cancelCallback(callbackNode) {\n if (callbackNode !== fakeCallbackNode) {\n Scheduler_cancelCallback(callbackNode);\n }\n}\nfunction flushSyncCallbackQueue() {\n if (immediateQueueCallbackNode !== null) {\n var node = immediateQueueCallbackNode;\n immediateQueueCallbackNode = null;\n Scheduler_cancelCallback(node);\n }\n\n flushSyncCallbackQueueImpl();\n}\n\nfunction flushSyncCallbackQueueImpl() {\n if (!isFlushingSyncQueue && syncQueue !== null) {\n // Prevent re-entrancy.\n isFlushingSyncQueue = true;\n var i = 0;\n\n try {\n var _isSync = true;\n var queue = syncQueue;\n runWithPriority$1(ImmediatePriority, function () {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n\n do {\n callback = callback(_isSync);\n } while (callback !== null);\n }\n });\n syncQueue = null;\n } catch (error) {\n // If something throws, leave the remaining callbacks on the queue.\n if (syncQueue !== null) {\n syncQueue = syncQueue.slice(i + 1);\n } // Resume flushing in the next tick\n\n\n Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueue);\n throw error;\n } finally {\n isFlushingSyncQueue = false;\n }\n }\n}\n\nvar NoMode = 0;\nvar StrictMode = 1; // TODO: Remove BlockingMode and ConcurrentMode by reading from the root\n// tag instead\n\nvar BlockingMode = 2;\nvar ConcurrentMode = 4;\nvar ProfileMode = 8;\n\n// Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\nvar NoWork = 0; // TODO: Think of a better name for Never. The key difference with Idle is that\n// Never work can be committed in an inconsistent state without tearing the UI.\n// The main example is offscreen content, like a hidden subtree. So one possible\n// name is Offscreen. However, it also includes dehydrated Suspense boundaries,\n// which are inconsistent in the sense that they haven't finished yet, but\n// aren't visibly inconsistent because the server rendered HTML matches what the\n// hydrated tree would look like.\n\nvar Never = 1; // Idle is slightly higher priority than Never. It must completely finish in\n// order to be consistent.\n\nvar Idle = 2; // Continuous Hydration is slightly higher than Idle and is used to increase\n// priority of hover targets.\n\nvar ContinuousHydration = 3;\nvar Sync = MAX_SIGNED_31_BIT_INT;\nvar Batched = Sync - 1;\nvar UNIT_SIZE = 10;\nvar MAGIC_NUMBER_OFFSET = Batched - 1; // 1 unit of expiration time represents 10ms.\n\nfunction msToExpirationTime(ms) {\n // Always subtract from the offset so that we don't clash with the magic number for NoWork.\n return MAGIC_NUMBER_OFFSET - (ms / UNIT_SIZE | 0);\n}\nfunction expirationTimeToMs(expirationTime) {\n return (MAGIC_NUMBER_OFFSET - expirationTime) * UNIT_SIZE;\n}\n\nfunction ceiling(num, precision) {\n return ((num / precision | 0) + 1) * precision;\n}\n\nfunction computeExpirationBucket(currentTime, expirationInMs, bucketSizeMs) {\n return MAGIC_NUMBER_OFFSET - ceiling(MAGIC_NUMBER_OFFSET - currentTime + expirationInMs / UNIT_SIZE, bucketSizeMs / UNIT_SIZE);\n} // TODO: This corresponds to Scheduler's NormalPriority, not LowPriority. Update\n// the names to reflect.\n\n\nvar LOW_PRIORITY_EXPIRATION = 5000;\nvar LOW_PRIORITY_BATCH_SIZE = 250;\nfunction computeAsyncExpiration(currentTime) {\n return computeExpirationBucket(currentTime, LOW_PRIORITY_EXPIRATION, LOW_PRIORITY_BATCH_SIZE);\n}\nfunction computeSuspenseExpiration(currentTime, timeoutMs) {\n // TODO: Should we warn if timeoutMs is lower than the normal pri expiration time?\n return computeExpirationBucket(currentTime, timeoutMs, LOW_PRIORITY_BATCH_SIZE);\n} // We intentionally set a higher expiration time for interactive updates in\n// dev than in production.\n//\n// If the main thread is being blocked so long that you hit the expiration,\n// it's a problem that could be solved with better scheduling.\n//\n// People will be more likely to notice this and fix it with the long\n// expiration time in development.\n//\n// In production we opt for better UX at the risk of masking scheduling\n// problems, by expiring fast.\n\nvar HIGH_PRIORITY_EXPIRATION = 500 ;\nvar HIGH_PRIORITY_BATCH_SIZE = 100;\nfunction computeInteractiveExpiration(currentTime) {\n return computeExpirationBucket(currentTime, HIGH_PRIORITY_EXPIRATION, HIGH_PRIORITY_BATCH_SIZE);\n}\nfunction inferPriorityFromExpirationTime(currentTime, expirationTime) {\n if (expirationTime === Sync) {\n return ImmediatePriority;\n }\n\n if (expirationTime === Never || expirationTime === Idle) {\n return IdlePriority;\n }\n\n var msUntil = expirationTimeToMs(expirationTime) - expirationTimeToMs(currentTime);\n\n if (msUntil <= 0) {\n return ImmediatePriority;\n }\n\n if (msUntil <= HIGH_PRIORITY_EXPIRATION + HIGH_PRIORITY_BATCH_SIZE) {\n return UserBlockingPriority$1;\n }\n\n if (msUntil <= LOW_PRIORITY_EXPIRATION + LOW_PRIORITY_BATCH_SIZE) {\n return NormalPriority;\n } // TODO: Handle LowPriority\n // Assume anything lower has idle priority\n\n\n return IdlePriority;\n}\n\nvar ReactStrictModeWarnings = {\n recordUnsafeLifecycleWarnings: function (fiber, instance) {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordLegacyContextWarning: function (fiber, instance) {},\n flushLegacyContextWarning: function () {},\n discardPendingWarnings: function () {}\n};\n\n{\n var findStrictRoot = function (fiber) {\n var maybeStrictRoot = null;\n var node = fiber;\n\n while (node !== null) {\n if (node.mode & StrictMode) {\n maybeStrictRoot = node;\n }\n\n node = node.return;\n }\n\n return maybeStrictRoot;\n };\n\n var setToSortedString = function (set) {\n var array = [];\n set.forEach(function (value) {\n array.push(value);\n });\n return array.sort().join(', ');\n };\n\n var pendingComponentWillMountWarnings = [];\n var pendingUNSAFE_ComponentWillMountWarnings = [];\n var pendingComponentWillReceivePropsWarnings = [];\n var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n var pendingComponentWillUpdateWarnings = [];\n var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.\n\n var didWarnAboutUnsafeLifecycles = new Set();\n\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {\n // Dedup strategy: Warn once per component.\n if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {\n return;\n }\n\n if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.\n instance.componentWillMount.__suppressDeprecationWarning !== true) {\n pendingComponentWillMountWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillMount === 'function') {\n pendingUNSAFE_ComponentWillMountWarnings.push(fiber);\n }\n\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n pendingComponentWillReceivePropsWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);\n }\n\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n pendingComponentWillUpdateWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {\n pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n // We do an initial pass to gather component names\n var componentWillMountUniqueNames = new Set();\n\n if (pendingComponentWillMountWarnings.length > 0) {\n pendingComponentWillMountWarnings.forEach(function (fiber) {\n componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillMountWarnings = [];\n }\n\n var UNSAFE_componentWillMountUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {\n pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n UNSAFE_componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillMountWarnings = [];\n }\n\n var componentWillReceivePropsUniqueNames = new Set();\n\n if (pendingComponentWillReceivePropsWarnings.length > 0) {\n pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillReceivePropsWarnings = [];\n }\n\n var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {\n pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {\n UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n }\n\n var componentWillUpdateUniqueNames = new Set();\n\n if (pendingComponentWillUpdateWarnings.length > 0) {\n pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillUpdateWarnings = [];\n }\n\n var UNSAFE_componentWillUpdateUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {\n pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n UNSAFE_componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n } // Finally, we flush all the warnings\n // UNSAFE_ ones before the deprecated ones, since they'll be 'louder'\n\n\n if (UNSAFE_componentWillMountUniqueNames.size > 0) {\n var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);\n\n error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '\\nPlease update the following components: %s', sortedNames);\n }\n\n if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {\n var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);\n\n error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, \" + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n' + '\\nPlease update the following components: %s', _sortedNames);\n }\n\n if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {\n var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);\n\n error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '\\nPlease update the following components: %s', _sortedNames2);\n }\n\n if (componentWillMountUniqueNames.size > 0) {\n var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);\n\n warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames3);\n }\n\n if (componentWillReceivePropsUniqueNames.size > 0) {\n var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);\n\n warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, refactor your \" + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames4);\n }\n\n if (componentWillUpdateUniqueNames.size > 0) {\n var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);\n\n warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames5);\n }\n };\n\n var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.\n\n var didWarnAboutLegacyContext = new Set();\n\n ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {\n var strictRoot = findStrictRoot(fiber);\n\n if (strictRoot === null) {\n error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n\n return;\n } // Dedup strategy: Warn once per component.\n\n\n if (didWarnAboutLegacyContext.has(fiber.type)) {\n return;\n }\n\n var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);\n\n if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {\n if (warningsForRoot === undefined) {\n warningsForRoot = [];\n pendingLegacyContextWarning.set(strictRoot, warningsForRoot);\n }\n\n warningsForRoot.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {\n if (fiberArray.length === 0) {\n return;\n }\n\n var firstFiber = fiberArray[0];\n var uniqueNames = new Set();\n fiberArray.forEach(function (fiber) {\n uniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutLegacyContext.add(fiber.type);\n });\n var sortedNames = setToSortedString(uniqueNames);\n var firstComponentStack = getStackByFiberInDevAndProd(firstFiber);\n\n error('Legacy context API has been detected within a strict-mode tree.' + '\\n\\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here: https://fb.me/react-legacy-context' + '%s', sortedNames, firstComponentStack);\n });\n };\n\n ReactStrictModeWarnings.discardPendingWarnings = function () {\n pendingComponentWillMountWarnings = [];\n pendingUNSAFE_ComponentWillMountWarnings = [];\n pendingComponentWillReceivePropsWarnings = [];\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n pendingComponentWillUpdateWarnings = [];\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n pendingLegacyContextWarning = new Map();\n };\n}\n\nvar resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below.\n\nvar failedBoundaries = null;\nvar setRefreshHandler = function (handler) {\n {\n resolveFamily = handler;\n }\n};\nfunction resolveFunctionForHotReloading(type) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return type;\n }\n\n var family = resolveFamily(type);\n\n if (family === undefined) {\n return type;\n } // Use the latest known implementation.\n\n\n return family.current;\n }\n}\nfunction resolveClassForHotReloading(type) {\n // No implementation differences.\n return resolveFunctionForHotReloading(type);\n}\nfunction resolveForwardRefForHotReloading(type) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return type;\n }\n\n var family = resolveFamily(type);\n\n if (family === undefined) {\n // Check if we're dealing with a real forwardRef. Don't want to crash early.\n if (type !== null && type !== undefined && typeof type.render === 'function') {\n // ForwardRef is special because its resolved .type is an object,\n // but it's possible that we only have its inner render function in the map.\n // If that inner render function is different, we'll build a new forwardRef type.\n var currentRender = resolveFunctionForHotReloading(type.render);\n\n if (type.render !== currentRender) {\n var syntheticType = {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: currentRender\n };\n\n if (type.displayName !== undefined) {\n syntheticType.displayName = type.displayName;\n }\n\n return syntheticType;\n }\n }\n\n return type;\n } // Use the latest known implementation.\n\n\n return family.current;\n }\n}\nfunction isCompatibleFamilyForHotReloading(fiber, element) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return false;\n }\n\n var prevType = fiber.elementType;\n var nextType = element.type; // If we got here, we know types aren't === equal.\n\n var needsCompareFamilies = false;\n var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;\n\n switch (fiber.tag) {\n case ClassComponent:\n {\n if (typeof nextType === 'function') {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case FunctionComponent:\n {\n if (typeof nextType === 'function') {\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n // We don't know the inner type yet.\n // We're going to assume that the lazy inner type is stable,\n // and so it is sufficient to avoid reconciling it away.\n // We're not going to unwrap or actually use the new lazy type.\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case ForwardRef:\n {\n if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case MemoComponent:\n case SimpleMemoComponent:\n {\n if ($$typeofNextType === REACT_MEMO_TYPE) {\n // TODO: if it was but can no longer be simple,\n // we shouldn't set this.\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n default:\n return false;\n } // Check if both types have a family and it's the same one.\n\n\n if (needsCompareFamilies) {\n // Note: memo() and forwardRef() we'll compare outer rather than inner type.\n // This means both of them need to be registered to preserve state.\n // If we unwrapped and compared the inner types for wrappers instead,\n // then we would risk falsely saying two separate memo(Foo)\n // calls are equivalent because they wrap the same Foo function.\n var prevFamily = resolveFamily(prevType);\n\n if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {\n return true;\n }\n }\n\n return false;\n }\n}\nfunction markFailedErrorBoundaryForHotReloading(fiber) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return;\n }\n\n if (typeof WeakSet !== 'function') {\n return;\n }\n\n if (failedBoundaries === null) {\n failedBoundaries = new WeakSet();\n }\n\n failedBoundaries.add(fiber);\n }\n}\nvar scheduleRefresh = function (root, update) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return;\n }\n\n var staleFamilies = update.staleFamilies,\n updatedFamilies = update.updatedFamilies;\n flushPassiveEffects();\n flushSync(function () {\n scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);\n });\n }\n};\nvar scheduleRoot = function (root, element) {\n {\n if (root.context !== emptyContextObject) {\n // Super edge case: root has a legacy _renderSubtree context\n // but we don't know the parentComponent so we can't pass it.\n // Just ignore. We'll delete this with _renderSubtree code path later.\n return;\n }\n\n flushPassiveEffects();\n syncUpdates(function () {\n updateContainer(element, root, null, null);\n });\n }\n};\n\nfunction scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {\n {\n var alternate = fiber.alternate,\n child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type;\n var candidateType = null;\n\n switch (tag) {\n case FunctionComponent:\n case SimpleMemoComponent:\n case ClassComponent:\n candidateType = type;\n break;\n\n case ForwardRef:\n candidateType = type.render;\n break;\n }\n\n if (resolveFamily === null) {\n throw new Error('Expected resolveFamily to be set during hot reload.');\n }\n\n var needsRender = false;\n var needsRemount = false;\n\n if (candidateType !== null) {\n var family = resolveFamily(candidateType);\n\n if (family !== undefined) {\n if (staleFamilies.has(family)) {\n needsRemount = true;\n } else if (updatedFamilies.has(family)) {\n if (tag === ClassComponent) {\n needsRemount = true;\n } else {\n needsRender = true;\n }\n }\n }\n }\n\n if (failedBoundaries !== null) {\n if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) {\n needsRemount = true;\n }\n }\n\n if (needsRemount) {\n fiber._debugNeedsRemount = true;\n }\n\n if (needsRemount || needsRender) {\n scheduleWork(fiber, Sync);\n }\n\n if (child !== null && !needsRemount) {\n scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);\n }\n\n if (sibling !== null) {\n scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);\n }\n }\n}\n\nvar findHostInstancesForRefresh = function (root, families) {\n {\n var hostInstances = new Set();\n var types = new Set(families.map(function (family) {\n return family.current;\n }));\n findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);\n return hostInstances;\n }\n};\n\nfunction findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {\n {\n var child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type;\n var candidateType = null;\n\n switch (tag) {\n case FunctionComponent:\n case SimpleMemoComponent:\n case ClassComponent:\n candidateType = type;\n break;\n\n case ForwardRef:\n candidateType = type.render;\n break;\n }\n\n var didMatch = false;\n\n if (candidateType !== null) {\n if (types.has(candidateType)) {\n didMatch = true;\n }\n }\n\n if (didMatch) {\n // We have a match. This only drills down to the closest host components.\n // There's no need to search deeper because for the purpose of giving\n // visual feedback, \"flashing\" outermost parent rectangles is sufficient.\n findHostInstancesForFiberShallowly(fiber, hostInstances);\n } else {\n // If there's no match, maybe there will be one further down in the child tree.\n if (child !== null) {\n findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);\n }\n }\n\n if (sibling !== null) {\n findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);\n }\n }\n}\n\nfunction findHostInstancesForFiberShallowly(fiber, hostInstances) {\n {\n var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);\n\n if (foundHostInstances) {\n return;\n } // If we didn't find any host children, fallback to closest host parent.\n\n\n var node = fiber;\n\n while (true) {\n switch (node.tag) {\n case HostComponent:\n hostInstances.add(node.stateNode);\n return;\n\n case HostPortal:\n hostInstances.add(node.stateNode.containerInfo);\n return;\n\n case HostRoot:\n hostInstances.add(node.stateNode.containerInfo);\n return;\n }\n\n if (node.return === null) {\n throw new Error('Expected to reach root first.');\n }\n\n node = node.return;\n }\n }\n}\n\nfunction findChildHostInstancesForFiberShallowly(fiber, hostInstances) {\n {\n var node = fiber;\n var foundHostInstances = false;\n\n while (true) {\n if (node.tag === HostComponent) {\n // We got a match.\n foundHostInstances = true;\n hostInstances.add(node.stateNode); // There may still be more, so keep searching.\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === fiber) {\n return foundHostInstances;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === fiber) {\n return foundHostInstances;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n\n return false;\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n if (Component && Component.defaultProps) {\n // Resolve default props. Taken from ReactElement\n var props = _assign({}, baseProps);\n\n var defaultProps = Component.defaultProps;\n\n for (var propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n\n return props;\n }\n\n return baseProps;\n}\nfunction readLazyComponentType(lazyComponent) {\n initializeLazyComponentType(lazyComponent);\n\n if (lazyComponent._status !== Resolved) {\n throw lazyComponent._result;\n }\n\n return lazyComponent._result;\n}\n\nvar valueCursor = createCursor(null);\nvar rendererSigil;\n\n{\n // Use this to detect multiple renderers using the same context\n rendererSigil = {};\n}\n\nvar currentlyRenderingFiber = null;\nvar lastContextDependency = null;\nvar lastContextWithAllBitsObserved = null;\nvar isDisallowedContextReadInDEV = false;\nfunction resetContextDependencies() {\n // This is called right before React yields execution, to ensure `readContext`\n // cannot be called outside the render phase.\n currentlyRenderingFiber = null;\n lastContextDependency = null;\n lastContextWithAllBitsObserved = null;\n\n {\n isDisallowedContextReadInDEV = false;\n }\n}\nfunction enterDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = true;\n }\n}\nfunction exitDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = false;\n }\n}\nfunction pushProvider(providerFiber, nextValue) {\n var context = providerFiber.type._context;\n\n {\n push(valueCursor, context._currentValue, providerFiber);\n context._currentValue = nextValue;\n\n {\n if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {\n error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n }\n\n context._currentRenderer = rendererSigil;\n }\n }\n}\nfunction popProvider(providerFiber) {\n var currentValue = valueCursor.current;\n pop(valueCursor, providerFiber);\n var context = providerFiber.type._context;\n\n {\n context._currentValue = currentValue;\n }\n}\nfunction calculateChangedBits(context, newValue, oldValue) {\n if (objectIs(oldValue, newValue)) {\n // No change\n return 0;\n } else {\n var changedBits = typeof context._calculateChangedBits === 'function' ? context._calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n {\n if ((changedBits & MAX_SIGNED_31_BIT_INT) !== changedBits) {\n error('calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits);\n }\n }\n\n return changedBits | 0;\n }\n}\nfunction scheduleWorkOnParentPath(parent, renderExpirationTime) {\n // Update the child expiration time of all the ancestors, including\n // the alternates.\n var node = parent;\n\n while (node !== null) {\n var alternate = node.alternate;\n\n if (node.childExpirationTime < renderExpirationTime) {\n node.childExpirationTime = renderExpirationTime;\n\n if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n alternate.childExpirationTime = renderExpirationTime;\n }\n } else if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n alternate.childExpirationTime = renderExpirationTime;\n } else {\n // Neither alternate was updated, which means the rest of the\n // ancestor path already has sufficient priority.\n break;\n }\n\n node = node.return;\n }\n}\nfunction propagateContextChange(workInProgress, context, changedBits, renderExpirationTime) {\n var fiber = workInProgress.child;\n\n if (fiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n fiber.return = workInProgress;\n }\n\n while (fiber !== null) {\n var nextFiber = void 0; // Visit this fiber.\n\n var list = fiber.dependencies;\n\n if (list !== null) {\n nextFiber = fiber.child;\n var dependency = list.firstContext;\n\n while (dependency !== null) {\n // Check if the context matches.\n if (dependency.context === context && (dependency.observedBits & changedBits) !== 0) {\n // Match! Schedule an update on this fiber.\n if (fiber.tag === ClassComponent) {\n // Schedule a force update on the work-in-progress.\n var update = createUpdate(renderExpirationTime, null);\n update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the\n // update to the current fiber, too, which means it will persist even if\n // this render is thrown away. Since it's a race condition, not sure it's\n // worth fixing.\n\n enqueueUpdate(fiber, update);\n }\n\n if (fiber.expirationTime < renderExpirationTime) {\n fiber.expirationTime = renderExpirationTime;\n }\n\n var alternate = fiber.alternate;\n\n if (alternate !== null && alternate.expirationTime < renderExpirationTime) {\n alternate.expirationTime = renderExpirationTime;\n }\n\n scheduleWorkOnParentPath(fiber.return, renderExpirationTime); // Mark the expiration time on the list, too.\n\n if (list.expirationTime < renderExpirationTime) {\n list.expirationTime = renderExpirationTime;\n } // Since we already found a match, we can stop traversing the\n // dependency list.\n\n\n break;\n }\n\n dependency = dependency.next;\n }\n } else if (fiber.tag === ContextProvider) {\n // Don't scan deeper if this is a matching provider\n nextFiber = fiber.type === workInProgress.type ? null : fiber.child;\n } else {\n // Traverse down.\n nextFiber = fiber.child;\n }\n\n if (nextFiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n nextFiber.return = fiber;\n } else {\n // No child. Traverse to next sibling.\n nextFiber = fiber;\n\n while (nextFiber !== null) {\n if (nextFiber === workInProgress) {\n // We're back to the root of this subtree. Exit.\n nextFiber = null;\n break;\n }\n\n var sibling = nextFiber.sibling;\n\n if (sibling !== null) {\n // Set the return pointer of the sibling to the work-in-progress fiber.\n sibling.return = nextFiber.return;\n nextFiber = sibling;\n break;\n } // No more siblings. Traverse up.\n\n\n nextFiber = nextFiber.return;\n }\n }\n\n fiber = nextFiber;\n }\n}\nfunction prepareToReadContext(workInProgress, renderExpirationTime) {\n currentlyRenderingFiber = workInProgress;\n lastContextDependency = null;\n lastContextWithAllBitsObserved = null;\n var dependencies = workInProgress.dependencies;\n\n if (dependencies !== null) {\n var firstContext = dependencies.firstContext;\n\n if (firstContext !== null) {\n if (dependencies.expirationTime >= renderExpirationTime) {\n // Context list has a pending update. Mark that this fiber performed work.\n markWorkInProgressReceivedUpdate();\n } // Reset the work-in-progress list\n\n\n dependencies.firstContext = null;\n }\n }\n}\nfunction readContext(context, observedBits) {\n {\n // This warning would fire if you read context inside a Hook like useMemo.\n // Unlike the class check below, it's not enforced in production for perf.\n if (isDisallowedContextReadInDEV) {\n error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n }\n }\n\n if (lastContextWithAllBitsObserved === context) ; else if (observedBits === false || observedBits === 0) ; else {\n var resolvedObservedBits; // Avoid deopting on observable arguments or heterogeneous types.\n\n if (typeof observedBits !== 'number' || observedBits === MAX_SIGNED_31_BIT_INT) {\n // Observe all updates.\n lastContextWithAllBitsObserved = context;\n resolvedObservedBits = MAX_SIGNED_31_BIT_INT;\n } else {\n resolvedObservedBits = observedBits;\n }\n\n var contextItem = {\n context: context,\n observedBits: resolvedObservedBits,\n next: null\n };\n\n if (lastContextDependency === null) {\n if (!(currentlyRenderingFiber !== null)) {\n {\n throw Error( \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\" );\n }\n } // This is the first dependency for this component. Create a new list.\n\n\n lastContextDependency = contextItem;\n currentlyRenderingFiber.dependencies = {\n expirationTime: NoWork,\n firstContext: contextItem,\n responders: null\n };\n } else {\n // Append a new context item.\n lastContextDependency = lastContextDependency.next = contextItem;\n }\n }\n\n return context._currentValue ;\n}\n\nvar UpdateState = 0;\nvar ReplaceState = 1;\nvar ForceUpdate = 2;\nvar CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.\n// It should only be read right after calling `processUpdateQueue`, via\n// `checkHasForceUpdateAfterProcessing`.\n\nvar hasForceUpdate = false;\nvar didWarnUpdateInsideUpdate;\nvar currentlyProcessingQueue;\n\n{\n didWarnUpdateInsideUpdate = false;\n currentlyProcessingQueue = null;\n}\n\nfunction initializeUpdateQueue(fiber) {\n var queue = {\n baseState: fiber.memoizedState,\n baseQueue: null,\n shared: {\n pending: null\n },\n effects: null\n };\n fiber.updateQueue = queue;\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n // Clone the update queue from current. Unless it's already a clone.\n var queue = workInProgress.updateQueue;\n var currentQueue = current.updateQueue;\n\n if (queue === currentQueue) {\n var clone = {\n baseState: currentQueue.baseState,\n baseQueue: currentQueue.baseQueue,\n shared: currentQueue.shared,\n effects: currentQueue.effects\n };\n workInProgress.updateQueue = clone;\n }\n}\nfunction createUpdate(expirationTime, suspenseConfig) {\n var update = {\n expirationTime: expirationTime,\n suspenseConfig: suspenseConfig,\n tag: UpdateState,\n payload: null,\n callback: null,\n next: null\n };\n update.next = update;\n\n {\n update.priority = getCurrentPriorityLevel();\n }\n\n return update;\n}\nfunction enqueueUpdate(fiber, update) {\n var updateQueue = fiber.updateQueue;\n\n if (updateQueue === null) {\n // Only occurs if the fiber has been unmounted.\n return;\n }\n\n var sharedQueue = updateQueue.shared;\n var pending = sharedQueue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n sharedQueue.pending = update;\n\n {\n if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {\n error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');\n\n didWarnUpdateInsideUpdate = true;\n }\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, update) {\n var current = workInProgress.alternate;\n\n if (current !== null) {\n // Ensure the work-in-progress queue is a clone\n cloneUpdateQueue(current, workInProgress);\n } // Captured updates go only on the work-in-progress queue.\n\n\n var queue = workInProgress.updateQueue; // Append the update to the end of the list.\n\n var last = queue.baseQueue;\n\n if (last === null) {\n queue.baseQueue = update.next = update;\n update.next = update;\n } else {\n update.next = last.next;\n last.next = update;\n }\n}\n\nfunction getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {\n switch (update.tag) {\n case ReplaceState:\n {\n var payload = update.payload;\n\n if (typeof payload === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n\n if ( workInProgress.mode & StrictMode) {\n payload.call(instance, prevState, nextProps);\n }\n }\n\n var nextState = payload.call(instance, prevState, nextProps);\n\n {\n exitDisallowedContextReadInDEV();\n }\n\n return nextState;\n } // State object\n\n\n return payload;\n }\n\n case CaptureUpdate:\n {\n workInProgress.effectTag = workInProgress.effectTag & ~ShouldCapture | DidCapture;\n }\n // Intentional fallthrough\n\n case UpdateState:\n {\n var _payload = update.payload;\n var partialState;\n\n if (typeof _payload === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n\n if ( workInProgress.mode & StrictMode) {\n _payload.call(instance, prevState, nextProps);\n }\n }\n\n partialState = _payload.call(instance, prevState, nextProps);\n\n {\n exitDisallowedContextReadInDEV();\n }\n } else {\n // Partial state object\n partialState = _payload;\n }\n\n if (partialState === null || partialState === undefined) {\n // Null and undefined are treated as no-ops.\n return prevState;\n } // Merge the partial state and the previous state.\n\n\n return _assign({}, prevState, partialState);\n }\n\n case ForceUpdate:\n {\n hasForceUpdate = true;\n return prevState;\n }\n }\n\n return prevState;\n}\n\nfunction processUpdateQueue(workInProgress, props, instance, renderExpirationTime) {\n // This is always non-null on a ClassComponent or HostRoot\n var queue = workInProgress.updateQueue;\n hasForceUpdate = false;\n\n {\n currentlyProcessingQueue = queue.shared;\n } // The last rebase update that is NOT part of the base state.\n\n\n var baseQueue = queue.baseQueue; // The last pending update that hasn't been processed yet.\n\n var pendingQueue = queue.shared.pending;\n\n if (pendingQueue !== null) {\n // We have new updates that haven't been processed yet.\n // We'll add them to the base queue.\n if (baseQueue !== null) {\n // Merge the pending queue and the base queue.\n var baseFirst = baseQueue.next;\n var pendingFirst = pendingQueue.next;\n baseQueue.next = pendingFirst;\n pendingQueue.next = baseFirst;\n }\n\n baseQueue = pendingQueue;\n queue.shared.pending = null; // TODO: Pass `current` as argument\n\n var current = workInProgress.alternate;\n\n if (current !== null) {\n var currentQueue = current.updateQueue;\n\n if (currentQueue !== null) {\n currentQueue.baseQueue = pendingQueue;\n }\n }\n } // These values may change as we process the queue.\n\n\n if (baseQueue !== null) {\n var first = baseQueue.next; // Iterate through the list of updates to compute the result.\n\n var newState = queue.baseState;\n var newExpirationTime = NoWork;\n var newBaseState = null;\n var newBaseQueueFirst = null;\n var newBaseQueueLast = null;\n\n if (first !== null) {\n var update = first;\n\n do {\n var updateExpirationTime = update.expirationTime;\n\n if (updateExpirationTime < renderExpirationTime) {\n // Priority is insufficient. Skip this update. If this is the first\n // skipped update, the previous update/state is the new base\n // update/state.\n var clone = {\n expirationTime: update.expirationTime,\n suspenseConfig: update.suspenseConfig,\n tag: update.tag,\n payload: update.payload,\n callback: update.callback,\n next: null\n };\n\n if (newBaseQueueLast === null) {\n newBaseQueueFirst = newBaseQueueLast = clone;\n newBaseState = newState;\n } else {\n newBaseQueueLast = newBaseQueueLast.next = clone;\n } // Update the remaining priority in the queue.\n\n\n if (updateExpirationTime > newExpirationTime) {\n newExpirationTime = updateExpirationTime;\n }\n } else {\n // This update does have sufficient priority.\n if (newBaseQueueLast !== null) {\n var _clone = {\n expirationTime: Sync,\n // This update is going to be committed so we never want uncommit it.\n suspenseConfig: update.suspenseConfig,\n tag: update.tag,\n payload: update.payload,\n callback: update.callback,\n next: null\n };\n newBaseQueueLast = newBaseQueueLast.next = _clone;\n } // Mark the event time of this update as relevant to this render pass.\n // TODO: This should ideally use the true event time of this update rather than\n // its priority which is a derived and not reverseable value.\n // TODO: We should skip this update if it was already committed but currently\n // we have no way of detecting the difference between a committed and suspended\n // update here.\n\n\n markRenderEventTimeAndConfig(updateExpirationTime, update.suspenseConfig); // Process this update.\n\n newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);\n var callback = update.callback;\n\n if (callback !== null) {\n workInProgress.effectTag |= Callback;\n var effects = queue.effects;\n\n if (effects === null) {\n queue.effects = [update];\n } else {\n effects.push(update);\n }\n }\n }\n\n update = update.next;\n\n if (update === null || update === first) {\n pendingQueue = queue.shared.pending;\n\n if (pendingQueue === null) {\n break;\n } else {\n // An update was scheduled from inside a reducer. Add the new\n // pending updates to the end of the list and keep processing.\n update = baseQueue.next = pendingQueue.next;\n pendingQueue.next = first;\n queue.baseQueue = baseQueue = pendingQueue;\n queue.shared.pending = null;\n }\n }\n } while (true);\n }\n\n if (newBaseQueueLast === null) {\n newBaseState = newState;\n } else {\n newBaseQueueLast.next = newBaseQueueFirst;\n }\n\n queue.baseState = newBaseState;\n queue.baseQueue = newBaseQueueLast; // Set the remaining expiration time to be whatever is remaining in the queue.\n // This should be fine because the only two other things that contribute to\n // expiration time are props and context. We're already in the middle of the\n // begin phase by the time we start processing the queue, so we've already\n // dealt with the props. Context in components that specify\n // shouldComponentUpdate is tricky; but we'll have to account for\n // that regardless.\n\n markUnprocessedUpdateTime(newExpirationTime);\n workInProgress.expirationTime = newExpirationTime;\n workInProgress.memoizedState = newState;\n }\n\n {\n currentlyProcessingQueue = null;\n }\n}\n\nfunction callCallback(callback, context) {\n if (!(typeof callback === 'function')) {\n {\n throw Error( \"Invalid argument passed as callback. Expected a function. Instead received: \" + callback );\n }\n }\n\n callback.call(context);\n}\n\nfunction resetHasForceUpdateBeforeProcessing() {\n hasForceUpdate = false;\n}\nfunction checkHasForceUpdateAfterProcessing() {\n return hasForceUpdate;\n}\nfunction commitUpdateQueue(finishedWork, finishedQueue, instance) {\n // Commit the effects\n var effects = finishedQueue.effects;\n finishedQueue.effects = null;\n\n if (effects !== null) {\n for (var i = 0; i < effects.length; i++) {\n var effect = effects[i];\n var callback = effect.callback;\n\n if (callback !== null) {\n effect.callback = null;\n callCallback(callback, instance);\n }\n }\n }\n}\n\nvar ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig;\nfunction requestCurrentSuspenseConfig() {\n return ReactCurrentBatchConfig.suspense;\n}\n\nvar fakeInternalInstance = {};\nvar isArray = Array.isArray; // React.Component uses a shared frozen object by default.\n// We'll use it to determine whether we need to initialize legacy refs.\n\nvar emptyRefsObject = new React.Component().refs;\nvar didWarnAboutStateAssignmentForComponent;\nvar didWarnAboutUninitializedState;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;\nvar didWarnAboutLegacyLifecyclesAndDerivedState;\nvar didWarnAboutUndefinedDerivedState;\nvar warnOnUndefinedDerivedState;\nvar warnOnInvalidCallback;\nvar didWarnAboutDirectlyAssigningPropsToState;\nvar didWarnAboutContextTypeAndContextTypes;\nvar didWarnAboutInvalidateContextType;\n\n{\n didWarnAboutStateAssignmentForComponent = new Set();\n didWarnAboutUninitializedState = new Set();\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n didWarnAboutDirectlyAssigningPropsToState = new Set();\n didWarnAboutUndefinedDerivedState = new Set();\n didWarnAboutContextTypeAndContextTypes = new Set();\n didWarnAboutInvalidateContextType = new Set();\n var didWarnOnInvalidCallback = new Set();\n\n warnOnInvalidCallback = function (callback, callerName) {\n if (callback === null || typeof callback === 'function') {\n return;\n }\n\n var key = callerName + \"_\" + callback;\n\n if (!didWarnOnInvalidCallback.has(key)) {\n didWarnOnInvalidCallback.add(key);\n\n error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n }\n };\n\n warnOnUndefinedDerivedState = function (type, partialState) {\n if (partialState === undefined) {\n var componentName = getComponentName(type) || 'Component';\n\n if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n didWarnAboutUndefinedDerivedState.add(componentName);\n\n error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n }\n }\n }; // This is so gross but it's at least non-critical and can be removed if\n // it causes problems. This is meant to give a nicer error message for\n // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n // ...)) which otherwise throws a \"_processChildContext is not a function\"\n // exception.\n\n\n Object.defineProperty(fakeInternalInstance, '_processChildContext', {\n enumerable: false,\n value: function () {\n {\n {\n throw Error( \"_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn't supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal).\" );\n }\n }\n }\n });\n Object.freeze(fakeInternalInstance);\n}\n\nfunction applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {\n var prevState = workInProgress.memoizedState;\n\n {\n if ( workInProgress.mode & StrictMode) {\n // Invoke the function an extra time to help detect side-effects.\n getDerivedStateFromProps(nextProps, prevState);\n }\n }\n\n var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n {\n warnOnUndefinedDerivedState(ctor, partialState);\n } // Merge the partial state and the previous state.\n\n\n var memoizedState = partialState === null || partialState === undefined ? prevState : _assign({}, prevState, partialState);\n workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the\n // base state.\n\n if (workInProgress.expirationTime === NoWork) {\n // Queue is always non-null for classes\n var updateQueue = workInProgress.updateQueue;\n updateQueue.baseState = memoizedState;\n }\n}\nvar classComponentUpdater = {\n isMounted: isMounted,\n enqueueSetState: function (inst, payload, callback) {\n var fiber = get(inst);\n var currentTime = requestCurrentTimeForUpdate();\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n var update = createUpdate(expirationTime, suspenseConfig);\n update.payload = payload;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback(callback, 'setState');\n }\n\n update.callback = callback;\n }\n\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n },\n enqueueReplaceState: function (inst, payload, callback) {\n var fiber = get(inst);\n var currentTime = requestCurrentTimeForUpdate();\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n var update = createUpdate(expirationTime, suspenseConfig);\n update.tag = ReplaceState;\n update.payload = payload;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback(callback, 'replaceState');\n }\n\n update.callback = callback;\n }\n\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n },\n enqueueForceUpdate: function (inst, callback) {\n var fiber = get(inst);\n var currentTime = requestCurrentTimeForUpdate();\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n var update = createUpdate(expirationTime, suspenseConfig);\n update.tag = ForceUpdate;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback(callback, 'forceUpdate');\n }\n\n update.callback = callback;\n }\n\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n }\n};\n\nfunction checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {\n var instance = workInProgress.stateNode;\n\n if (typeof instance.shouldComponentUpdate === 'function') {\n {\n if ( workInProgress.mode & StrictMode) {\n // Invoke the function an extra time to help detect side-effects.\n instance.shouldComponentUpdate(newProps, newState, nextContext);\n }\n }\n\n startPhaseTimer(workInProgress, 'shouldComponentUpdate');\n var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n stopPhaseTimer();\n\n {\n if (shouldUpdate === undefined) {\n error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(ctor) || 'Component');\n }\n }\n\n return shouldUpdate;\n }\n\n if (ctor.prototype && ctor.prototype.isPureReactComponent) {\n return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);\n }\n\n return true;\n}\n\nfunction checkClassInstance(workInProgress, ctor, newProps) {\n var instance = workInProgress.stateNode;\n\n {\n var name = getComponentName(ctor) || 'Component';\n var renderPresent = instance.render;\n\n if (!renderPresent) {\n if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n } else {\n error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n }\n }\n\n if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {\n error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);\n }\n\n if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);\n }\n\n if (instance.propTypes) {\n error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n }\n\n if (instance.contextType) {\n error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);\n }\n\n {\n if (instance.contextTypes) {\n error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n }\n\n if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n didWarnAboutContextTypeAndContextTypes.add(ctor);\n\n error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n }\n }\n\n if (typeof instance.componentShouldUpdate === 'function') {\n error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);\n }\n\n if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(ctor) || 'A pure component');\n }\n\n if (typeof instance.componentDidUnmount === 'function') {\n error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n }\n\n if (typeof instance.componentDidReceiveProps === 'function') {\n error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);\n }\n\n if (typeof instance.componentWillRecieveProps === 'function') {\n error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n }\n\n if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {\n error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);\n }\n\n var hasMutatedProps = instance.props !== newProps;\n\n if (instance.props !== undefined && hasMutatedProps) {\n error('%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n }\n\n if (instance.defaultProps) {\n error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n\n error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentName(ctor));\n }\n\n if (typeof instance.getDerivedStateFromProps === 'function') {\n error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n }\n\n if (typeof instance.getDerivedStateFromError === 'function') {\n error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n }\n\n if (typeof ctor.getSnapshotBeforeUpdate === 'function') {\n error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);\n }\n\n var _state = instance.state;\n\n if (_state && (typeof _state !== 'object' || isArray(_state))) {\n error('%s.state: must be set to an object or null', name);\n }\n\n if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {\n error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);\n }\n }\n}\n\nfunction adoptClassInstance(workInProgress, instance) {\n instance.updater = classComponentUpdater;\n workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates\n\n set(instance, workInProgress);\n\n {\n instance._reactInternalInstance = fakeInternalInstance;\n }\n}\n\nfunction constructClassInstance(workInProgress, ctor, props) {\n var isLegacyContextConsumer = false;\n var unmaskedContext = emptyContextObject;\n var context = emptyContextObject;\n var contextType = ctor.contextType;\n\n {\n if ('contextType' in ctor) {\n var isValid = // Allow null for conditional declaration\n contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n didWarnAboutInvalidateContextType.add(ctor);\n var addendum = '';\n\n if (contextType === undefined) {\n addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n } else if (typeof contextType !== 'object') {\n addendum = ' However, it is set to a ' + typeof contextType + '.';\n } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n addendum = ' Did you accidentally pass the Context.Provider instead?';\n } else if (contextType._context !== undefined) {\n // <Context.Consumer>\n addendum = ' Did you accidentally pass the Context.Consumer instead?';\n } else {\n addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n }\n\n error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(ctor) || 'Component', addendum);\n }\n }\n }\n\n if (typeof contextType === 'object' && contextType !== null) {\n context = readContext(contextType);\n } else {\n unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n var contextTypes = ctor.contextTypes;\n isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;\n context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;\n } // Instantiate twice to help detect side-effects.\n\n\n {\n if ( workInProgress.mode & StrictMode) {\n new ctor(props, context); // eslint-disable-line no-new\n }\n }\n\n var instance = new ctor(props, context);\n var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;\n adoptClassInstance(workInProgress, instance);\n\n {\n if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {\n var componentName = getComponentName(ctor) || 'Component';\n\n if (!didWarnAboutUninitializedState.has(componentName)) {\n didWarnAboutUninitializedState.add(componentName);\n\n error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);\n }\n } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Warn about these lifecycles if they are present.\n // Don't warn about react-lifecycles-compat polyfilled methods though.\n\n\n if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n\n if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n foundWillMountName = 'componentWillMount';\n } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n\n if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n var _componentName = getComponentName(ctor) || 'Component';\n\n var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n\n if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n\n error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://fb.me/react-unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? \"\\n \" + foundWillMountName : '', foundWillReceivePropsName !== null ? \"\\n \" + foundWillReceivePropsName : '', foundWillUpdateName !== null ? \"\\n \" + foundWillUpdateName : '');\n }\n }\n }\n } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // ReactFiberContext usually updates this cache but can't for newly-created instances.\n\n\n if (isLegacyContextConsumer) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return instance;\n}\n\nfunction callComponentWillMount(workInProgress, instance) {\n startPhaseTimer(workInProgress, 'componentWillMount');\n var oldState = instance.state;\n\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n\n stopPhaseTimer();\n\n if (oldState !== instance.state) {\n {\n error('%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentName(workInProgress.type) || 'Component');\n }\n\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n}\n\nfunction callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {\n var oldState = instance.state;\n startPhaseTimer(workInProgress, 'componentWillReceiveProps');\n\n if (typeof instance.componentWillReceiveProps === 'function') {\n instance.componentWillReceiveProps(newProps, nextContext);\n }\n\n if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n }\n\n stopPhaseTimer();\n\n if (instance.state !== oldState) {\n {\n var componentName = getComponentName(workInProgress.type) || 'Component';\n\n if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {\n didWarnAboutStateAssignmentForComponent.add(componentName);\n\n error('%s.componentWillReceiveProps(): Assigning directly to ' + \"this.state is deprecated (except inside a component's \" + 'constructor). Use setState instead.', componentName);\n }\n }\n\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n} // Invokes the mount life-cycles on a previously never rendered instance.\n\n\nfunction mountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n {\n checkClassInstance(workInProgress, ctor, newProps);\n }\n\n var instance = workInProgress.stateNode;\n instance.props = newProps;\n instance.state = workInProgress.memoizedState;\n instance.refs = emptyRefsObject;\n initializeUpdateQueue(workInProgress);\n var contextType = ctor.contextType;\n\n if (typeof contextType === 'object' && contextType !== null) {\n instance.context = readContext(contextType);\n } else {\n var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n instance.context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n {\n if (instance.state === newProps) {\n var componentName = getComponentName(ctor) || 'Component';\n\n if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n\n error('%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n }\n }\n\n if (workInProgress.mode & StrictMode) {\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);\n }\n\n {\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);\n }\n }\n\n processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n instance.state = workInProgress.memoizedState;\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n instance.state = workInProgress.memoizedState;\n } // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n\n if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's\n // process them now.\n\n processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n instance.state = workInProgress.memoizedState;\n }\n\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n}\n\nfunction resumeMountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n var instance = workInProgress.stateNode;\n var oldProps = workInProgress.memoizedProps;\n instance.props = oldProps;\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = emptyContextObject;\n\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (oldProps !== newProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n newState = workInProgress.memoizedState;\n\n if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n startPhaseTimer(workInProgress, 'componentWillMount');\n\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n\n stopPhaseTimer();\n }\n\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n } // If shouldComponentUpdate returned false, we should still update the\n // memoized state to indicate that this work can be reused.\n\n\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n } // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n\n\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n return shouldUpdate;\n} // Invokes the update life-cycles and returns false if it shouldn't rerender.\n\n\nfunction updateClassInstance(current, workInProgress, ctor, newProps, renderExpirationTime) {\n var instance = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n var oldProps = workInProgress.memoizedProps;\n instance.props = workInProgress.type === workInProgress.elementType ? oldProps : resolveDefaultProps(workInProgress.type, oldProps);\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = emptyContextObject;\n\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (oldProps !== newProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n newState = workInProgress.memoizedState;\n\n if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Update;\n }\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Snapshot;\n }\n }\n\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {\n startPhaseTimer(workInProgress, 'componentWillUpdate');\n\n if (typeof instance.componentWillUpdate === 'function') {\n instance.componentWillUpdate(newProps, newState, nextContext);\n }\n\n if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);\n }\n\n stopPhaseTimer();\n }\n\n if (typeof instance.componentDidUpdate === 'function') {\n workInProgress.effectTag |= Update;\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n workInProgress.effectTag |= Snapshot;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Update;\n }\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Snapshot;\n }\n } // If shouldComponentUpdate returned false, we should still update the\n // memoized props/state to indicate that this work can be reused.\n\n\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n } // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n\n\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n return shouldUpdate;\n}\n\nvar didWarnAboutMaps;\nvar didWarnAboutGenerators;\nvar didWarnAboutStringRefs;\nvar ownerHasKeyUseWarning;\nvar ownerHasFunctionTypeWarning;\n\nvar warnForMissingKey = function (child) {};\n\n{\n didWarnAboutMaps = false;\n didWarnAboutGenerators = false;\n didWarnAboutStringRefs = {};\n /**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n ownerHasKeyUseWarning = {};\n ownerHasFunctionTypeWarning = {};\n\n warnForMissingKey = function (child) {\n if (child === null || typeof child !== 'object') {\n return;\n }\n\n if (!child._store || child._store.validated || child.key != null) {\n return;\n }\n\n if (!(typeof child._store === 'object')) {\n {\n throw Error( \"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n child._store.validated = true;\n var currentComponentErrorInfo = 'Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.' + getCurrentFiberStackInDev();\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n error('Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.');\n };\n}\n\nvar isArray$1 = Array.isArray;\n\nfunction coerceRef(returnFiber, current, element) {\n var mixedRef = element.ref;\n\n if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {\n {\n // TODO: Clean this up once we turn on the string ref warning for\n // everyone, because the strict mode case will no longer be relevant\n if ((returnFiber.mode & StrictMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs\n // because these cannot be automatically converted to an arrow function\n // using a codemod. Therefore, we don't have to warn about string refs again.\n !(element._owner && element._self && element._owner.stateNode !== element._self)) {\n var componentName = getComponentName(returnFiber.type) || 'Component';\n\n if (!didWarnAboutStringRefs[componentName]) {\n {\n error('A string ref, \"%s\", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref%s', mixedRef, getStackByFiberInDevAndProd(returnFiber));\n }\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n\n if (element._owner) {\n var owner = element._owner;\n var inst;\n\n if (owner) {\n var ownerFiber = owner;\n\n if (!(ownerFiber.tag === ClassComponent)) {\n {\n throw Error( \"Function components cannot have string refs. We recommend using useRef() instead. Learn more about using refs safely here: https://fb.me/react-strict-mode-string-ref\" );\n }\n }\n\n inst = ownerFiber.stateNode;\n }\n\n if (!inst) {\n {\n throw Error( \"Missing owner for string ref \" + mixedRef + \". This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref\n\n if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {\n return current.ref;\n }\n\n var ref = function (value) {\n var refs = inst.refs;\n\n if (refs === emptyRefsObject) {\n // This is a lazy pooled frozen object, so we need to initialize.\n refs = inst.refs = {};\n }\n\n if (value === null) {\n delete refs[stringRef];\n } else {\n refs[stringRef] = value;\n }\n };\n\n ref._stringRef = stringRef;\n return ref;\n } else {\n if (!(typeof mixedRef === 'string')) {\n {\n throw Error( \"Expected ref to be a function, a string, an object returned by React.createRef(), or null.\" );\n }\n }\n\n if (!element._owner) {\n {\n throw Error( \"Element ref was specified as a string (\" + mixedRef + \") but no owner was set. This could happen for one of the following reasons:\\n1. You may be adding a ref to a function component\\n2. You may be adding a ref to a component that was not created inside a component's render method\\n3. You have multiple copies of React loaded\\nSee https://fb.me/react-refs-must-have-owner for more information.\" );\n }\n }\n }\n }\n\n return mixedRef;\n}\n\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n if (returnFiber.type !== 'textarea') {\n var addendum = '';\n\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + getCurrentFiberStackInDev();\n }\n\n {\n {\n throw Error( \"Objects are not valid as a React child (found: \" + (Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild) + \").\" + addendum );\n }\n }\n }\n}\n\nfunction warnOnFunctionType() {\n {\n var currentComponentErrorInfo = 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.' + getCurrentFiberStackInDev();\n\n if (ownerHasFunctionTypeWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasFunctionTypeWarning[currentComponentErrorInfo] = true;\n\n error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n }\n} // This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\n\n\nfunction ChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return;\n } // Deletions are added in reversed order so we add it to the front.\n // At this point, the return fiber's effect list is empty except for\n // deletions, so we can just append the deletion to the list. The remaining\n // effects aren't added until the complete phase. Once we implement\n // resuming, this may not be true.\n\n\n var last = returnFiber.lastEffect;\n\n if (last !== null) {\n last.nextEffect = childToDelete;\n returnFiber.lastEffect = childToDelete;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n }\n\n childToDelete.nextEffect = null;\n childToDelete.effectTag = Deletion;\n }\n\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return null;\n } // TODO: For the shouldClone case, this could be micro-optimized a bit by\n // assuming that after the first child we've already added everything.\n\n\n var childToDelete = currentFirstChild;\n\n while (childToDelete !== null) {\n deleteChild(returnFiber, childToDelete);\n childToDelete = childToDelete.sibling;\n }\n\n return null;\n }\n\n function mapRemainingChildren(returnFiber, currentFirstChild) {\n // Add the remaining children to a temporary map so that we can find them by\n // keys quickly. Implicit (null) keys get added to this set with their index\n // instead.\n var existingChildren = new Map();\n var existingChild = currentFirstChild;\n\n while (existingChild !== null) {\n if (existingChild.key !== null) {\n existingChildren.set(existingChild.key, existingChild);\n } else {\n existingChildren.set(existingChild.index, existingChild);\n }\n\n existingChild = existingChild.sibling;\n }\n\n return existingChildren;\n }\n\n function useFiber(fiber, pendingProps) {\n // We currently set sibling to null and index to 0 here because it is easy\n // to forget to do before returning it. E.g. for the single child case.\n var clone = createWorkInProgress(fiber, pendingProps);\n clone.index = 0;\n clone.sibling = null;\n return clone;\n }\n\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n\n if (!shouldTrackSideEffects) {\n // Noop.\n return lastPlacedIndex;\n }\n\n var current = newFiber.alternate;\n\n if (current !== null) {\n var oldIndex = current.index;\n\n if (oldIndex < lastPlacedIndex) {\n // This is a move.\n newFiber.effectTag = Placement;\n return lastPlacedIndex;\n } else {\n // This item can stay in place.\n return oldIndex;\n }\n } else {\n // This is an insertion.\n newFiber.effectTag = Placement;\n return lastPlacedIndex;\n }\n }\n\n function placeSingleChild(newFiber) {\n // This is simpler for the single child case. We only need to do a\n // placement for inserting new children.\n if (shouldTrackSideEffects && newFiber.alternate === null) {\n newFiber.effectTag = Placement;\n }\n\n return newFiber;\n }\n\n function updateTextNode(returnFiber, current, textContent, expirationTime) {\n if (current === null || current.tag !== HostText) {\n // Insert\n var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, textContent);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateElement(returnFiber, current, element, expirationTime) {\n if (current !== null) {\n if (current.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(current, element) )) {\n // Move based on index\n var existing = useFiber(current, element.props);\n existing.ref = coerceRef(returnFiber, current, element);\n existing.return = returnFiber;\n\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n\n return existing;\n }\n } // Insert\n\n\n var created = createFiberFromElement(element, returnFiber.mode, expirationTime);\n created.ref = coerceRef(returnFiber, current, element);\n created.return = returnFiber;\n return created;\n }\n\n function updatePortal(returnFiber, current, portal, expirationTime) {\n if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {\n // Insert\n var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, portal.children || []);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateFragment(returnFiber, current, fragment, expirationTime, key) {\n if (current === null || current.tag !== Fragment) {\n // Insert\n var created = createFiberFromFragment(fragment, returnFiber.mode, expirationTime, key);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, fragment);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function createChild(returnFiber, newChild, expirationTime) {\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n var created = createFiberFromText('' + newChild, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _created = createFiberFromElement(newChild, returnFiber.mode, expirationTime);\n\n _created.ref = coerceRef(returnFiber, null, newChild);\n _created.return = returnFiber;\n return _created;\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _created2 = createFiberFromPortal(newChild, returnFiber.mode, expirationTime);\n\n _created2.return = returnFiber;\n return _created2;\n }\n }\n\n if (isArray$1(newChild) || getIteratorFn(newChild)) {\n var _created3 = createFiberFromFragment(newChild, returnFiber.mode, expirationTime, null);\n\n _created3.return = returnFiber;\n return _created3;\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n function updateSlot(returnFiber, oldFiber, newChild, expirationTime) {\n // Update the fiber if the keys match, otherwise return null.\n var key = oldFiber !== null ? oldFiber.key : null;\n\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n if (key !== null) {\n return null;\n }\n\n return updateTextNode(returnFiber, oldFiber, '' + newChild, expirationTime);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n if (newChild.key === key) {\n if (newChild.type === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, oldFiber, newChild.props.children, expirationTime, key);\n }\n\n return updateElement(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n\n case REACT_PORTAL_TYPE:\n {\n if (newChild.key === key) {\n return updatePortal(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n }\n\n if (isArray$1(newChild) || getIteratorFn(newChild)) {\n if (key !== null) {\n return null;\n }\n\n return updateFragment(returnFiber, oldFiber, newChild, expirationTime, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n function updateFromMap(existingChildren, returnFiber, newIdx, newChild, expirationTime) {\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys, so we neither have to check the old nor\n // new node for the key. If both are text nodes, they match.\n var matchedFiber = existingChildren.get(newIdx) || null;\n return updateTextNode(returnFiber, matchedFiber, '' + newChild, expirationTime);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n if (newChild.type === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, _matchedFiber, newChild.props.children, expirationTime, newChild.key);\n }\n\n return updateElement(returnFiber, _matchedFiber, newChild, expirationTime);\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n return updatePortal(returnFiber, _matchedFiber2, newChild, expirationTime);\n }\n }\n\n if (isArray$1(newChild) || getIteratorFn(newChild)) {\n var _matchedFiber3 = existingChildren.get(newIdx) || null;\n\n return updateFragment(returnFiber, _matchedFiber3, newChild, expirationTime, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n /**\n * Warns if there is a duplicate or missing key\n */\n\n\n function warnOnInvalidKey(child, knownKeys) {\n {\n if (typeof child !== 'object' || child === null) {\n return knownKeys;\n }\n\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(child);\n var key = child.key;\n\n if (typeof key !== 'string') {\n break;\n }\n\n if (knownKeys === null) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n\n error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);\n\n break;\n }\n }\n\n return knownKeys;\n }\n\n function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, expirationTime) {\n // This algorithm can't optimize by searching from both ends since we\n // don't have backpointers on fibers. I'm trying to see how far we can get\n // with that model. If it ends up not being worth the tradeoffs, we can\n // add it later.\n // Even with a two ended optimization, we'd want to optimize for the case\n // where there are few changes and brute force the comparison instead of\n // going for the Map. It'd like to explore hitting that path first in\n // forward-only mode and only go for the Map once we notice that we need\n // lots of look ahead. This doesn't handle reversal as well as two ended\n // search but that's unusual. Besides, for the two ended optimization to\n // work on Iterables, we'd need to copy the whole set.\n // In this first iteration, we'll just live with hitting the bad case\n // (adding everything to a Map) in for every insert/move.\n // If you change this code, also update reconcileChildrenIterator() which\n // uses the same algorithm.\n {\n // First, validate keys.\n var knownKeys = null;\n\n for (var i = 0; i < newChildren.length; i++) {\n var child = newChildren[i];\n knownKeys = warnOnInvalidKey(child, knownKeys);\n }\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n\n for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n\n var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], expirationTime);\n\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n\n break;\n }\n\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (newIdx === newChildren.length) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber = createChild(returnFiber, newChildren[newIdx], expirationTime);\n\n if (_newFiber === null) {\n continue;\n }\n\n lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber;\n } else {\n previousNewFiber.sibling = _newFiber;\n }\n\n previousNewFiber = _newFiber;\n }\n\n return resultingFirstChild;\n } // Add all children to a key map for quick lookups.\n\n\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], expirationTime);\n\n if (_newFiber2 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber2.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);\n }\n }\n\n lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber2;\n } else {\n previousNewFiber.sibling = _newFiber2;\n }\n\n previousNewFiber = _newFiber2;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n return resultingFirstChild;\n }\n\n function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, expirationTime) {\n // This is the same implementation as reconcileChildrenArray(),\n // but using the iterator instead.\n var iteratorFn = getIteratorFn(newChildrenIterable);\n\n if (!(typeof iteratorFn === 'function')) {\n {\n throw Error( \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n {\n // We don't support rendering Generators because it's a mutation.\n // See https://github.com/facebook/react/issues/12995\n if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag\n newChildrenIterable[Symbol.toStringTag] === 'Generator') {\n if (!didWarnAboutGenerators) {\n error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');\n }\n\n didWarnAboutGenerators = true;\n } // Warn about using Maps as children\n\n\n if (newChildrenIterable.entries === iteratorFn) {\n if (!didWarnAboutMaps) {\n error('Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.');\n }\n\n didWarnAboutMaps = true;\n } // First, validate keys.\n // We'll get a different iterator later for the main pass.\n\n\n var _newChildren = iteratorFn.call(newChildrenIterable);\n\n if (_newChildren) {\n var knownKeys = null;\n\n var _step = _newChildren.next();\n\n for (; !_step.done; _step = _newChildren.next()) {\n var child = _step.value;\n knownKeys = warnOnInvalidKey(child, knownKeys);\n }\n }\n }\n\n var newChildren = iteratorFn.call(newChildrenIterable);\n\n if (!(newChildren != null)) {\n {\n throw Error( \"An iterable object provided no iterator.\" );\n }\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n var step = newChildren.next();\n\n for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, expirationTime);\n\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n\n break;\n }\n\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (step.done) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber3 = createChild(returnFiber, step.value, expirationTime);\n\n if (_newFiber3 === null) {\n continue;\n }\n\n lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber3;\n } else {\n previousNewFiber.sibling = _newFiber3;\n }\n\n previousNewFiber = _newFiber3;\n }\n\n return resultingFirstChild;\n } // Add all children to a key map for quick lookups.\n\n\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, expirationTime);\n\n if (_newFiber4 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber4.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);\n }\n }\n\n lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber4;\n } else {\n previousNewFiber.sibling = _newFiber4;\n }\n\n previousNewFiber = _newFiber4;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n return resultingFirstChild;\n }\n\n function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, expirationTime) {\n // There's no need to check for keys on text nodes since we don't have a\n // way to define them.\n if (currentFirstChild !== null && currentFirstChild.tag === HostText) {\n // We already have an existing node so let's just update it and delete\n // the rest.\n deleteRemainingChildren(returnFiber, currentFirstChild.sibling);\n var existing = useFiber(currentFirstChild, textContent);\n existing.return = returnFiber;\n return existing;\n } // The existing first child is not a text node so we need to create one\n // and delete the existing ones.\n\n\n deleteRemainingChildren(returnFiber, currentFirstChild);\n var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n }\n\n function reconcileSingleElement(returnFiber, currentFirstChild, element, expirationTime) {\n var key = element.key;\n var child = currentFirstChild;\n\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n switch (child.tag) {\n case Fragment:\n {\n if (element.type === REACT_FRAGMENT_TYPE) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, element.props.children);\n existing.return = returnFiber;\n\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n\n return existing;\n }\n\n break;\n }\n\n case Block:\n\n // We intentionally fallthrough here if enableBlocksAPI is not on.\n // eslint-disable-next-lined no-fallthrough\n\n default:\n {\n if (child.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(child, element) )) {\n deleteRemainingChildren(returnFiber, child.sibling);\n\n var _existing3 = useFiber(child, element.props);\n\n _existing3.ref = coerceRef(returnFiber, child, element);\n _existing3.return = returnFiber;\n\n {\n _existing3._debugSource = element._source;\n _existing3._debugOwner = element._owner;\n }\n\n return _existing3;\n }\n\n break;\n }\n } // Didn't match.\n\n\n deleteRemainingChildren(returnFiber, child);\n break;\n } else {\n deleteChild(returnFiber, child);\n }\n\n child = child.sibling;\n }\n\n if (element.type === REACT_FRAGMENT_TYPE) {\n var created = createFiberFromFragment(element.props.children, returnFiber.mode, expirationTime, element.key);\n created.return = returnFiber;\n return created;\n } else {\n var _created4 = createFiberFromElement(element, returnFiber.mode, expirationTime);\n\n _created4.ref = coerceRef(returnFiber, currentFirstChild, element);\n _created4.return = returnFiber;\n return _created4;\n }\n }\n\n function reconcileSinglePortal(returnFiber, currentFirstChild, portal, expirationTime) {\n var key = portal.key;\n var child = currentFirstChild;\n\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, portal.children || []);\n existing.return = returnFiber;\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n break;\n }\n } else {\n deleteChild(returnFiber, child);\n }\n\n child = child.sibling;\n }\n\n var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n } // This API will tag the children with the side-effect of the reconciliation\n // itself. They will be added to the side-effect list as we pass through the\n // children and the parent.\n\n\n function reconcileChildFibers(returnFiber, currentFirstChild, newChild, expirationTime) {\n // This function is not recursive.\n // If the top level item is an array, we treat it as a set of children,\n // not as a fragment. Nested arrays on the other hand will be treated as\n // fragment nodes. Recursion happens at the normal flow.\n // Handle top level unkeyed fragments as if they were arrays.\n // This leads to an ambiguity between <>{[...]}</> and <>...</>.\n // We treat the ambiguous cases above the same.\n var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;\n\n if (isUnkeyedTopLevelFragment) {\n newChild = newChild.props.children;\n } // Handle object types\n\n\n var isObject = typeof newChild === 'object' && newChild !== null;\n\n if (isObject) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, expirationTime));\n\n case REACT_PORTAL_TYPE:\n return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, expirationTime));\n }\n }\n\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, expirationTime));\n }\n\n if (isArray$1(newChild)) {\n return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, expirationTime);\n }\n\n if (getIteratorFn(newChild)) {\n return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, expirationTime);\n }\n\n if (isObject) {\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n if (typeof newChild === 'undefined' && !isUnkeyedTopLevelFragment) {\n // If the new child is undefined, and the return fiber is a composite\n // component, throw an error. If Fiber return types are disabled,\n // we already threw above.\n switch (returnFiber.tag) {\n case ClassComponent:\n {\n {\n var instance = returnFiber.stateNode;\n\n if (instance.render._isMockFunction) {\n // We allow auto-mocks to proceed as if they're returning null.\n break;\n }\n }\n }\n // Intentionally fall through to the next case, which handles both\n // functions and classes\n // eslint-disable-next-lined no-fallthrough\n\n case FunctionComponent:\n {\n var Component = returnFiber.type;\n\n {\n {\n throw Error( (Component.displayName || Component.name || 'Component') + \"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.\" );\n }\n }\n }\n }\n } // Remaining cases are all treated as empty.\n\n\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n\n return reconcileChildFibers;\n}\n\nvar reconcileChildFibers = ChildReconciler(true);\nvar mountChildFibers = ChildReconciler(false);\nfunction cloneChildFibers(current, workInProgress) {\n if (!(current === null || workInProgress.child === current.child)) {\n {\n throw Error( \"Resuming work not yet implemented.\" );\n }\n }\n\n if (workInProgress.child === null) {\n return;\n }\n\n var currentChild = workInProgress.child;\n var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);\n workInProgress.child = newChild;\n newChild.return = workInProgress;\n\n while (currentChild.sibling !== null) {\n currentChild = currentChild.sibling;\n newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);\n newChild.return = workInProgress;\n }\n\n newChild.sibling = null;\n} // Reset a workInProgress child set to prepare it for a second pass.\n\nfunction resetChildFibers(workInProgress, renderExpirationTime) {\n var child = workInProgress.child;\n\n while (child !== null) {\n resetWorkInProgress(child, renderExpirationTime);\n child = child.sibling;\n }\n}\n\nvar NO_CONTEXT = {};\nvar contextStackCursor$1 = createCursor(NO_CONTEXT);\nvar contextFiberStackCursor = createCursor(NO_CONTEXT);\nvar rootInstanceStackCursor = createCursor(NO_CONTEXT);\n\nfunction requiredContext(c) {\n if (!(c !== NO_CONTEXT)) {\n {\n throw Error( \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n return c;\n}\n\nfunction getRootHostContainer() {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n return rootInstance;\n}\n\nfunction pushHostContainer(fiber, nextRootInstance) {\n // Push current root instance onto the stack;\n // This allows us to reset root when portals are popped.\n push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n\n push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.\n // However, we can't just call getRootHostContext() and push it because\n // we'd have a different number of entries on the stack depending on\n // whether getRootHostContext() throws somewhere in renderer code or not.\n // So we push an empty value first. This lets us safely unwind on errors.\n\n push(contextStackCursor$1, NO_CONTEXT, fiber);\n var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.\n\n pop(contextStackCursor$1, fiber);\n push(contextStackCursor$1, nextRootContext, fiber);\n}\n\nfunction popHostContainer(fiber) {\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n}\n\nfunction getHostContext() {\n var context = requiredContext(contextStackCursor$1.current);\n return context;\n}\n\nfunction pushHostContext(fiber) {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n var context = requiredContext(contextStackCursor$1.current);\n var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.\n\n if (context === nextContext) {\n return;\n } // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n\n\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor$1, nextContext, fiber);\n}\n\nfunction popHostContext(fiber) {\n // Do not pop unless this Fiber provided the current context.\n // pushHostContext() only pushes Fibers that provide unique contexts.\n if (contextFiberStackCursor.current !== fiber) {\n return;\n }\n\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n}\n\nvar DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is\n// inherited deeply down the subtree. The upper bits only affect\n// this immediate suspense boundary and gets reset each new\n// boundary or suspense list.\n\nvar SubtreeSuspenseContextMask = 1; // Subtree Flags:\n// InvisibleParentSuspenseContext indicates that one of our parent Suspense\n// boundaries is not currently showing visible main content.\n// Either because it is already showing a fallback or is not mounted at all.\n// We can use this to determine if it is desirable to trigger a fallback at\n// the parent. If not, then we might need to trigger undesirable boundaries\n// and/or suspend the commit to avoid hiding the parent content.\n\nvar InvisibleParentSuspenseContext = 1; // Shallow Flags:\n// ForceSuspenseFallback can be used by SuspenseList to force newly added\n// items into their fallback state during one of the render passes.\n\nvar ForceSuspenseFallback = 2;\nvar suspenseStackCursor = createCursor(DefaultSuspenseContext);\nfunction hasSuspenseContext(parentContext, flag) {\n return (parentContext & flag) !== 0;\n}\nfunction setDefaultShallowSuspenseContext(parentContext) {\n return parentContext & SubtreeSuspenseContextMask;\n}\nfunction setShallowSuspenseContext(parentContext, shallowContext) {\n return parentContext & SubtreeSuspenseContextMask | shallowContext;\n}\nfunction addSubtreeSuspenseContext(parentContext, subtreeContext) {\n return parentContext | subtreeContext;\n}\nfunction pushSuspenseContext(fiber, newContext) {\n push(suspenseStackCursor, newContext, fiber);\n}\nfunction popSuspenseContext(fiber) {\n pop(suspenseStackCursor, fiber);\n}\n\nfunction shouldCaptureSuspense(workInProgress, hasInvisibleParent) {\n // If it was the primary children that just suspended, capture and render the\n // fallback. Otherwise, don't capture and bubble to the next boundary.\n var nextState = workInProgress.memoizedState;\n\n if (nextState !== null) {\n if (nextState.dehydrated !== null) {\n // A dehydrated boundary always captures.\n return true;\n }\n\n return false;\n }\n\n var props = workInProgress.memoizedProps; // In order to capture, the Suspense component must have a fallback prop.\n\n if (props.fallback === undefined) {\n return false;\n } // Regular boundaries always capture.\n\n\n if (props.unstable_avoidThisFallback !== true) {\n return true;\n } // If it's a boundary we should avoid, then we prefer to bubble up to the\n // parent boundary if it is currently invisible.\n\n\n if (hasInvisibleParent) {\n return false;\n } // If the parent is not able to handle it, we must handle it.\n\n\n return true;\n}\nfunction findFirstSuspended(row) {\n var node = row;\n\n while (node !== null) {\n if (node.tag === SuspenseComponent) {\n var state = node.memoizedState;\n\n if (state !== null) {\n var dehydrated = state.dehydrated;\n\n if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {\n return node;\n }\n }\n } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't\n // keep track of whether it suspended or not.\n node.memoizedProps.revealOrder !== undefined) {\n var didSuspend = (node.effectTag & DidCapture) !== NoEffect;\n\n if (didSuspend) {\n return node;\n }\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === row) {\n return null;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === row) {\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n\n return null;\n}\n\nfunction createDeprecatedResponderListener(responder, props) {\n var eventResponderListener = {\n responder: responder,\n props: props\n };\n\n {\n Object.freeze(eventResponderListener);\n }\n\n return eventResponderListener;\n}\n\nvar HasEffect =\n/* */\n1; // Represents the phase in which the effect (not the clean-up) fires.\n\nvar Layout =\n/* */\n2;\nvar Passive$1 =\n/* */\n4;\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar didWarnAboutMismatchedHooksForComponent;\n\n{\n didWarnAboutMismatchedHooksForComponent = new Set();\n}\n\n// These are set right before calling the component.\nvar renderExpirationTime = NoWork; // The work-in-progress fiber. I've named it differently to distinguish it from\n// the work-in-progress hook.\n\nvar currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The\n// current hook list is the list that belongs to the current fiber. The\n// work-in-progress hook list is a new list that will be added to the\n// work-in-progress fiber.\n\nvar currentHook = null;\nvar workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This\n// does not get reset if we do another render pass; only when we're completely\n// finished evaluating this component. This is an optimization so we know\n// whether we need to clear render phase updates after a throw.\n\nvar didScheduleRenderPhaseUpdate = false;\nvar RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook\n\nvar currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.\n// The list stores the order of hooks used during the initial render (mount).\n// Subsequent renders (updates) reference this list.\n\nvar hookTypesDev = null;\nvar hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore\n// the dependencies for Hooks that need them (e.g. useEffect or useMemo).\n// When true, such Hooks will always be \"remounted\". Only used during hot reload.\n\nvar ignorePreviousDependencies = false;\n\nfunction mountHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev === null) {\n hookTypesDev = [hookName];\n } else {\n hookTypesDev.push(hookName);\n }\n }\n}\n\nfunction updateHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev !== null) {\n hookTypesUpdateIndexDev++;\n\n if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {\n warnOnHookMismatchInDev(hookName);\n }\n }\n }\n}\n\nfunction checkDepsAreArrayDev(deps) {\n {\n if (deps !== undefined && deps !== null && !Array.isArray(deps)) {\n // Verify deps, but only on mount to avoid extra checks.\n // It's unlikely their type would change as usually you define them inline.\n error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);\n }\n }\n}\n\nfunction warnOnHookMismatchInDev(currentHookName) {\n {\n var componentName = getComponentName(currentlyRenderingFiber$1.type);\n\n if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {\n didWarnAboutMismatchedHooksForComponent.add(componentName);\n\n if (hookTypesDev !== null) {\n var table = '';\n var secondColumnStart = 30;\n\n for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {\n var oldHookName = hookTypesDev[i];\n var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;\n var row = i + 1 + \". \" + oldHookName; // Extra space so second column lines up\n // lol @ IE not supporting String#repeat\n\n while (row.length < secondColumnStart) {\n row += ' ';\n }\n\n row += newHookName + '\\n';\n table += row;\n }\n\n error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://fb.me/rules-of-hooks\\n\\n' + ' Previous render Next render\\n' + ' ------------------------------------------------------\\n' + '%s' + ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n', componentName, table);\n }\n }\n }\n}\n\nfunction throwInvalidHookError() {\n {\n {\n throw Error( \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.\" );\n }\n }\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n {\n if (ignorePreviousDependencies) {\n // Only true when this component is being hot reloaded.\n return false;\n }\n }\n\n if (prevDeps === null) {\n {\n error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n }\n\n return false;\n }\n\n {\n // Don't bother comparing lengths in prod because these arrays should be\n // passed inline.\n if (nextDeps.length !== prevDeps.length) {\n error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, \"[\" + prevDeps.join(', ') + \"]\", \"[\" + nextDeps.join(', ') + \"]\");\n }\n }\n\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n if (objectIs(nextDeps[i], prevDeps[i])) {\n continue;\n }\n\n return false;\n }\n\n return true;\n}\n\nfunction renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderExpirationTime) {\n renderExpirationTime = nextRenderExpirationTime;\n currentlyRenderingFiber$1 = workInProgress;\n\n {\n hookTypesDev = current !== null ? current._debugHookTypes : null;\n hookTypesUpdateIndexDev = -1; // Used for hot reloading:\n\n ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;\n }\n\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.expirationTime = NoWork; // The following should have already been reset\n // currentHook = null;\n // workInProgressHook = null;\n // didScheduleRenderPhaseUpdate = false;\n // TODO Warn if no hooks are used at all during mount, then some are used during update.\n // Currently we will identify the update render as a mount because memoizedState === null.\n // This is tricky because it's valid for certain types of components (e.g. React.lazy)\n // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.\n // Non-stateful hooks (e.g. context) don't get added to memoizedState,\n // so memoizedState would be null during updates and mounts.\n\n {\n if (current !== null && current.memoizedState !== null) {\n ReactCurrentDispatcher.current = HooksDispatcherOnUpdateInDEV;\n } else if (hookTypesDev !== null) {\n // This dispatcher handles an edge case where a component is updating,\n // but no stateful hooks have been used.\n // We want to match the production code behavior (which will use HooksDispatcherOnMount),\n // but with the extra DEV validation to ensure hooks ordering hasn't changed.\n // This dispatcher does that.\n ReactCurrentDispatcher.current = HooksDispatcherOnMountWithHookTypesInDEV;\n } else {\n ReactCurrentDispatcher.current = HooksDispatcherOnMountInDEV;\n }\n }\n\n var children = Component(props, secondArg); // Check if there was a render phase update\n\n if (workInProgress.expirationTime === renderExpirationTime) {\n // Keep rendering in a loop for as long as render phase updates continue to\n // be scheduled. Use a counter to prevent infinite loops.\n var numberOfReRenders = 0;\n\n do {\n workInProgress.expirationTime = NoWork;\n\n if (!(numberOfReRenders < RE_RENDER_LIMIT)) {\n {\n throw Error( \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\" );\n }\n }\n\n numberOfReRenders += 1;\n\n {\n // Even when hot reloading, allow dependencies to stabilize\n // after first render to prevent infinite render phase updates.\n ignorePreviousDependencies = false;\n } // Start over from the beginning of the list\n\n\n currentHook = null;\n workInProgressHook = null;\n workInProgress.updateQueue = null;\n\n {\n // Also validate hook order for cascading updates.\n hookTypesUpdateIndexDev = -1;\n }\n\n ReactCurrentDispatcher.current = HooksDispatcherOnRerenderInDEV ;\n children = Component(props, secondArg);\n } while (workInProgress.expirationTime === renderExpirationTime);\n } // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrancy.\n\n\n ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n {\n workInProgress._debugHookTypes = hookTypesDev;\n } // This check uses currentHook so that it works the same in DEV and prod bundles.\n // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.\n\n\n var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;\n renderExpirationTime = NoWork;\n currentlyRenderingFiber$1 = null;\n currentHook = null;\n workInProgressHook = null;\n\n {\n currentHookNameInDev = null;\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1;\n }\n\n didScheduleRenderPhaseUpdate = false;\n\n if (!!didRenderTooFewHooks) {\n {\n throw Error( \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\" );\n }\n }\n\n return children;\n}\nfunction bailoutHooks(current, workInProgress, expirationTime) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.effectTag &= ~(Passive | Update);\n\n if (current.expirationTime <= expirationTime) {\n current.expirationTime = NoWork;\n }\n}\nfunction resetHooksAfterThrow() {\n // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrancy.\n ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n if (didScheduleRenderPhaseUpdate) {\n // There were render phase updates. These are only valid for this render\n // phase, which we are now aborting. Remove the updates from the queues so\n // they do not persist to the next render. Do not remove updates from hooks\n // that weren't processed.\n //\n // Only reset the updates from the queue if it has a clone. If it does\n // not have a clone, that means it wasn't processed, and the updates were\n // scheduled before we entered the render phase.\n var hook = currentlyRenderingFiber$1.memoizedState;\n\n while (hook !== null) {\n var queue = hook.queue;\n\n if (queue !== null) {\n queue.pending = null;\n }\n\n hook = hook.next;\n }\n }\n\n renderExpirationTime = NoWork;\n currentlyRenderingFiber$1 = null;\n currentHook = null;\n workInProgressHook = null;\n\n {\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1;\n currentHookNameInDev = null;\n }\n\n didScheduleRenderPhaseUpdate = false;\n}\n\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list\n currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;\n } else {\n // Append to the end of the list\n workInProgressHook = workInProgressHook.next = hook;\n }\n\n return workInProgressHook;\n}\n\nfunction updateWorkInProgressHook() {\n // This function is used both for updates and for re-renders triggered by a\n // render phase update. It assumes there is either a current hook we can\n // clone, or a work-in-progress hook from a previous render pass that we can\n // use as a base. When we reach the end of the base list, we must switch to\n // the dispatcher used for mounts.\n var nextCurrentHook;\n\n if (currentHook === null) {\n var current = currentlyRenderingFiber$1.alternate;\n\n if (current !== null) {\n nextCurrentHook = current.memoizedState;\n } else {\n nextCurrentHook = null;\n }\n } else {\n nextCurrentHook = currentHook.next;\n }\n\n var nextWorkInProgressHook;\n\n if (workInProgressHook === null) {\n nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;\n } else {\n nextWorkInProgressHook = workInProgressHook.next;\n }\n\n if (nextWorkInProgressHook !== null) {\n // There's already a work-in-progress. Reuse it.\n workInProgressHook = nextWorkInProgressHook;\n nextWorkInProgressHook = workInProgressHook.next;\n currentHook = nextCurrentHook;\n } else {\n // Clone from the current hook.\n if (!(nextCurrentHook !== null)) {\n {\n throw Error( \"Rendered more hooks than during the previous render.\" );\n }\n }\n\n currentHook = nextCurrentHook;\n var newHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list.\n currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;\n } else {\n // Append to the end of the list.\n workInProgressHook = workInProgressHook.next = newHook;\n }\n }\n\n return workInProgressHook;\n}\n\nfunction createFunctionComponentUpdateQueue() {\n return {\n lastEffect: null\n };\n}\n\nfunction basicStateReducer(state, action) {\n // $FlowFixMe: Flow doesn't like mixed types\n return typeof action === 'function' ? action(state) : action;\n}\n\nfunction mountReducer(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n var initialState;\n\n if (init !== undefined) {\n initialState = init(initialArg);\n } else {\n initialState = initialArg;\n }\n\n hook.memoizedState = hook.baseState = initialState;\n var queue = hook.queue = {\n pending: null,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateReducer(reducer, initialArg, init) {\n var hook = updateWorkInProgressHook();\n var queue = hook.queue;\n\n if (!(queue !== null)) {\n {\n throw Error( \"Should have a queue. This is likely a bug in React. Please file an issue.\" );\n }\n }\n\n queue.lastRenderedReducer = reducer;\n var current = currentHook; // The last rebase update that is NOT part of the base state.\n\n var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet.\n\n var pendingQueue = queue.pending;\n\n if (pendingQueue !== null) {\n // We have new updates that haven't been processed yet.\n // We'll add them to the base queue.\n if (baseQueue !== null) {\n // Merge the pending queue and the base queue.\n var baseFirst = baseQueue.next;\n var pendingFirst = pendingQueue.next;\n baseQueue.next = pendingFirst;\n pendingQueue.next = baseFirst;\n }\n\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n\n if (baseQueue !== null) {\n // We have a queue to process.\n var first = baseQueue.next;\n var newState = current.baseState;\n var newBaseState = null;\n var newBaseQueueFirst = null;\n var newBaseQueueLast = null;\n var update = first;\n\n do {\n var updateExpirationTime = update.expirationTime;\n\n if (updateExpirationTime < renderExpirationTime) {\n // Priority is insufficient. Skip this update. If this is the first\n // skipped update, the previous update/state is the new base\n // update/state.\n var clone = {\n expirationTime: update.expirationTime,\n suspenseConfig: update.suspenseConfig,\n action: update.action,\n eagerReducer: update.eagerReducer,\n eagerState: update.eagerState,\n next: null\n };\n\n if (newBaseQueueLast === null) {\n newBaseQueueFirst = newBaseQueueLast = clone;\n newBaseState = newState;\n } else {\n newBaseQueueLast = newBaseQueueLast.next = clone;\n } // Update the remaining priority in the queue.\n\n\n if (updateExpirationTime > currentlyRenderingFiber$1.expirationTime) {\n currentlyRenderingFiber$1.expirationTime = updateExpirationTime;\n markUnprocessedUpdateTime(updateExpirationTime);\n }\n } else {\n // This update does have sufficient priority.\n if (newBaseQueueLast !== null) {\n var _clone = {\n expirationTime: Sync,\n // This update is going to be committed so we never want uncommit it.\n suspenseConfig: update.suspenseConfig,\n action: update.action,\n eagerReducer: update.eagerReducer,\n eagerState: update.eagerState,\n next: null\n };\n newBaseQueueLast = newBaseQueueLast.next = _clone;\n } // Mark the event time of this update as relevant to this render pass.\n // TODO: This should ideally use the true event time of this update rather than\n // its priority which is a derived and not reverseable value.\n // TODO: We should skip this update if it was already committed but currently\n // we have no way of detecting the difference between a committed and suspended\n // update here.\n\n\n markRenderEventTimeAndConfig(updateExpirationTime, update.suspenseConfig); // Process this update.\n\n if (update.eagerReducer === reducer) {\n // If this update was processed eagerly, and its reducer matches the\n // current reducer, we can use the eagerly computed state.\n newState = update.eagerState;\n } else {\n var action = update.action;\n newState = reducer(newState, action);\n }\n }\n\n update = update.next;\n } while (update !== null && update !== first);\n\n if (newBaseQueueLast === null) {\n newBaseState = newState;\n } else {\n newBaseQueueLast.next = newBaseQueueFirst;\n } // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n\n\n if (!objectIs(newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = newState;\n hook.baseState = newBaseState;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = newState;\n }\n\n var dispatch = queue.dispatch;\n return [hook.memoizedState, dispatch];\n}\n\nfunction rerenderReducer(reducer, initialArg, init) {\n var hook = updateWorkInProgressHook();\n var queue = hook.queue;\n\n if (!(queue !== null)) {\n {\n throw Error( \"Should have a queue. This is likely a bug in React. Please file an issue.\" );\n }\n }\n\n queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous\n // work-in-progress hook.\n\n var dispatch = queue.dispatch;\n var lastRenderPhaseUpdate = queue.pending;\n var newState = hook.memoizedState;\n\n if (lastRenderPhaseUpdate !== null) {\n // The queue doesn't persist past this render pass.\n queue.pending = null;\n var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n var update = firstRenderPhaseUpdate;\n\n do {\n // Process this render phase update. We don't have to check the\n // priority because it will always be the same as the current\n // render's.\n var action = update.action;\n newState = reducer(newState, action);\n update = update.next;\n } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n\n\n if (!objectIs(newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to\n // the base state unless the queue is empty.\n // TODO: Not sure if this is the desired semantics, but it's what we\n // do for gDSFP. I can't remember why.\n\n if (hook.baseQueue === null) {\n hook.baseState = newState;\n }\n\n queue.lastRenderedState = newState;\n }\n\n return [newState, dispatch];\n}\n\nfunction mountState(initialState) {\n var hook = mountWorkInProgressHook();\n\n if (typeof initialState === 'function') {\n // $FlowFixMe: Flow doesn't like mixed types\n initialState = initialState();\n }\n\n hook.memoizedState = hook.baseState = initialState;\n var queue = hook.queue = {\n pending: null,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateState(initialState) {\n return updateReducer(basicStateReducer);\n}\n\nfunction rerenderState(initialState) {\n return rerenderReducer(basicStateReducer);\n}\n\nfunction pushEffect(tag, create, destroy, deps) {\n var effect = {\n tag: tag,\n create: create,\n destroy: destroy,\n deps: deps,\n // Circular\n next: null\n };\n var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n if (componentUpdateQueue === null) {\n componentUpdateQueue = createFunctionComponentUpdateQueue();\n currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var lastEffect = componentUpdateQueue.lastEffect;\n\n if (lastEffect === null) {\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var firstEffect = lastEffect.next;\n lastEffect.next = effect;\n effect.next = firstEffect;\n componentUpdateQueue.lastEffect = effect;\n }\n }\n\n return effect;\n}\n\nfunction mountRef(initialValue) {\n var hook = mountWorkInProgressHook();\n var ref = {\n current: initialValue\n };\n\n {\n Object.seal(ref);\n }\n\n hook.memoizedState = ref;\n return ref;\n}\n\nfunction updateRef(initialValue) {\n var hook = updateWorkInProgressHook();\n return hook.memoizedState;\n}\n\nfunction mountEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n currentlyRenderingFiber$1.effectTag |= fiberEffectTag;\n hook.memoizedState = pushEffect(HasEffect | hookEffectTag, create, undefined, nextDeps);\n}\n\nfunction updateEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var destroy = undefined;\n\n if (currentHook !== null) {\n var prevEffect = currentHook.memoizedState;\n destroy = prevEffect.destroy;\n\n if (nextDeps !== null) {\n var prevDeps = prevEffect.deps;\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n pushEffect(hookEffectTag, create, destroy, nextDeps);\n return;\n }\n }\n }\n\n currentlyRenderingFiber$1.effectTag |= fiberEffectTag;\n hook.memoizedState = pushEffect(HasEffect | hookEffectTag, create, destroy, nextDeps);\n}\n\nfunction mountEffect(create, deps) {\n {\n // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n if ('undefined' !== typeof jest) {\n warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);\n }\n }\n\n return mountEffectImpl(Update | Passive, Passive$1, create, deps);\n}\n\nfunction updateEffect(create, deps) {\n {\n // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n if ('undefined' !== typeof jest) {\n warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);\n }\n }\n\n return updateEffectImpl(Update | Passive, Passive$1, create, deps);\n}\n\nfunction mountLayoutEffect(create, deps) {\n return mountEffectImpl(Update, Layout, create, deps);\n}\n\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(Update, Layout, create, deps);\n}\n\nfunction imperativeHandleEffect(create, ref) {\n if (typeof ref === 'function') {\n var refCallback = ref;\n\n var _inst = create();\n\n refCallback(_inst);\n return function () {\n refCallback(null);\n };\n } else if (ref !== null && ref !== undefined) {\n var refObject = ref;\n\n {\n if (!refObject.hasOwnProperty('current')) {\n error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');\n }\n }\n\n var _inst2 = create();\n\n refObject.current = _inst2;\n return function () {\n refObject.current = null;\n };\n }\n}\n\nfunction mountImperativeHandle(ref, create, deps) {\n {\n if (typeof create !== 'function') {\n error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n }\n } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n return mountEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction updateImperativeHandle(ref, create, deps) {\n {\n if (typeof create !== 'function') {\n error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n }\n } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction mountDebugValue(value, formatterFn) {// This hook is normally a no-op.\n // The react-debug-hooks package injects its own implementation\n // so that e.g. DevTools can display custom hook values.\n}\n\nvar updateDebugValue = mountDebugValue;\n\nfunction mountCallback(callback, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState;\n\n if (prevState !== null) {\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n }\n\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction mountMemo(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState;\n\n if (prevState !== null) {\n // Assume these are defined. If they're not, areHookInputsEqual will warn.\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n }\n\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\nfunction mountDeferredValue(value, config) {\n var _mountState = mountState(value),\n prevValue = _mountState[0],\n setValue = _mountState[1];\n\n mountEffect(function () {\n var previousConfig = ReactCurrentBatchConfig$1.suspense;\n ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.suspense = previousConfig;\n }\n }, [value, config]);\n return prevValue;\n}\n\nfunction updateDeferredValue(value, config) {\n var _updateState = updateState(),\n prevValue = _updateState[0],\n setValue = _updateState[1];\n\n updateEffect(function () {\n var previousConfig = ReactCurrentBatchConfig$1.suspense;\n ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.suspense = previousConfig;\n }\n }, [value, config]);\n return prevValue;\n}\n\nfunction rerenderDeferredValue(value, config) {\n var _rerenderState = rerenderState(),\n prevValue = _rerenderState[0],\n setValue = _rerenderState[1];\n\n updateEffect(function () {\n var previousConfig = ReactCurrentBatchConfig$1.suspense;\n ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.suspense = previousConfig;\n }\n }, [value, config]);\n return prevValue;\n}\n\nfunction startTransition(setPending, config, callback) {\n var priorityLevel = getCurrentPriorityLevel();\n runWithPriority$1(priorityLevel < UserBlockingPriority$1 ? UserBlockingPriority$1 : priorityLevel, function () {\n setPending(true);\n });\n runWithPriority$1(priorityLevel > NormalPriority ? NormalPriority : priorityLevel, function () {\n var previousConfig = ReactCurrentBatchConfig$1.suspense;\n ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n try {\n setPending(false);\n callback();\n } finally {\n ReactCurrentBatchConfig$1.suspense = previousConfig;\n }\n });\n}\n\nfunction mountTransition(config) {\n var _mountState2 = mountState(false),\n isPending = _mountState2[0],\n setPending = _mountState2[1];\n\n var start = mountCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n return [start, isPending];\n}\n\nfunction updateTransition(config) {\n var _updateState2 = updateState(),\n isPending = _updateState2[0],\n setPending = _updateState2[1];\n\n var start = updateCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n return [start, isPending];\n}\n\nfunction rerenderTransition(config) {\n var _rerenderState2 = rerenderState(),\n isPending = _rerenderState2[0],\n setPending = _rerenderState2[1];\n\n var start = updateCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n return [start, isPending];\n}\n\nfunction dispatchAction(fiber, queue, action) {\n {\n if (typeof arguments[3] === 'function') {\n error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n }\n }\n\n var currentTime = requestCurrentTimeForUpdate();\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n var update = {\n expirationTime: expirationTime,\n suspenseConfig: suspenseConfig,\n action: action,\n eagerReducer: null,\n eagerState: null,\n next: null\n };\n\n {\n update.priority = getCurrentPriorityLevel();\n } // Append the update to the end of the list.\n\n\n var pending = queue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n queue.pending = update;\n var alternate = fiber.alternate;\n\n if (fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1) {\n // This is a render phase update. Stash it in a lazily-created map of\n // queue -> linked list of updates. After this render pass, we'll restart\n // and apply the stashed updates on top of the work-in-progress hook.\n didScheduleRenderPhaseUpdate = true;\n update.expirationTime = renderExpirationTime;\n currentlyRenderingFiber$1.expirationTime = renderExpirationTime;\n } else {\n if (fiber.expirationTime === NoWork && (alternate === null || alternate.expirationTime === NoWork)) {\n // The queue is currently empty, which means we can eagerly compute the\n // next state before entering the render phase. If the new state is the\n // same as the current state, we may be able to bail out entirely.\n var lastRenderedReducer = queue.lastRenderedReducer;\n\n if (lastRenderedReducer !== null) {\n var prevDispatcher;\n\n {\n prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n }\n\n try {\n var currentState = queue.lastRenderedState;\n var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute\n // it, on the update object. If the reducer hasn't changed by the\n // time we enter the render phase, then the eager state can be used\n // without calling the reducer again.\n\n update.eagerReducer = lastRenderedReducer;\n update.eagerState = eagerState;\n\n if (objectIs(eagerState, currentState)) {\n // Fast path. We can bail out without scheduling React to re-render.\n // It's still possible that we'll need to rebase this update later,\n // if the component re-renders for a different reason and by that\n // time the reducer has changed.\n return;\n }\n } catch (error) {// Suppress the error. It will throw again in the render phase.\n } finally {\n {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n }\n }\n }\n\n {\n // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n if ('undefined' !== typeof jest) {\n warnIfNotScopedWithMatchingAct(fiber);\n warnIfNotCurrentlyActingUpdatesInDev(fiber);\n }\n }\n\n scheduleWork(fiber, expirationTime);\n }\n}\n\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useResponder: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError\n};\nvar HooksDispatcherOnMountInDEV = null;\nvar HooksDispatcherOnMountWithHookTypesInDEV = null;\nvar HooksDispatcherOnUpdateInDEV = null;\nvar HooksDispatcherOnRerenderInDEV = null;\nvar InvalidNestedHooksDispatcherOnMountInDEV = null;\nvar InvalidNestedHooksDispatcherOnUpdateInDEV = null;\nvar InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n\n{\n var warnInvalidContextAccess = function () {\n error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n };\n\n var warnInvalidHookAccess = function () {\n error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://fb.me/rules-of-hooks');\n };\n\n HooksDispatcherOnMountInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n mountHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n mountHookTypesDev();\n return mountDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n mountHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n mountHookTypesDev();\n return mountDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n mountHookTypesDev();\n return mountTransition(config);\n }\n };\n HooksDispatcherOnMountWithHookTypesInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return mountDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return mountDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return mountTransition(config);\n }\n };\n HooksDispatcherOnUpdateInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return updateDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return updateDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return updateTransition(config);\n }\n };\n HooksDispatcherOnRerenderInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return rerenderState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return updateDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return rerenderDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return rerenderTransition(config);\n }\n };\n InvalidNestedHooksDispatcherOnMountInDEV = {\n readContext: function (context, observedBits) {\n warnInvalidContextAccess();\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountTransition(config);\n }\n };\n InvalidNestedHooksDispatcherOnUpdateInDEV = {\n readContext: function (context, observedBits) {\n warnInvalidContextAccess();\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateTransition(config);\n }\n };\n InvalidNestedHooksDispatcherOnRerenderInDEV = {\n readContext: function (context, observedBits) {\n warnInvalidContextAccess();\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return rerenderState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderTransition(config);\n }\n };\n}\n\nvar now$1 = Scheduler.unstable_now;\nvar commitTime = 0;\nvar profilerStartTime = -1;\n\nfunction getCommitTime() {\n return commitTime;\n}\n\nfunction recordCommitTime() {\n\n commitTime = now$1();\n}\n\nfunction startProfilerTimer(fiber) {\n\n profilerStartTime = now$1();\n\n if (fiber.actualStartTime < 0) {\n fiber.actualStartTime = now$1();\n }\n}\n\nfunction stopProfilerTimerIfRunning(fiber) {\n\n profilerStartTime = -1;\n}\n\nfunction stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {\n\n if (profilerStartTime >= 0) {\n var elapsedTime = now$1() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n\n if (overrideBaseTime) {\n fiber.selfBaseDuration = elapsedTime;\n }\n\n profilerStartTime = -1;\n }\n}\n\n// This may have been an insertion or a hydration.\n\nvar hydrationParentFiber = null;\nvar nextHydratableInstance = null;\nvar isHydrating = false;\n\nfunction enterHydrationState(fiber) {\n\n var parentInstance = fiber.stateNode.containerInfo;\n nextHydratableInstance = getFirstHydratableChild(parentInstance);\n hydrationParentFiber = fiber;\n isHydrating = true;\n return true;\n}\n\nfunction deleteHydratableInstance(returnFiber, instance) {\n {\n switch (returnFiber.tag) {\n case HostRoot:\n didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance);\n break;\n\n case HostComponent:\n didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance);\n break;\n }\n }\n\n var childToDelete = createFiberFromHostInstanceForDeletion();\n childToDelete.stateNode = instance;\n childToDelete.return = returnFiber;\n childToDelete.effectTag = Deletion; // This might seem like it belongs on progressedFirstDeletion. However,\n // these children are not part of the reconciliation list of children.\n // Even if we abort and rereconcile the children, that will try to hydrate\n // again and the nodes are still in the host tree so these will be\n // recreated.\n\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = childToDelete;\n returnFiber.lastEffect = childToDelete;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n }\n}\n\nfunction insertNonHydratedInstance(returnFiber, fiber) {\n fiber.effectTag = fiber.effectTag & ~Hydrating | Placement;\n\n {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n\n switch (fiber.tag) {\n case HostComponent:\n var type = fiber.type;\n var props = fiber.pendingProps;\n didNotFindHydratableContainerInstance(parentContainer, type);\n break;\n\n case HostText:\n var text = fiber.pendingProps;\n didNotFindHydratableContainerTextInstance(parentContainer, text);\n break;\n }\n\n break;\n }\n\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n\n switch (fiber.tag) {\n case HostComponent:\n var _type = fiber.type;\n var _props = fiber.pendingProps;\n didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type);\n break;\n\n case HostText:\n var _text = fiber.pendingProps;\n didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text);\n break;\n\n case SuspenseComponent:\n didNotFindHydratableSuspenseInstance(parentType, parentProps);\n break;\n }\n\n break;\n }\n\n default:\n return;\n }\n }\n}\n\nfunction tryHydrate(fiber, nextInstance) {\n switch (fiber.tag) {\n case HostComponent:\n {\n var type = fiber.type;\n var props = fiber.pendingProps;\n var instance = canHydrateInstance(nextInstance, type);\n\n if (instance !== null) {\n fiber.stateNode = instance;\n return true;\n }\n\n return false;\n }\n\n case HostText:\n {\n var text = fiber.pendingProps;\n var textInstance = canHydrateTextInstance(nextInstance, text);\n\n if (textInstance !== null) {\n fiber.stateNode = textInstance;\n return true;\n }\n\n return false;\n }\n\n case SuspenseComponent:\n {\n\n return false;\n }\n\n default:\n return false;\n }\n}\n\nfunction tryToClaimNextHydratableInstance(fiber) {\n if (!isHydrating) {\n return;\n }\n\n var nextInstance = nextHydratableInstance;\n\n if (!nextInstance) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n }\n\n var firstAttemptedInstance = nextInstance;\n\n if (!tryHydrate(fiber, nextInstance)) {\n // If we can't hydrate this instance let's try the next one.\n // We use this as a heuristic. It's based on intuition and not data so it\n // might be flawed or unnecessary.\n nextInstance = getNextHydratableSibling(firstAttemptedInstance);\n\n if (!nextInstance || !tryHydrate(fiber, nextInstance)) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n } // We matched the next one, we'll now assume that the first one was\n // superfluous and we'll delete it. Since we can't eagerly delete it\n // we'll have to schedule a deletion. To do that, this node needs a dummy\n // fiber associated with it.\n\n\n deleteHydratableInstance(hydrationParentFiber, firstAttemptedInstance);\n }\n\n hydrationParentFiber = fiber;\n nextHydratableInstance = getFirstHydratableChild(nextInstance);\n}\n\nfunction prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {\n\n var instance = fiber.stateNode;\n var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber); // TODO: Type this specific to this type of component.\n\n fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update.\n\n if (updatePayload !== null) {\n return true;\n }\n\n return false;\n}\n\nfunction prepareToHydrateHostTextInstance(fiber) {\n\n var textInstance = fiber.stateNode;\n var textContent = fiber.memoizedProps;\n var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);\n\n {\n if (shouldUpdate) {\n // We assume that prepareToHydrateHostTextInstance is called in a context where the\n // hydration parent is the parent host component of this host text.\n var returnFiber = hydrationParentFiber;\n\n if (returnFiber !== null) {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent);\n break;\n }\n\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent);\n break;\n }\n }\n }\n }\n }\n\n return shouldUpdate;\n}\n\nfunction skipPastDehydratedSuspenseInstance(fiber) {\n\n var suspenseState = fiber.memoizedState;\n var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n if (!suspenseInstance) {\n {\n throw Error( \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);\n}\n\nfunction popToNextHostParent(fiber) {\n var parent = fiber.return;\n\n while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) {\n parent = parent.return;\n }\n\n hydrationParentFiber = parent;\n}\n\nfunction popHydrationState(fiber) {\n\n if (fiber !== hydrationParentFiber) {\n // We're deeper than the current hydration context, inside an inserted\n // tree.\n return false;\n }\n\n if (!isHydrating) {\n // If we're not currently hydrating but we're in a hydration context, then\n // we were an insertion and now need to pop up reenter hydration of our\n // siblings.\n popToNextHostParent(fiber);\n isHydrating = true;\n return false;\n }\n\n var type = fiber.type; // If we have any remaining hydratable nodes, we need to delete them now.\n // We only do this deeper than head and body since they tend to have random\n // other nodes in them. We also ignore components with pure text content in\n // side of them.\n // TODO: Better heuristic.\n\n if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) {\n var nextInstance = nextHydratableInstance;\n\n while (nextInstance) {\n deleteHydratableInstance(fiber, nextInstance);\n nextInstance = getNextHydratableSibling(nextInstance);\n }\n }\n\n popToNextHostParent(fiber);\n\n if (fiber.tag === SuspenseComponent) {\n nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);\n } else {\n nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;\n }\n\n return true;\n}\n\nfunction resetHydrationState() {\n\n hydrationParentFiber = null;\n nextHydratableInstance = null;\n isHydrating = false;\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar didReceiveUpdate = false;\nvar didWarnAboutBadClass;\nvar didWarnAboutModulePatternComponent;\nvar didWarnAboutContextTypeOnFunctionComponent;\nvar didWarnAboutGetDerivedStateOnFunctionComponent;\nvar didWarnAboutFunctionRefs;\nvar didWarnAboutReassigningProps;\nvar didWarnAboutRevealOrder;\nvar didWarnAboutTailOptions;\n\n{\n didWarnAboutBadClass = {};\n didWarnAboutModulePatternComponent = {};\n didWarnAboutContextTypeOnFunctionComponent = {};\n didWarnAboutGetDerivedStateOnFunctionComponent = {};\n didWarnAboutFunctionRefs = {};\n didWarnAboutReassigningProps = false;\n didWarnAboutRevealOrder = {};\n didWarnAboutTailOptions = {};\n}\n\nfunction reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime) {\n if (current === null) {\n // If this is a fresh new component that hasn't been rendered yet, we\n // won't update its child set by applying minimal side-effects. Instead,\n // we will add them all to the child before it gets rendered. That means\n // we can optimize this reconciliation pass by not tracking side-effects.\n workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n } else {\n // If the current child is the same as the work in progress, it means that\n // we haven't yet started any work on these children. Therefore, we use\n // the clone algorithm to create a copy of all the current children.\n // If we had any progressed work already, that is invalid at this point so\n // let's throw it out.\n workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderExpirationTime);\n }\n}\n\nfunction forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderExpirationTime) {\n // This function is fork of reconcileChildren. It's used in cases where we\n // want to reconcile without matching against the existing set. This has the\n // effect of all current children being unmounted; even if the type and key\n // are the same, the old child is unmounted and a new child is created.\n //\n // To do this, we're going to go through the reconcile algorithm twice. In\n // the first pass, we schedule a deletion for all the current children by\n // passing null.\n workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderExpirationTime); // In the second pass, we mount the new children. The trick here is that we\n // pass null in place of where we usually pass the current child set. This has\n // the effect of remounting all children regardless of whether their\n // identities match.\n\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n}\n\nfunction updateForwardRef(current, workInProgress, Component, nextProps, renderExpirationTime) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens after the first render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n\n var render = Component.render;\n var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent\n\n var nextChildren;\n prepareToReadContext(workInProgress, renderExpirationTime);\n\n {\n ReactCurrentOwner$1.current = workInProgress;\n setIsRendering(true);\n nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderExpirationTime);\n\n if ( workInProgress.mode & StrictMode) {\n // Only double-render components with Hooks\n if (workInProgress.memoizedState !== null) {\n nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderExpirationTime);\n }\n }\n\n setIsRendering(false);\n }\n\n if (current !== null && !didReceiveUpdate) {\n bailoutHooks(current, workInProgress, renderExpirationTime);\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateMemoComponent(current, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n if (current === null) {\n var type = Component.type;\n\n if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.\n Component.defaultProps === undefined) {\n var resolvedType = type;\n\n {\n resolvedType = resolveFunctionForHotReloading(type);\n } // If this is a plain function component without default props,\n // and with only the default shallow comparison, we upgrade it\n // to a SimpleMemoComponent to allow fast path updates.\n\n\n workInProgress.tag = SimpleMemoComponent;\n workInProgress.type = resolvedType;\n\n {\n validateFunctionComponentInDev(workInProgress, type);\n }\n\n return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, updateExpirationTime, renderExpirationTime);\n }\n\n {\n var innerPropTypes = type.propTypes;\n\n if (innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(type), getCurrentFiberStackInDev);\n }\n }\n\n var child = createFiberFromTypeAndProps(Component.type, null, nextProps, null, workInProgress.mode, renderExpirationTime);\n child.ref = workInProgress.ref;\n child.return = workInProgress;\n workInProgress.child = child;\n return child;\n }\n\n {\n var _type = Component.type;\n var _innerPropTypes = _type.propTypes;\n\n if (_innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(_innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(_type), getCurrentFiberStackInDev);\n }\n }\n\n var currentChild = current.child; // This is always exactly one child\n\n if (updateExpirationTime < renderExpirationTime) {\n // This will be the props with resolved defaultProps,\n // unlike current.memoizedProps which will be the unresolved ones.\n var prevProps = currentChild.memoizedProps; // Default to shallow comparison\n\n var compare = Component.compare;\n compare = compare !== null ? compare : shallowEqual;\n\n if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n var newChild = createWorkInProgress(currentChild, nextProps);\n newChild.ref = workInProgress.ref;\n newChild.return = workInProgress;\n workInProgress.child = newChild;\n return newChild;\n}\n\nfunction updateSimpleMemoComponent(current, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens when the inner render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var outerMemoType = workInProgress.elementType;\n\n if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {\n // We warn when you define propTypes on lazy()\n // so let's just skip over it to find memo() outer wrapper.\n // Inner props for memo are validated later.\n outerMemoType = refineResolvedLazyComponent(outerMemoType);\n }\n\n var outerPropTypes = outerMemoType && outerMemoType.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)\n 'prop', getComponentName(outerMemoType), getCurrentFiberStackInDev);\n } // Inner propTypes will be validated in the function component path.\n\n }\n }\n\n if (current !== null) {\n var prevProps = current.memoizedProps;\n\n if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.\n workInProgress.type === current.type )) {\n didReceiveUpdate = false;\n\n if (updateExpirationTime < renderExpirationTime) {\n // The pending update priority was cleared at the beginning of\n // beginWork. We're about to bail out, but there might be additional\n // updates at a lower priority. Usually, the priority level of the\n // remaining updates is accumlated during the evaluation of the\n // component (i.e. when processing the update queue). But since since\n // we're bailing out early *without* evaluating the component, we need\n // to account for it here, too. Reset to the value of the current fiber.\n // NOTE: This only applies to SimpleMemoComponent, not MemoComponent,\n // because a MemoComponent fiber does not have hooks or an update queue;\n // rather, it wraps around an inner component, which may or may not\n // contains hooks.\n // TODO: Move the reset at in beginWork out of the common path so that\n // this is no longer necessary.\n workInProgress.expirationTime = current.expirationTime;\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n }\n }\n\n return updateFunctionComponent(current, workInProgress, Component, nextProps, renderExpirationTime);\n}\n\nfunction updateFragment(current, workInProgress, renderExpirationTime) {\n var nextChildren = workInProgress.pendingProps;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateMode(current, workInProgress, renderExpirationTime) {\n var nextChildren = workInProgress.pendingProps.children;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateProfiler(current, workInProgress, renderExpirationTime) {\n {\n workInProgress.effectTag |= Update;\n }\n\n var nextProps = workInProgress.pendingProps;\n var nextChildren = nextProps.children;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n\n if (current === null && ref !== null || current !== null && current.ref !== ref) {\n // Schedule a Ref effect\n workInProgress.effectTag |= Ref;\n }\n}\n\nfunction updateFunctionComponent(current, workInProgress, Component, nextProps, renderExpirationTime) {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n\n var context;\n\n {\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);\n context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n var nextChildren;\n prepareToReadContext(workInProgress, renderExpirationTime);\n\n {\n ReactCurrentOwner$1.current = workInProgress;\n setIsRendering(true);\n nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderExpirationTime);\n\n if ( workInProgress.mode & StrictMode) {\n // Only double-render components with Hooks\n if (workInProgress.memoizedState !== null) {\n nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderExpirationTime);\n }\n }\n\n setIsRendering(false);\n }\n\n if (current !== null && !didReceiveUpdate) {\n bailoutHooks(current, workInProgress, renderExpirationTime);\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateClassComponent(current, workInProgress, Component, nextProps, renderExpirationTime) {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n } // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n\n var hasContext;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n var instance = workInProgress.stateNode;\n var shouldUpdate;\n\n if (instance === null) {\n if (current !== null) {\n // A class component without an instance only mounts if it suspended\n // inside a non-concurrent tree, in an inconsistent state. We want to\n // treat it like a new mount, even though an empty version of it already\n // committed. Disconnect the alternate pointers.\n current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.effectTag |= Placement;\n } // In the initial pass we might need to construct the instance.\n\n\n constructClassInstance(workInProgress, Component, nextProps);\n mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n shouldUpdate = true;\n } else if (current === null) {\n // In a resume, we'll already have an instance we can reuse.\n shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n } else {\n shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderExpirationTime);\n }\n\n var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime);\n\n {\n var inst = workInProgress.stateNode;\n\n if (inst.props !== nextProps) {\n if (!didWarnAboutReassigningProps) {\n error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentName(workInProgress.type) || 'a component');\n }\n\n didWarnAboutReassigningProps = true;\n }\n }\n\n return nextUnitOfWork;\n}\n\nfunction finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime) {\n // Refs should update even if shouldComponentUpdate returns false\n markRef(current, workInProgress);\n var didCaptureError = (workInProgress.effectTag & DidCapture) !== NoEffect;\n\n if (!shouldUpdate && !didCaptureError) {\n // Context providers should defer to sCU for rendering\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, false);\n }\n\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n\n var instance = workInProgress.stateNode; // Rerender\n\n ReactCurrentOwner$1.current = workInProgress;\n var nextChildren;\n\n if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {\n // If we captured an error, but getDerivedStateFromError is not defined,\n // unmount all the children. componentDidCatch will schedule an update to\n // re-render a fallback. This is temporary until we migrate everyone to\n // the new API.\n // TODO: Warn in a future release.\n nextChildren = null;\n\n {\n stopProfilerTimerIfRunning();\n }\n } else {\n {\n setIsRendering(true);\n nextChildren = instance.render();\n\n if ( workInProgress.mode & StrictMode) {\n instance.render();\n }\n\n setIsRendering(false);\n }\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n\n if (current !== null && didCaptureError) {\n // If we're recovering from an error, reconcile without reusing any of\n // the existing children. Conceptually, the normal children and the children\n // that are shown on error are two different sets, so we shouldn't reuse\n // normal children even if their identities match.\n forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderExpirationTime);\n } else {\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n } // Memoize state using the values we just used to render.\n // TODO: Restructure so we never read values from the instance.\n\n\n workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.\n\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, true);\n }\n\n return workInProgress.child;\n}\n\nfunction pushHostRootContext(workInProgress) {\n var root = workInProgress.stateNode;\n\n if (root.pendingContext) {\n pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);\n } else if (root.context) {\n // Should always be set\n pushTopLevelContextObject(workInProgress, root.context, false);\n }\n\n pushHostContainer(workInProgress, root.containerInfo);\n}\n\nfunction updateHostRoot(current, workInProgress, renderExpirationTime) {\n pushHostRootContext(workInProgress);\n var updateQueue = workInProgress.updateQueue;\n\n if (!(current !== null && updateQueue !== null)) {\n {\n throw Error( \"If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var nextProps = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n var prevChildren = prevState !== null ? prevState.element : null;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, nextProps, null, renderExpirationTime);\n var nextState = workInProgress.memoizedState; // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n var nextChildren = nextState.element;\n\n if (nextChildren === prevChildren) {\n // If the state is the same as before, that's a bailout because we had\n // no work that expires at this time.\n resetHydrationState();\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n\n var root = workInProgress.stateNode;\n\n if (root.hydrate && enterHydrationState(workInProgress)) {\n // If we don't have any current children this might be the first pass.\n // We always try to hydrate. If this isn't a hydration pass there won't\n // be any children to hydrate which is effectively the same thing as\n // not hydrating.\n var child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n workInProgress.child = child;\n var node = child;\n\n while (node) {\n // Mark each child as hydrating. This is a fast path to know whether this\n // tree is part of a hydrating tree. This is used to determine if a child\n // node has fully mounted yet, and for scheduling event replaying.\n // Conceptually this is similar to Placement in that a new subtree is\n // inserted into the React tree here. It just happens to not need DOM\n // mutations because it already exists.\n node.effectTag = node.effectTag & ~Placement | Hydrating;\n node = node.sibling;\n }\n } else {\n // Otherwise reset hydration state in case we aborted and resumed another\n // root.\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n resetHydrationState();\n }\n\n return workInProgress.child;\n}\n\nfunction updateHostComponent(current, workInProgress, renderExpirationTime) {\n pushHostContext(workInProgress);\n\n if (current === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n }\n\n var type = workInProgress.type;\n var nextProps = workInProgress.pendingProps;\n var prevProps = current !== null ? current.memoizedProps : null;\n var nextChildren = nextProps.children;\n var isDirectTextChild = shouldSetTextContent(type, nextProps);\n\n if (isDirectTextChild) {\n // We special case a direct text child of a host node. This is a common\n // case. We won't handle it as a reified child. We will instead handle\n // this in the host environment that also has access to this prop. That\n // avoids allocating another HostText fiber and traversing it.\n nextChildren = null;\n } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {\n // If we're switching from a direct text child to a normal child, or to\n // empty, we need to schedule the text content to be reset.\n workInProgress.effectTag |= ContentReset;\n }\n\n markRef(current, workInProgress); // Check the host config to see if the children are offscreen/hidden.\n\n if (workInProgress.mode & ConcurrentMode && renderExpirationTime !== Never && shouldDeprioritizeSubtree(type, nextProps)) {\n {\n markSpawnedWork(Never);\n } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n workInProgress.expirationTime = workInProgress.childExpirationTime = Never;\n return null;\n }\n\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateHostText(current, workInProgress) {\n if (current === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n } // Nothing to do here. This is terminal. We'll do the completion step\n // immediately after.\n\n\n return null;\n}\n\nfunction mountLazyComponent(_current, workInProgress, elementType, updateExpirationTime, renderExpirationTime) {\n if (_current !== null) {\n // A lazy component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n _current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.effectTag |= Placement;\n }\n\n var props = workInProgress.pendingProps; // We can't start a User Timing measurement with correct label yet.\n // Cancel and resume right after we know the tag.\n\n cancelWorkTimer(workInProgress);\n var Component = readLazyComponentType(elementType); // Store the unwrapped component in the type.\n\n workInProgress.type = Component;\n var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);\n startWorkTimer(workInProgress);\n var resolvedProps = resolveDefaultProps(Component, props);\n var child;\n\n switch (resolvedTag) {\n case FunctionComponent:\n {\n {\n validateFunctionComponentInDev(workInProgress, Component);\n workInProgress.type = Component = resolveFunctionForHotReloading(Component);\n }\n\n child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n return child;\n }\n\n case ClassComponent:\n {\n {\n workInProgress.type = Component = resolveClassForHotReloading(Component);\n }\n\n child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n return child;\n }\n\n case ForwardRef:\n {\n {\n workInProgress.type = Component = resolveForwardRefForHotReloading(Component);\n }\n\n child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n return child;\n }\n\n case MemoComponent:\n {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = Component.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n\n child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too\n updateExpirationTime, renderExpirationTime);\n return child;\n }\n }\n\n var hint = '';\n\n {\n if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {\n hint = ' Did you wrap a component in React.lazy() more than once?';\n }\n } // This message intentionally doesn't mention ForwardRef or MemoComponent\n // because the fact that it's a separate type of work is an\n // implementation detail.\n\n\n {\n {\n throw Error( \"Element type is invalid. Received a promise that resolves to: \" + Component + \". Lazy element type must resolve to a class or function.\" + hint );\n }\n }\n}\n\nfunction mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderExpirationTime) {\n if (_current !== null) {\n // An incomplete component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n _current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.effectTag |= Placement;\n } // Promote the fiber to a class and try rendering again.\n\n\n workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`\n // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n var hasContext;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n constructClassInstance(workInProgress, Component, nextProps);\n mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n}\n\nfunction mountIndeterminateComponent(_current, workInProgress, Component, renderExpirationTime) {\n if (_current !== null) {\n // An indeterminate component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n _current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.effectTag |= Placement;\n }\n\n var props = workInProgress.pendingProps;\n var context;\n\n {\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);\n context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n var value;\n\n {\n if (Component.prototype && typeof Component.prototype.render === 'function') {\n var componentName = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutBadClass[componentName]) {\n error(\"The <%s /> component appears to have a render method, but doesn't extend React.Component. \" + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);\n\n didWarnAboutBadClass[componentName] = true;\n }\n }\n\n if (workInProgress.mode & StrictMode) {\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);\n }\n\n setIsRendering(true);\n ReactCurrentOwner$1.current = workInProgress;\n value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n setIsRendering(false);\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n\n if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n {\n var _componentName = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutModulePatternComponent[_componentName]) {\n error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);\n\n didWarnAboutModulePatternComponent[_componentName] = true;\n }\n } // Proceed under the assumption that this is a class instance\n\n\n workInProgress.tag = ClassComponent; // Throw out any hooks that were used.\n\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n var hasContext = false;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;\n initializeUpdateQueue(workInProgress);\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, Component, getDerivedStateFromProps, props);\n }\n\n adoptClassInstance(workInProgress, value);\n mountClassInstance(workInProgress, Component, props, renderExpirationTime);\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n } else {\n // Proceed under the assumption that this is a function component\n workInProgress.tag = FunctionComponent;\n\n {\n\n if ( workInProgress.mode & StrictMode) {\n // Only double-render components with Hooks\n if (workInProgress.memoizedState !== null) {\n value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n }\n }\n }\n\n reconcileChildren(null, workInProgress, value, renderExpirationTime);\n\n {\n validateFunctionComponentInDev(workInProgress, Component);\n }\n\n return workInProgress.child;\n }\n}\n\nfunction validateFunctionComponentInDev(workInProgress, Component) {\n {\n if (Component) {\n if (Component.childContextTypes) {\n error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');\n }\n }\n\n if (workInProgress.ref !== null) {\n var info = '';\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n var warningKey = ownerName || workInProgress._debugID || '';\n var debugSource = workInProgress._debugSource;\n\n if (debugSource) {\n warningKey = debugSource.fileName + ':' + debugSource.lineNumber;\n }\n\n if (!didWarnAboutFunctionRefs[warningKey]) {\n didWarnAboutFunctionRefs[warningKey] = true;\n\n error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);\n }\n }\n\n if (typeof Component.getDerivedStateFromProps === 'function') {\n var _componentName2 = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2]) {\n error('%s: Function components do not support getDerivedStateFromProps.', _componentName2);\n\n didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] = true;\n }\n }\n\n if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n var _componentName3 = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutContextTypeOnFunctionComponent[_componentName3]) {\n error('%s: Function components do not support contextType.', _componentName3);\n\n didWarnAboutContextTypeOnFunctionComponent[_componentName3] = true;\n }\n }\n }\n}\n\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n retryTime: NoWork\n};\n\nfunction shouldRemainOnFallback(suspenseContext, current, workInProgress) {\n // If the context is telling us that we should show a fallback, and we're not\n // already showing content, then we should show the fallback instead.\n return hasSuspenseContext(suspenseContext, ForceSuspenseFallback) && (current === null || current.memoizedState !== null);\n}\n\nfunction updateSuspenseComponent(current, workInProgress, renderExpirationTime) {\n var mode = workInProgress.mode;\n var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.\n\n {\n if (shouldSuspend(workInProgress)) {\n workInProgress.effectTag |= DidCapture;\n }\n }\n\n var suspenseContext = suspenseStackCursor.current;\n var nextDidTimeout = false;\n var didSuspend = (workInProgress.effectTag & DidCapture) !== NoEffect;\n\n if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) {\n // Something in this boundary's subtree already suspended. Switch to\n // rendering the fallback children.\n nextDidTimeout = true;\n workInProgress.effectTag &= ~DidCapture;\n } else {\n // Attempting the main content\n if (current === null || current.memoizedState !== null) {\n // This is a new mount or this boundary is already showing a fallback state.\n // Mark this subtree context as having at least one invisible parent that could\n // handle the fallback state.\n // Boundaries without fallbacks or should be avoided are not considered since\n // they cannot handle preferred fallback states.\n if (nextProps.fallback !== undefined && nextProps.unstable_avoidThisFallback !== true) {\n suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext);\n }\n }\n }\n\n suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n pushSuspenseContext(workInProgress, suspenseContext); // This next part is a bit confusing. If the children timeout, we switch to\n // showing the fallback children in place of the \"primary\" children.\n // However, we don't want to delete the primary children because then their\n // state will be lost (both the React state and the host state, e.g.\n // uncontrolled form inputs). Instead we keep them mounted and hide them.\n // Both the fallback children AND the primary children are rendered at the\n // same time. Once the primary children are un-suspended, we can delete\n // the fallback children — don't need to preserve their state.\n //\n // The two sets of children are siblings in the host environment, but\n // semantically, for purposes of reconciliation, they are two separate sets.\n // So we store them using two fragment fibers.\n //\n // However, we want to avoid allocating extra fibers for every placeholder.\n // They're only necessary when the children time out, because that's the\n // only time when both sets are mounted.\n //\n // So, the extra fragment fibers are only used if the children time out.\n // Otherwise, we render the primary children directly. This requires some\n // custom reconciliation logic to preserve the state of the primary\n // children. It's essentially a very basic form of re-parenting.\n\n if (current === null) {\n // If we're currently hydrating, try to hydrate this boundary.\n // But only if this has a fallback.\n if (nextProps.fallback !== undefined) {\n tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component.\n } // This is the initial mount. This branch is pretty simple because there's\n // no previous state that needs to be preserved.\n\n\n if (nextDidTimeout) {\n // Mount separate fragments for primary and fallback children.\n var nextFallbackChildren = nextProps.fallback;\n var primaryChildFragment = createFiberFromFragment(null, mode, NoWork, null);\n primaryChildFragment.return = workInProgress;\n\n if ((workInProgress.mode & BlockingMode) === NoMode) {\n // Outside of blocking mode, we commit the effects from the\n // partially completed, timed-out tree, too.\n var progressedState = workInProgress.memoizedState;\n var progressedPrimaryChild = progressedState !== null ? workInProgress.child.child : workInProgress.child;\n primaryChildFragment.child = progressedPrimaryChild;\n var progressedChild = progressedPrimaryChild;\n\n while (progressedChild !== null) {\n progressedChild.return = primaryChildFragment;\n progressedChild = progressedChild.sibling;\n }\n }\n\n var fallbackChildFragment = createFiberFromFragment(nextFallbackChildren, mode, renderExpirationTime, null);\n fallbackChildFragment.return = workInProgress;\n primaryChildFragment.sibling = fallbackChildFragment; // Skip the primary children, and continue working on the\n // fallback children.\n\n workInProgress.memoizedState = SUSPENDED_MARKER;\n workInProgress.child = primaryChildFragment;\n return fallbackChildFragment;\n } else {\n // Mount the primary children without an intermediate fragment fiber.\n var nextPrimaryChildren = nextProps.children;\n workInProgress.memoizedState = null;\n return workInProgress.child = mountChildFibers(workInProgress, null, nextPrimaryChildren, renderExpirationTime);\n }\n } else {\n // This is an update. This branch is more complicated because we need to\n // ensure the state of the primary children is preserved.\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n // wrapped in a fragment fiber.\n\n\n var currentPrimaryChildFragment = current.child;\n var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n\n if (nextDidTimeout) {\n // Still timed out. Reuse the current primary children by cloning\n // its fragment. We're going to skip over these entirely.\n var _nextFallbackChildren2 = nextProps.fallback;\n\n var _primaryChildFragment2 = createWorkInProgress(currentPrimaryChildFragment, currentPrimaryChildFragment.pendingProps);\n\n _primaryChildFragment2.return = workInProgress;\n\n if ((workInProgress.mode & BlockingMode) === NoMode) {\n // Outside of blocking mode, we commit the effects from the\n // partially completed, timed-out tree, too.\n var _progressedState = workInProgress.memoizedState;\n\n var _progressedPrimaryChild = _progressedState !== null ? workInProgress.child.child : workInProgress.child;\n\n if (_progressedPrimaryChild !== currentPrimaryChildFragment.child) {\n _primaryChildFragment2.child = _progressedPrimaryChild;\n var _progressedChild2 = _progressedPrimaryChild;\n\n while (_progressedChild2 !== null) {\n _progressedChild2.return = _primaryChildFragment2;\n _progressedChild2 = _progressedChild2.sibling;\n }\n }\n } // Because primaryChildFragment is a new fiber that we're inserting as the\n // parent of a new tree, we need to set its treeBaseDuration.\n\n\n if ( workInProgress.mode & ProfileMode) {\n // treeBaseDuration is the sum of all the child tree base durations.\n var _treeBaseDuration = 0;\n var _hiddenChild = _primaryChildFragment2.child;\n\n while (_hiddenChild !== null) {\n _treeBaseDuration += _hiddenChild.treeBaseDuration;\n _hiddenChild = _hiddenChild.sibling;\n }\n\n _primaryChildFragment2.treeBaseDuration = _treeBaseDuration;\n } // Clone the fallback child fragment, too. These we'll continue\n // working on.\n\n\n var _fallbackChildFragment2 = createWorkInProgress(currentFallbackChildFragment, _nextFallbackChildren2);\n\n _fallbackChildFragment2.return = workInProgress;\n _primaryChildFragment2.sibling = _fallbackChildFragment2;\n _primaryChildFragment2.childExpirationTime = NoWork; // Skip the primary children, and continue working on the\n // fallback children.\n\n workInProgress.memoizedState = SUSPENDED_MARKER;\n workInProgress.child = _primaryChildFragment2;\n return _fallbackChildFragment2;\n } else {\n // No longer suspended. Switch back to showing the primary children,\n // and remove the intermediate fragment fiber.\n var _nextPrimaryChildren = nextProps.children;\n var currentPrimaryChild = currentPrimaryChildFragment.child;\n var primaryChild = reconcileChildFibers(workInProgress, currentPrimaryChild, _nextPrimaryChildren, renderExpirationTime); // If this render doesn't suspend, we need to delete the fallback\n // children. Wait until the complete phase, after we've confirmed the\n // fallback is no longer needed.\n // TODO: Would it be better to store the fallback fragment on\n // the stateNode?\n // Continue rendering the children, like we normally do.\n\n workInProgress.memoizedState = null;\n return workInProgress.child = primaryChild;\n }\n } else {\n // The current tree has not already timed out. That means the primary\n // children are not wrapped in a fragment fiber.\n var _currentPrimaryChild = current.child;\n\n if (nextDidTimeout) {\n // Timed out. Wrap the children in a fragment fiber to keep them\n // separate from the fallback children.\n var _nextFallbackChildren3 = nextProps.fallback;\n\n var _primaryChildFragment3 = createFiberFromFragment( // It shouldn't matter what the pending props are because we aren't\n // going to render this fragment.\n null, mode, NoWork, null);\n\n _primaryChildFragment3.return = workInProgress;\n _primaryChildFragment3.child = _currentPrimaryChild;\n\n if (_currentPrimaryChild !== null) {\n _currentPrimaryChild.return = _primaryChildFragment3;\n } // Even though we're creating a new fiber, there are no new children,\n // because we're reusing an already mounted tree. So we don't need to\n // schedule a placement.\n // primaryChildFragment.effectTag |= Placement;\n\n\n if ((workInProgress.mode & BlockingMode) === NoMode) {\n // Outside of blocking mode, we commit the effects from the\n // partially completed, timed-out tree, too.\n var _progressedState2 = workInProgress.memoizedState;\n\n var _progressedPrimaryChild2 = _progressedState2 !== null ? workInProgress.child.child : workInProgress.child;\n\n _primaryChildFragment3.child = _progressedPrimaryChild2;\n var _progressedChild3 = _progressedPrimaryChild2;\n\n while (_progressedChild3 !== null) {\n _progressedChild3.return = _primaryChildFragment3;\n _progressedChild3 = _progressedChild3.sibling;\n }\n } // Because primaryChildFragment is a new fiber that we're inserting as the\n // parent of a new tree, we need to set its treeBaseDuration.\n\n\n if ( workInProgress.mode & ProfileMode) {\n // treeBaseDuration is the sum of all the child tree base durations.\n var _treeBaseDuration2 = 0;\n var _hiddenChild2 = _primaryChildFragment3.child;\n\n while (_hiddenChild2 !== null) {\n _treeBaseDuration2 += _hiddenChild2.treeBaseDuration;\n _hiddenChild2 = _hiddenChild2.sibling;\n }\n\n _primaryChildFragment3.treeBaseDuration = _treeBaseDuration2;\n } // Create a fragment from the fallback children, too.\n\n\n var _fallbackChildFragment3 = createFiberFromFragment(_nextFallbackChildren3, mode, renderExpirationTime, null);\n\n _fallbackChildFragment3.return = workInProgress;\n _primaryChildFragment3.sibling = _fallbackChildFragment3;\n _fallbackChildFragment3.effectTag |= Placement;\n _primaryChildFragment3.childExpirationTime = NoWork; // Skip the primary children, and continue working on the\n // fallback children.\n\n workInProgress.memoizedState = SUSPENDED_MARKER;\n workInProgress.child = _primaryChildFragment3;\n return _fallbackChildFragment3;\n } else {\n // Still haven't timed out. Continue rendering the children, like we\n // normally do.\n workInProgress.memoizedState = null;\n var _nextPrimaryChildren2 = nextProps.children;\n return workInProgress.child = reconcileChildFibers(workInProgress, _currentPrimaryChild, _nextPrimaryChildren2, renderExpirationTime);\n }\n }\n }\n}\n\nfunction scheduleWorkOnFiber(fiber, renderExpirationTime) {\n if (fiber.expirationTime < renderExpirationTime) {\n fiber.expirationTime = renderExpirationTime;\n }\n\n var alternate = fiber.alternate;\n\n if (alternate !== null && alternate.expirationTime < renderExpirationTime) {\n alternate.expirationTime = renderExpirationTime;\n }\n\n scheduleWorkOnParentPath(fiber.return, renderExpirationTime);\n}\n\nfunction propagateSuspenseContextChange(workInProgress, firstChild, renderExpirationTime) {\n // Mark any Suspense boundaries with fallbacks as having work to do.\n // If they were previously forced into fallbacks, they may now be able\n // to unblock.\n var node = firstChild;\n\n while (node !== null) {\n if (node.tag === SuspenseComponent) {\n var state = node.memoizedState;\n\n if (state !== null) {\n scheduleWorkOnFiber(node, renderExpirationTime);\n }\n } else if (node.tag === SuspenseListComponent) {\n // If the tail is hidden there might not be an Suspense boundaries\n // to schedule work on. In this case we have to schedule it on the\n // list itself.\n // We don't have to traverse to the children of the list since\n // the list will propagate the change when it rerenders.\n scheduleWorkOnFiber(node, renderExpirationTime);\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === workInProgress) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction findLastContentRow(firstChild) {\n // This is going to find the last row among these children that is already\n // showing content on the screen, as opposed to being in fallback state or\n // new. If a row has multiple Suspense boundaries, any of them being in the\n // fallback state, counts as the whole row being in a fallback state.\n // Note that the \"rows\" will be workInProgress, but any nested children\n // will still be current since we haven't rendered them yet. The mounted\n // order may not be the same as the new order. We use the new order.\n var row = firstChild;\n var lastContentRow = null;\n\n while (row !== null) {\n var currentRow = row.alternate; // New rows can't be content rows.\n\n if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n lastContentRow = row;\n }\n\n row = row.sibling;\n }\n\n return lastContentRow;\n}\n\nfunction validateRevealOrder(revealOrder) {\n {\n if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {\n didWarnAboutRevealOrder[revealOrder] = true;\n\n if (typeof revealOrder === 'string') {\n switch (revealOrder.toLowerCase()) {\n case 'together':\n case 'forwards':\n case 'backwards':\n {\n error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase \"%s\" instead.', revealOrder, revealOrder.toLowerCase());\n\n break;\n }\n\n case 'forward':\n case 'backward':\n {\n error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use \"%ss\" instead.', revealOrder, revealOrder.toLowerCase());\n\n break;\n }\n\n default:\n error('\"%s\" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n\n break;\n }\n } else {\n error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n }\n }\n }\n}\n\nfunction validateTailOptions(tailMode, revealOrder) {\n {\n if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {\n if (tailMode !== 'collapsed' && tailMode !== 'hidden') {\n didWarnAboutTailOptions[tailMode] = true;\n\n error('\"%s\" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean \"collapsed\" or \"hidden\"?', tailMode);\n } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {\n didWarnAboutTailOptions[tailMode] = true;\n\n error('<SuspenseList tail=\"%s\" /> is only valid if revealOrder is ' + '\"forwards\" or \"backwards\". ' + 'Did you mean to specify revealOrder=\"forwards\"?', tailMode);\n }\n }\n }\n}\n\nfunction validateSuspenseListNestedChild(childSlot, index) {\n {\n var isArray = Array.isArray(childSlot);\n var isIterable = !isArray && typeof getIteratorFn(childSlot) === 'function';\n\n if (isArray || isIterable) {\n var type = isArray ? 'array' : 'iterable';\n\n error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);\n\n return false;\n }\n }\n\n return true;\n}\n\nfunction validateSuspenseListChildren(children, revealOrder) {\n {\n if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n if (!validateSuspenseListNestedChild(children[i], i)) {\n return;\n }\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n\n if (typeof iteratorFn === 'function') {\n var childrenIterator = iteratorFn.call(children);\n\n if (childrenIterator) {\n var step = childrenIterator.next();\n var _i = 0;\n\n for (; !step.done; step = childrenIterator.next()) {\n if (!validateSuspenseListNestedChild(step.value, _i)) {\n return;\n }\n\n _i++;\n }\n }\n } else {\n error('A single row was passed to a <SuspenseList revealOrder=\"%s\" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);\n }\n }\n }\n }\n}\n\nfunction initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode, lastEffectBeforeRendering) {\n var renderState = workInProgress.memoizedState;\n\n if (renderState === null) {\n workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailExpiration: 0,\n tailMode: tailMode,\n lastEffect: lastEffectBeforeRendering\n };\n } else {\n // We can reuse the existing object from previous renders.\n renderState.isBackwards = isBackwards;\n renderState.rendering = null;\n renderState.renderingStartTime = 0;\n renderState.last = lastContentRow;\n renderState.tail = tail;\n renderState.tailExpiration = 0;\n renderState.tailMode = tailMode;\n renderState.lastEffect = lastEffectBeforeRendering;\n }\n} // This can end up rendering this component multiple passes.\n// The first pass splits the children fibers into two sets. A head and tail.\n// We first render the head. If anything is in fallback state, we do another\n// pass through beginWork to rerender all children (including the tail) with\n// the force suspend context. If the first render didn't have anything in\n// in fallback state. Then we render each row in the tail one-by-one.\n// That happens in the completeWork phase without going back to beginWork.\n\n\nfunction updateSuspenseListComponent(current, workInProgress, renderExpirationTime) {\n var nextProps = workInProgress.pendingProps;\n var revealOrder = nextProps.revealOrder;\n var tailMode = nextProps.tail;\n var newChildren = nextProps.children;\n validateRevealOrder(revealOrder);\n validateTailOptions(tailMode, revealOrder);\n validateSuspenseListChildren(newChildren, revealOrder);\n reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n var suspenseContext = suspenseStackCursor.current;\n var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback);\n\n if (shouldForceFallback) {\n suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n workInProgress.effectTag |= DidCapture;\n } else {\n var didSuspendBefore = current !== null && (current.effectTag & DidCapture) !== NoEffect;\n\n if (didSuspendBefore) {\n // If we previously forced a fallback, we need to schedule work\n // on any nested boundaries to let them know to try to render\n // again. This is the same as context updating.\n propagateSuspenseContextChange(workInProgress, workInProgress.child, renderExpirationTime);\n }\n\n suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n }\n\n pushSuspenseContext(workInProgress, suspenseContext);\n\n if ((workInProgress.mode & BlockingMode) === NoMode) {\n // Outside of blocking mode, SuspenseList doesn't work so we just\n // use make it a noop by treating it as the default revealOrder.\n workInProgress.memoizedState = null;\n } else {\n switch (revealOrder) {\n case 'forwards':\n {\n var lastContentRow = findLastContentRow(workInProgress.child);\n var tail;\n\n if (lastContentRow === null) {\n // The whole list is part of the tail.\n // TODO: We could fast path by just rendering the tail now.\n tail = workInProgress.child;\n workInProgress.child = null;\n } else {\n // Disconnect the tail rows after the content row.\n // We're going to render them separately later.\n tail = lastContentRow.sibling;\n lastContentRow.sibling = null;\n }\n\n initSuspenseListRenderState(workInProgress, false, // isBackwards\n tail, lastContentRow, tailMode, workInProgress.lastEffect);\n break;\n }\n\n case 'backwards':\n {\n // We're going to find the first row that has existing content.\n // At the same time we're going to reverse the list of everything\n // we pass in the meantime. That's going to be our tail in reverse\n // order.\n var _tail = null;\n var row = workInProgress.child;\n workInProgress.child = null;\n\n while (row !== null) {\n var currentRow = row.alternate; // New rows can't be content rows.\n\n if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n // This is the beginning of the main content.\n workInProgress.child = row;\n break;\n }\n\n var nextRow = row.sibling;\n row.sibling = _tail;\n _tail = row;\n row = nextRow;\n } // TODO: If workInProgress.child is null, we can continue on the tail immediately.\n\n\n initSuspenseListRenderState(workInProgress, true, // isBackwards\n _tail, null, // last\n tailMode, workInProgress.lastEffect);\n break;\n }\n\n case 'together':\n {\n initSuspenseListRenderState(workInProgress, false, // isBackwards\n null, // tail\n null, // last\n undefined, workInProgress.lastEffect);\n break;\n }\n\n default:\n {\n // The default reveal order is the same as not having\n // a boundary.\n workInProgress.memoizedState = null;\n }\n }\n }\n\n return workInProgress.child;\n}\n\nfunction updatePortalComponent(current, workInProgress, renderExpirationTime) {\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n var nextChildren = workInProgress.pendingProps;\n\n if (current === null) {\n // Portals are special because we don't append the children during mount\n // but at commit. Therefore we need to track insertions which the normal\n // flow doesn't do during mount. This doesn't happen at the root because\n // the root always starts with a \"current\" with a null child.\n // TODO: Consider unifying this with how the root works.\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n } else {\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n }\n\n return workInProgress.child;\n}\n\nfunction updateContextProvider(current, workInProgress, renderExpirationTime) {\n var providerType = workInProgress.type;\n var context = providerType._context;\n var newProps = workInProgress.pendingProps;\n var oldProps = workInProgress.memoizedProps;\n var newValue = newProps.value;\n\n {\n var providerPropTypes = workInProgress.type.propTypes;\n\n if (providerPropTypes) {\n checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider', getCurrentFiberStackInDev);\n }\n }\n\n pushProvider(workInProgress, newValue);\n\n if (oldProps !== null) {\n var oldValue = oldProps.value;\n var changedBits = calculateChangedBits(context, newValue, oldValue);\n\n if (changedBits === 0) {\n // No change. Bailout early if children are the same.\n if (oldProps.children === newProps.children && !hasContextChanged()) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n } else {\n // The context value changed. Search for matching consumers and schedule\n // them to update.\n propagateContextChange(workInProgress, context, changedBits, renderExpirationTime);\n }\n }\n\n var newChildren = newProps.children;\n reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingContextAsConsumer = false;\n\nfunction updateContextConsumer(current, workInProgress, renderExpirationTime) {\n var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In\n // DEV mode, we create a separate object for Context.Consumer that acts\n // like a proxy to Context. This proxy object adds unnecessary code in PROD\n // so we use the old behaviour (Context.Consumer references Context) to\n // reduce size and overhead. The separate object references context via\n // a property called \"_context\", which also gives us the ability to check\n // in DEV mode if this property exists or not and warn if it does not.\n\n {\n if (context._context === undefined) {\n // This may be because it's a Context (rather than a Consumer).\n // Or it may be because it's older React where they're the same thing.\n // We only want to warn if we're sure it's a new React.\n if (context !== context.Consumer) {\n if (!hasWarnedAboutUsingContextAsConsumer) {\n hasWarnedAboutUsingContextAsConsumer = true;\n\n error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n }\n } else {\n context = context._context;\n }\n }\n\n var newProps = workInProgress.pendingProps;\n var render = newProps.children;\n\n {\n if (typeof render !== 'function') {\n error('A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');\n }\n }\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n var newValue = readContext(context, newProps.unstable_observedBits);\n var newChildren;\n\n {\n ReactCurrentOwner$1.current = workInProgress;\n setIsRendering(true);\n newChildren = render(newValue);\n setIsRendering(false);\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction markWorkInProgressReceivedUpdate() {\n didReceiveUpdate = true;\n}\n\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime) {\n cancelWorkTimer(workInProgress);\n\n if (current !== null) {\n // Reuse previous dependencies\n workInProgress.dependencies = current.dependencies;\n }\n\n {\n // Don't update \"base\" render times for bailouts.\n stopProfilerTimerIfRunning();\n }\n\n var updateExpirationTime = workInProgress.expirationTime;\n\n if (updateExpirationTime !== NoWork) {\n markUnprocessedUpdateTime(updateExpirationTime);\n } // Check if the children have any pending work.\n\n\n var childExpirationTime = workInProgress.childExpirationTime;\n\n if (childExpirationTime < renderExpirationTime) {\n // The children don't have any work either. We can skip them.\n // TODO: Once we add back resuming, we should check if the children are\n // a work-in-progress set. If so, we need to transfer their effects.\n return null;\n } else {\n // This fiber doesn't have work, but its subtree does. Clone the child\n // fibers and continue.\n cloneChildFibers(current, workInProgress);\n return workInProgress.child;\n }\n}\n\nfunction remountFiber(current, oldWorkInProgress, newWorkInProgress) {\n {\n var returnFiber = oldWorkInProgress.return;\n\n if (returnFiber === null) {\n throw new Error('Cannot swap the root fiber.');\n } // Disconnect from the old current.\n // It will get deleted.\n\n\n current.alternate = null;\n oldWorkInProgress.alternate = null; // Connect to the new tree.\n\n newWorkInProgress.index = oldWorkInProgress.index;\n newWorkInProgress.sibling = oldWorkInProgress.sibling;\n newWorkInProgress.return = oldWorkInProgress.return;\n newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.\n\n if (oldWorkInProgress === returnFiber.child) {\n returnFiber.child = newWorkInProgress;\n } else {\n var prevSibling = returnFiber.child;\n\n if (prevSibling === null) {\n throw new Error('Expected parent to have a child.');\n }\n\n while (prevSibling.sibling !== oldWorkInProgress) {\n prevSibling = prevSibling.sibling;\n\n if (prevSibling === null) {\n throw new Error('Expected to find the previous sibling.');\n }\n }\n\n prevSibling.sibling = newWorkInProgress;\n } // Delete the old fiber and place the new one.\n // Since the old fiber is disconnected, we have to schedule it manually.\n\n\n var last = returnFiber.lastEffect;\n\n if (last !== null) {\n last.nextEffect = current;\n returnFiber.lastEffect = current;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = current;\n }\n\n current.nextEffect = null;\n current.effectTag = Deletion;\n newWorkInProgress.effectTag |= Placement; // Restart work from the new fiber.\n\n return newWorkInProgress;\n }\n}\n\nfunction beginWork(current, workInProgress, renderExpirationTime) {\n var updateExpirationTime = workInProgress.expirationTime;\n\n {\n if (workInProgress._debugNeedsRemount && current !== null) {\n // This will restart the begin phase with a new fiber.\n return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.expirationTime));\n }\n }\n\n if (current !== null) {\n var oldProps = current.memoizedProps;\n var newProps = workInProgress.pendingProps;\n\n if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:\n workInProgress.type !== current.type )) {\n // If props or context changed, mark the fiber as having performed work.\n // This may be unset if the props are determined to be equal later (memo).\n didReceiveUpdate = true;\n } else if (updateExpirationTime < renderExpirationTime) {\n didReceiveUpdate = false; // This fiber does not have any pending work. Bailout without entering\n // the begin phase. There's still some bookkeeping we that needs to be done\n // in this optimized path, mostly pushing stuff onto the stack.\n\n switch (workInProgress.tag) {\n case HostRoot:\n pushHostRootContext(workInProgress);\n resetHydrationState();\n break;\n\n case HostComponent:\n pushHostContext(workInProgress);\n\n if (workInProgress.mode & ConcurrentMode && renderExpirationTime !== Never && shouldDeprioritizeSubtree(workInProgress.type, newProps)) {\n {\n markSpawnedWork(Never);\n } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n workInProgress.expirationTime = workInProgress.childExpirationTime = Never;\n return null;\n }\n\n break;\n\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n pushContextProvider(workInProgress);\n }\n\n break;\n }\n\n case HostPortal:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n\n case ContextProvider:\n {\n var newValue = workInProgress.memoizedProps.value;\n pushProvider(workInProgress, newValue);\n break;\n }\n\n case Profiler:\n {\n // Profiler should only call onRender when one of its descendants actually rendered.\n var hasChildWork = workInProgress.childExpirationTime >= renderExpirationTime;\n\n if (hasChildWork) {\n workInProgress.effectTag |= Update;\n }\n }\n\n break;\n\n case SuspenseComponent:\n {\n var state = workInProgress.memoizedState;\n\n if (state !== null) {\n // whether to retry the primary children, or to skip over it and\n // go straight to the fallback. Check the priority of the primary\n // child fragment.\n\n\n var primaryChildFragment = workInProgress.child;\n var primaryChildExpirationTime = primaryChildFragment.childExpirationTime;\n\n if (primaryChildExpirationTime !== NoWork && primaryChildExpirationTime >= renderExpirationTime) {\n // The primary children have pending work. Use the normal path\n // to attempt to render the primary children again.\n return updateSuspenseComponent(current, workInProgress, renderExpirationTime);\n } else {\n pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient\n // priority. Bailout.\n\n var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n\n if (child !== null) {\n // The fallback children have pending work. Skip over the\n // primary children and work on the fallback.\n return child.sibling;\n } else {\n return null;\n }\n }\n } else {\n pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current));\n }\n\n break;\n }\n\n case SuspenseListComponent:\n {\n var didSuspendBefore = (current.effectTag & DidCapture) !== NoEffect;\n\n var _hasChildWork = workInProgress.childExpirationTime >= renderExpirationTime;\n\n if (didSuspendBefore) {\n if (_hasChildWork) {\n // If something was in fallback state last time, and we have all the\n // same children then we're still in progressive loading state.\n // Something might get unblocked by state updates or retries in the\n // tree which will affect the tail. So we need to use the normal\n // path to compute the correct tail.\n return updateSuspenseListComponent(current, workInProgress, renderExpirationTime);\n } // If none of the children had any work, that means that none of\n // them got retried so they'll still be blocked in the same way\n // as before. We can fast bail out.\n\n\n workInProgress.effectTag |= DidCapture;\n } // If nothing suspended before and we're rendering the same children,\n // then the tail doesn't matter. Anything new that suspends will work\n // in the \"together\" mode, so we can continue from the state we had.\n\n\n var renderState = workInProgress.memoizedState;\n\n if (renderState !== null) {\n // Reset to the \"together\" mode in case we've started a different\n // update in the past but didn't complete it.\n renderState.rendering = null;\n renderState.tail = null;\n }\n\n pushSuspenseContext(workInProgress, suspenseStackCursor.current);\n\n if (_hasChildWork) {\n break;\n } else {\n // If none of the children had any work, that means that none of\n // them got retried so they'll still be blocked in the same way\n // as before. We can fast bail out.\n return null;\n }\n }\n }\n\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n } else {\n // An update was scheduled on this fiber, but there are no new props\n // nor legacy context. Set this to false. If an update queue or context\n // consumer produces a changed value, it will set this to true. Otherwise,\n // the component will assume the children have not changed and bail out.\n didReceiveUpdate = false;\n }\n } else {\n didReceiveUpdate = false;\n } // Before entering the begin phase, clear pending update priority.\n // TODO: This assumes that we're about to evaluate the component and process\n // the update queue. However, there's an exception: SimpleMemoComponent\n // sometimes bails out later in the begin phase. This indicates that we should\n // move this assignment out of the common path and into each branch.\n\n\n workInProgress.expirationTime = NoWork;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n {\n return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderExpirationTime);\n }\n\n case LazyComponent:\n {\n var elementType = workInProgress.elementType;\n return mountLazyComponent(current, workInProgress, elementType, updateExpirationTime, renderExpirationTime);\n }\n\n case FunctionComponent:\n {\n var _Component = workInProgress.type;\n var unresolvedProps = workInProgress.pendingProps;\n var resolvedProps = workInProgress.elementType === _Component ? unresolvedProps : resolveDefaultProps(_Component, unresolvedProps);\n return updateFunctionComponent(current, workInProgress, _Component, resolvedProps, renderExpirationTime);\n }\n\n case ClassComponent:\n {\n var _Component2 = workInProgress.type;\n var _unresolvedProps = workInProgress.pendingProps;\n\n var _resolvedProps = workInProgress.elementType === _Component2 ? _unresolvedProps : resolveDefaultProps(_Component2, _unresolvedProps);\n\n return updateClassComponent(current, workInProgress, _Component2, _resolvedProps, renderExpirationTime);\n }\n\n case HostRoot:\n return updateHostRoot(current, workInProgress, renderExpirationTime);\n\n case HostComponent:\n return updateHostComponent(current, workInProgress, renderExpirationTime);\n\n case HostText:\n return updateHostText(current, workInProgress);\n\n case SuspenseComponent:\n return updateSuspenseComponent(current, workInProgress, renderExpirationTime);\n\n case HostPortal:\n return updatePortalComponent(current, workInProgress, renderExpirationTime);\n\n case ForwardRef:\n {\n var type = workInProgress.type;\n var _unresolvedProps2 = workInProgress.pendingProps;\n\n var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);\n\n return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderExpirationTime);\n }\n\n case Fragment:\n return updateFragment(current, workInProgress, renderExpirationTime);\n\n case Mode:\n return updateMode(current, workInProgress, renderExpirationTime);\n\n case Profiler:\n return updateProfiler(current, workInProgress, renderExpirationTime);\n\n case ContextProvider:\n return updateContextProvider(current, workInProgress, renderExpirationTime);\n\n case ContextConsumer:\n return updateContextConsumer(current, workInProgress, renderExpirationTime);\n\n case MemoComponent:\n {\n var _type2 = workInProgress.type;\n var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.\n\n var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);\n\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = _type2.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only\n 'prop', getComponentName(_type2), getCurrentFiberStackInDev);\n }\n }\n }\n\n _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);\n return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, updateExpirationTime, renderExpirationTime);\n }\n\n case SimpleMemoComponent:\n {\n return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, updateExpirationTime, renderExpirationTime);\n }\n\n case IncompleteClassComponent:\n {\n var _Component3 = workInProgress.type;\n var _unresolvedProps4 = workInProgress.pendingProps;\n\n var _resolvedProps4 = workInProgress.elementType === _Component3 ? _unresolvedProps4 : resolveDefaultProps(_Component3, _unresolvedProps4);\n\n return mountIncompleteClassComponent(current, workInProgress, _Component3, _resolvedProps4, renderExpirationTime);\n }\n\n case SuspenseListComponent:\n {\n return updateSuspenseListComponent(current, workInProgress, renderExpirationTime);\n }\n }\n\n {\n {\n throw Error( \"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction markUpdate(workInProgress) {\n // Tag the fiber with an update effect. This turns a Placement into\n // a PlacementAndUpdate.\n workInProgress.effectTag |= Update;\n}\n\nfunction markRef$1(workInProgress) {\n workInProgress.effectTag |= Ref;\n}\n\nvar appendAllChildren;\nvar updateHostContainer;\nvar updateHostComponent$1;\nvar updateHostText$1;\n\n{\n // Mutation mode\n appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {\n // We only have the top Fiber that was created but we need recurse down its\n // children to find all the terminal nodes.\n var node = workInProgress.child;\n\n while (node !== null) {\n if (node.tag === HostComponent || node.tag === HostText) {\n appendInitialChild(parent, node.stateNode);\n } else if (node.tag === HostPortal) ; else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === workInProgress) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n };\n\n updateHostContainer = function (workInProgress) {// Noop\n };\n\n updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {\n // If we have an alternate, that means this is an update and we need to\n // schedule a side-effect to do the updates.\n var oldProps = current.memoizedProps;\n\n if (oldProps === newProps) {\n // In mutation mode, this is sufficient for a bailout because\n // we won't touch this node even if children changed.\n return;\n } // If we get updated because one of our children updated, we don't\n // have newProps so we'll have to reuse them.\n // TODO: Split the update API as separate for the props vs. children.\n // Even better would be if children weren't special cased at all tho.\n\n\n var instance = workInProgress.stateNode;\n var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host\n // component is hitting the resume path. Figure out why. Possibly\n // related to `hidden`.\n\n var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component.\n\n workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update. All the work is done in commitWork.\n\n if (updatePayload) {\n markUpdate(workInProgress);\n }\n };\n\n updateHostText$1 = function (current, workInProgress, oldText, newText) {\n // If the text differs, mark it as an update. All the work in done in commitWork.\n if (oldText !== newText) {\n markUpdate(workInProgress);\n }\n };\n}\n\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n switch (renderState.tailMode) {\n case 'hidden':\n {\n // Any insertions at the end of the tail list after this point\n // should be invisible. If there are already mounted boundaries\n // anything before them are not considered for collapsing.\n // Therefore we need to go through the whole tail to find if\n // there are any.\n var tailNode = renderState.tail;\n var lastTailNode = null;\n\n while (tailNode !== null) {\n if (tailNode.alternate !== null) {\n lastTailNode = tailNode;\n }\n\n tailNode = tailNode.sibling;\n } // Next we're simply going to delete all insertions after the\n // last rendered item.\n\n\n if (lastTailNode === null) {\n // All remaining items in the tail are insertions.\n renderState.tail = null;\n } else {\n // Detach the insertion after the last node that was already\n // inserted.\n lastTailNode.sibling = null;\n }\n\n break;\n }\n\n case 'collapsed':\n {\n // Any insertions at the end of the tail list after this point\n // should be invisible. If there are already mounted boundaries\n // anything before them are not considered for collapsing.\n // Therefore we need to go through the whole tail to find if\n // there are any.\n var _tailNode = renderState.tail;\n var _lastTailNode = null;\n\n while (_tailNode !== null) {\n if (_tailNode.alternate !== null) {\n _lastTailNode = _tailNode;\n }\n\n _tailNode = _tailNode.sibling;\n } // Next we're simply going to delete all insertions after the\n // last rendered item.\n\n\n if (_lastTailNode === null) {\n // All remaining items in the tail are insertions.\n if (!hasRenderedATailFallback && renderState.tail !== null) {\n // We suspended during the head. We want to show at least one\n // row at the tail. So we'll keep on and cut off the rest.\n renderState.tail.sibling = null;\n } else {\n renderState.tail = null;\n }\n } else {\n // Detach the insertion after the last node that was already\n // inserted.\n _lastTailNode.sibling = null;\n }\n\n break;\n }\n }\n}\n\nfunction completeWork(current, workInProgress, renderExpirationTime) {\n var newProps = workInProgress.pendingProps;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n case LazyComponent:\n case SimpleMemoComponent:\n case FunctionComponent:\n case ForwardRef:\n case Fragment:\n case Mode:\n case Profiler:\n case ContextConsumer:\n case MemoComponent:\n return null;\n\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n\n return null;\n }\n\n case HostRoot:\n {\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n var fiberRoot = workInProgress.stateNode;\n\n if (fiberRoot.pendingContext) {\n fiberRoot.context = fiberRoot.pendingContext;\n fiberRoot.pendingContext = null;\n }\n\n if (current === null || current.child === null) {\n // If we hydrated, pop so that we can delete any remaining children\n // that weren't hydrated.\n var wasHydrated = popHydrationState(workInProgress);\n\n if (wasHydrated) {\n // If we hydrated, then we'll need to schedule an update for\n // the commit side-effects on the root.\n markUpdate(workInProgress);\n }\n }\n\n updateHostContainer(workInProgress);\n return null;\n }\n\n case HostComponent:\n {\n popHostContext(workInProgress);\n var rootContainerInstance = getRootHostContainer();\n var type = workInProgress.type;\n\n if (current !== null && workInProgress.stateNode != null) {\n updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);\n\n if (current.ref !== workInProgress.ref) {\n markRef$1(workInProgress);\n }\n } else {\n if (!newProps) {\n if (!(workInProgress.stateNode !== null)) {\n {\n throw Error( \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n } // This can happen when we abort work.\n\n\n return null;\n }\n\n var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context\n // \"stack\" as the parent. Then append children as we go in beginWork\n // or completeWork depending on whether we want to add them top->down or\n // bottom->up. Top->down is faster in IE11.\n\n var _wasHydrated = popHydrationState(workInProgress);\n\n if (_wasHydrated) {\n // TODO: Move this and createInstance step into the beginPhase\n // to consolidate.\n if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {\n // If changes to the hydrated node need to be applied at the\n // commit-phase we mark this as such.\n markUpdate(workInProgress);\n }\n } else {\n var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);\n appendAllChildren(instance, workInProgress, false, false); // This needs to be set before we mount Flare event listeners\n\n workInProgress.stateNode = instance;\n // (eg DOM renderer supports auto-focus for certain elements).\n // Make sure such renderers get scheduled for later work.\n\n\n if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) {\n markUpdate(workInProgress);\n }\n }\n\n if (workInProgress.ref !== null) {\n // If there is a ref on a host node we need to schedule a callback\n markRef$1(workInProgress);\n }\n }\n\n return null;\n }\n\n case HostText:\n {\n var newText = newProps;\n\n if (current && workInProgress.stateNode != null) {\n var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need\n // to schedule a side-effect to do the updates.\n\n updateHostText$1(current, workInProgress, oldText, newText);\n } else {\n if (typeof newText !== 'string') {\n if (!(workInProgress.stateNode !== null)) {\n {\n throw Error( \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n } // This can happen when we abort work.\n\n }\n\n var _rootContainerInstance = getRootHostContainer();\n\n var _currentHostContext = getHostContext();\n\n var _wasHydrated2 = popHydrationState(workInProgress);\n\n if (_wasHydrated2) {\n if (prepareToHydrateHostTextInstance(workInProgress)) {\n markUpdate(workInProgress);\n }\n } else {\n workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);\n }\n }\n\n return null;\n }\n\n case SuspenseComponent:\n {\n popSuspenseContext(workInProgress);\n var nextState = workInProgress.memoizedState;\n\n if ((workInProgress.effectTag & DidCapture) !== NoEffect) {\n // Something suspended. Re-render with the fallback children.\n workInProgress.expirationTime = renderExpirationTime; // Do not reset the effect list.\n\n return workInProgress;\n }\n\n var nextDidTimeout = nextState !== null;\n var prevDidTimeout = false;\n\n if (current === null) {\n if (workInProgress.memoizedProps.fallback !== undefined) {\n popHydrationState(workInProgress);\n }\n } else {\n var prevState = current.memoizedState;\n prevDidTimeout = prevState !== null;\n\n if (!nextDidTimeout && prevState !== null) {\n // We just switched from the fallback to the normal children.\n // Delete the fallback.\n // TODO: Would it be better to store the fallback fragment on\n // the stateNode during the begin phase?\n var currentFallbackChild = current.child.sibling;\n\n if (currentFallbackChild !== null) {\n // Deletions go at the beginning of the return fiber's effect list\n var first = workInProgress.firstEffect;\n\n if (first !== null) {\n workInProgress.firstEffect = currentFallbackChild;\n currentFallbackChild.nextEffect = first;\n } else {\n workInProgress.firstEffect = workInProgress.lastEffect = currentFallbackChild;\n currentFallbackChild.nextEffect = null;\n }\n\n currentFallbackChild.effectTag = Deletion;\n }\n }\n }\n\n if (nextDidTimeout && !prevDidTimeout) {\n // If this subtreee is running in blocking mode we can suspend,\n // otherwise we won't suspend.\n // TODO: This will still suspend a synchronous tree if anything\n // in the concurrent tree already suspended during this render.\n // This is a known bug.\n if ((workInProgress.mode & BlockingMode) !== NoMode) {\n // TODO: Move this back to throwException because this is too late\n // if this is a large tree which is common for initial loads. We\n // don't know if we should restart a render or not until we get\n // this marker, and this is too late.\n // If this render already had a ping or lower pri updates,\n // and this is the first time we know we're going to suspend we\n // should be able to immediately restart from within throwException.\n var hasInvisibleChildContext = current === null && workInProgress.memoizedProps.unstable_avoidThisFallback !== true;\n\n if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) {\n // If this was in an invisible tree or a new render, then showing\n // this boundary is ok.\n renderDidSuspend();\n } else {\n // Otherwise, we're going to have to hide content so we should\n // suspend for longer if possible.\n renderDidSuspendDelayIfPossible();\n }\n }\n }\n\n {\n // TODO: Only schedule updates if these values are non equal, i.e. it changed.\n if (nextDidTimeout || prevDidTimeout) {\n // If this boundary just timed out, schedule an effect to attach a\n // retry listener to the promise. This flag is also used to hide the\n // primary children. In mutation mode, we also need the flag to\n // *unhide* children that were previously hidden, so check if this\n // is currently timed out, too.\n workInProgress.effectTag |= Update;\n }\n }\n\n return null;\n }\n\n case HostPortal:\n popHostContainer(workInProgress);\n updateHostContainer(workInProgress);\n return null;\n\n case ContextProvider:\n // Pop provider fiber\n popProvider(workInProgress);\n return null;\n\n case IncompleteClassComponent:\n {\n // Same as class component case. I put it down here so that the tags are\n // sequential to ensure this switch is compiled to a jump table.\n var _Component = workInProgress.type;\n\n if (isContextProvider(_Component)) {\n popContext(workInProgress);\n }\n\n return null;\n }\n\n case SuspenseListComponent:\n {\n popSuspenseContext(workInProgress);\n var renderState = workInProgress.memoizedState;\n\n if (renderState === null) {\n // We're running in the default, \"independent\" mode.\n // We don't do anything in this mode.\n return null;\n }\n\n var didSuspendAlready = (workInProgress.effectTag & DidCapture) !== NoEffect;\n var renderedTail = renderState.rendering;\n\n if (renderedTail === null) {\n // We just rendered the head.\n if (!didSuspendAlready) {\n // This is the first pass. We need to figure out if anything is still\n // suspended in the rendered set.\n // If new content unsuspended, but there's still some content that\n // didn't. Then we need to do a second pass that forces everything\n // to keep showing their fallbacks.\n // We might be suspended if something in this render pass suspended, or\n // something in the previous committed pass suspended. Otherwise,\n // there's no chance so we can skip the expensive call to\n // findFirstSuspended.\n var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.effectTag & DidCapture) === NoEffect);\n\n if (!cannotBeSuspended) {\n var row = workInProgress.child;\n\n while (row !== null) {\n var suspended = findFirstSuspended(row);\n\n if (suspended !== null) {\n didSuspendAlready = true;\n workInProgress.effectTag |= DidCapture;\n cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as\n // part of the second pass. In that case nothing will subscribe to\n // its thennables. Instead, we'll transfer its thennables to the\n // SuspenseList so that it can retry if they resolve.\n // There might be multiple of these in the list but since we're\n // going to wait for all of them anyway, it doesn't really matter\n // which ones gets to ping. In theory we could get clever and keep\n // track of how many dependencies remain but it gets tricky because\n // in the meantime, we can add/remove/change items and dependencies.\n // We might bail out of the loop before finding any but that\n // doesn't matter since that means that the other boundaries that\n // we did find already has their listeners attached.\n\n var newThennables = suspended.updateQueue;\n\n if (newThennables !== null) {\n workInProgress.updateQueue = newThennables;\n workInProgress.effectTag |= Update;\n } // Rerender the whole list, but this time, we'll force fallbacks\n // to stay in place.\n // Reset the effect list before doing the second pass since that's now invalid.\n\n\n if (renderState.lastEffect === null) {\n workInProgress.firstEffect = null;\n }\n\n workInProgress.lastEffect = renderState.lastEffect; // Reset the child fibers to their original state.\n\n resetChildFibers(workInProgress, renderExpirationTime); // Set up the Suspense Context to force suspense and immediately\n // rerender the children.\n\n pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback));\n return workInProgress.child;\n }\n\n row = row.sibling;\n }\n }\n } else {\n cutOffTailIfNeeded(renderState, false);\n } // Next we're going to render the tail.\n\n } else {\n // Append the rendered row to the child list.\n if (!didSuspendAlready) {\n var _suspended = findFirstSuspended(renderedTail);\n\n if (_suspended !== null) {\n workInProgress.effectTag |= DidCapture;\n didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't\n // get lost if this row ends up dropped during a second pass.\n\n var _newThennables = _suspended.updateQueue;\n\n if (_newThennables !== null) {\n workInProgress.updateQueue = _newThennables;\n workInProgress.effectTag |= Update;\n }\n\n cutOffTailIfNeeded(renderState, true); // This might have been modified.\n\n if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate) {\n // We need to delete the row we just rendered.\n // Reset the effect list to what it was before we rendered this\n // child. The nested children have already appended themselves.\n var lastEffect = workInProgress.lastEffect = renderState.lastEffect; // Remove any effects that were appended after this point.\n\n if (lastEffect !== null) {\n lastEffect.nextEffect = null;\n } // We're done.\n\n\n return null;\n }\n } else if ( // The time it took to render last row is greater than time until\n // the expiration.\n now() * 2 - renderState.renderingStartTime > renderState.tailExpiration && renderExpirationTime > Never) {\n // We have now passed our CPU deadline and we'll just give up further\n // attempts to render the main content and only render fallbacks.\n // The assumption is that this is usually faster.\n workInProgress.effectTag |= DidCapture;\n didSuspendAlready = true;\n cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n // to get it started back up to attempt the next item. If we can show\n // them, then they really have the same priority as this render.\n // So we'll pick it back up the very next render pass once we've had\n // an opportunity to yield for paint.\n\n var nextPriority = renderExpirationTime - 1;\n workInProgress.expirationTime = workInProgress.childExpirationTime = nextPriority;\n\n {\n markSpawnedWork(nextPriority);\n }\n }\n }\n\n if (renderState.isBackwards) {\n // The effect list of the backwards tail will have been added\n // to the end. This breaks the guarantee that life-cycles fire in\n // sibling order but that isn't a strong guarantee promised by React.\n // Especially since these might also just pop in during future commits.\n // Append to the beginning of the list.\n renderedTail.sibling = workInProgress.child;\n workInProgress.child = renderedTail;\n } else {\n var previousSibling = renderState.last;\n\n if (previousSibling !== null) {\n previousSibling.sibling = renderedTail;\n } else {\n workInProgress.child = renderedTail;\n }\n\n renderState.last = renderedTail;\n }\n }\n\n if (renderState.tail !== null) {\n // We still have tail rows to render.\n if (renderState.tailExpiration === 0) {\n // Heuristic for how long we're willing to spend rendering rows\n // until we just give up and show what we have so far.\n var TAIL_EXPIRATION_TIMEOUT_MS = 500;\n renderState.tailExpiration = now() + TAIL_EXPIRATION_TIMEOUT_MS; // TODO: This is meant to mimic the train model or JND but this\n // is a per component value. It should really be since the start\n // of the total render or last commit. Consider using something like\n // globalMostRecentFallbackTime. That doesn't account for being\n // suspended for part of the time or when it's a new render.\n // It should probably use a global start time value instead.\n } // Pop a row.\n\n\n var next = renderState.tail;\n renderState.rendering = next;\n renderState.tail = next.sibling;\n renderState.lastEffect = workInProgress.lastEffect;\n renderState.renderingStartTime = now();\n next.sibling = null; // Restore the context.\n // TODO: We can probably just avoid popping it instead and only\n // setting it the first time we go from not suspended to suspended.\n\n var suspenseContext = suspenseStackCursor.current;\n\n if (didSuspendAlready) {\n suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n } else {\n suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n }\n\n pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row.\n\n return next;\n }\n\n return null;\n }\n }\n\n {\n {\n throw Error( \"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction unwindWork(workInProgress, renderExpirationTime) {\n switch (workInProgress.tag) {\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n\n var effectTag = workInProgress.effectTag;\n\n if (effectTag & ShouldCapture) {\n workInProgress.effectTag = effectTag & ~ShouldCapture | DidCapture;\n return workInProgress;\n }\n\n return null;\n }\n\n case HostRoot:\n {\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n var _effectTag = workInProgress.effectTag;\n\n if (!((_effectTag & DidCapture) === NoEffect)) {\n {\n throw Error( \"The root failed to unmount after an error. This is likely a bug in React. Please file an issue.\" );\n }\n }\n\n workInProgress.effectTag = _effectTag & ~ShouldCapture | DidCapture;\n return workInProgress;\n }\n\n case HostComponent:\n {\n // TODO: popHydrationState\n popHostContext(workInProgress);\n return null;\n }\n\n case SuspenseComponent:\n {\n popSuspenseContext(workInProgress);\n\n var _effectTag2 = workInProgress.effectTag;\n\n if (_effectTag2 & ShouldCapture) {\n workInProgress.effectTag = _effectTag2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.\n\n return workInProgress;\n }\n\n return null;\n }\n\n case SuspenseListComponent:\n {\n popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been\n // caught by a nested boundary. If not, it should bubble through.\n\n return null;\n }\n\n case HostPortal:\n popHostContainer(workInProgress);\n return null;\n\n case ContextProvider:\n popProvider(workInProgress);\n return null;\n\n default:\n return null;\n }\n}\n\nfunction unwindInterruptedWork(interruptedWork) {\n switch (interruptedWork.tag) {\n case ClassComponent:\n {\n var childContextTypes = interruptedWork.type.childContextTypes;\n\n if (childContextTypes !== null && childContextTypes !== undefined) {\n popContext(interruptedWork);\n }\n\n break;\n }\n\n case HostRoot:\n {\n popHostContainer(interruptedWork);\n popTopLevelContextObject(interruptedWork);\n break;\n }\n\n case HostComponent:\n {\n popHostContext(interruptedWork);\n break;\n }\n\n case HostPortal:\n popHostContainer(interruptedWork);\n break;\n\n case SuspenseComponent:\n popSuspenseContext(interruptedWork);\n break;\n\n case SuspenseListComponent:\n popSuspenseContext(interruptedWork);\n break;\n\n case ContextProvider:\n popProvider(interruptedWork);\n break;\n }\n}\n\nfunction createCapturedValue(value, source) {\n // If the value is an error, call this function immediately after it is thrown\n // so the stack is accurate.\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\n\nfunction logCapturedError(capturedError) {\n\n var error = capturedError.error;\n\n {\n var componentName = capturedError.componentName,\n componentStack = capturedError.componentStack,\n errorBoundaryName = capturedError.errorBoundaryName,\n errorBoundaryFound = capturedError.errorBoundaryFound,\n willRetry = capturedError.willRetry; // Browsers support silencing uncaught errors by calling\n // `preventDefault()` in window `error` handler.\n // We record this information as an expando on the error.\n\n if (error != null && error._suppressLogging) {\n if (errorBoundaryFound && willRetry) {\n // The error is recoverable and was silenced.\n // Ignore it and don't print the stack addendum.\n // This is handy for testing error boundaries without noise.\n return;\n } // The error is fatal. Since the silencing might have\n // been accidental, we'll surface it anyway.\n // However, the browser would have silenced the original error\n // so we'll print it first, and then print the stack addendum.\n\n\n console['error'](error); // Don't transform to our wrapper\n // For a more detailed description of this block, see:\n // https://github.com/facebook/react/pull/13384\n }\n\n var componentNameMessage = componentName ? \"The above error occurred in the <\" + componentName + \"> component:\" : 'The above error occurred in one of your React components:';\n var errorBoundaryMessage; // errorBoundaryFound check is sufficient; errorBoundaryName check is to satisfy Flow.\n\n if (errorBoundaryFound && errorBoundaryName) {\n if (willRetry) {\n errorBoundaryMessage = \"React will try to recreate this component tree from scratch \" + (\"using the error boundary you provided, \" + errorBoundaryName + \".\");\n } else {\n errorBoundaryMessage = \"This error was initially handled by the error boundary \" + errorBoundaryName + \".\\n\" + \"Recreating the tree from scratch failed so React will unmount the tree.\";\n }\n } else {\n errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\\n' + 'Visit https://fb.me/react-error-boundaries to learn more about error boundaries.';\n }\n\n var combinedMessage = \"\" + componentNameMessage + componentStack + \"\\n\\n\" + (\"\" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.\n // We don't include the original error message and JS stack because the browser\n // has already printed it. Even if the application swallows the error, it is still\n // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\n\n console['error'](combinedMessage); // Don't transform to our wrapper\n }\n}\n\nvar didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n\n{\n didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n}\n\nvar PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;\nfunction logError(boundary, errorInfo) {\n var source = errorInfo.source;\n var stack = errorInfo.stack;\n\n if (stack === null && source !== null) {\n stack = getStackByFiberInDevAndProd(source);\n }\n\n var capturedError = {\n componentName: source !== null ? getComponentName(source.type) : null,\n componentStack: stack !== null ? stack : '',\n error: errorInfo.value,\n errorBoundary: null,\n errorBoundaryName: null,\n errorBoundaryFound: false,\n willRetry: false\n };\n\n if (boundary !== null && boundary.tag === ClassComponent) {\n capturedError.errorBoundary = boundary.stateNode;\n capturedError.errorBoundaryName = getComponentName(boundary.type);\n capturedError.errorBoundaryFound = true;\n capturedError.willRetry = true;\n }\n\n try {\n logCapturedError(capturedError);\n } catch (e) {\n // This method must not throw, or React internal state will get messed up.\n // If console.error is overridden, or logCapturedError() shows a dialog that throws,\n // we want to report this error outside of the normal stack as a last resort.\n // https://github.com/facebook/react/issues/13188\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nvar callComponentWillUnmountWithTimer = function (current, instance) {\n startPhaseTimer(current, 'componentWillUnmount');\n instance.props = current.memoizedProps;\n instance.state = current.memoizedState;\n instance.componentWillUnmount();\n stopPhaseTimer();\n}; // Capture errors so they don't interrupt unmounting.\n\n\nfunction safelyCallComponentWillUnmount(current, instance) {\n {\n invokeGuardedCallback(null, callComponentWillUnmountWithTimer, null, current, instance);\n\n if (hasCaughtError()) {\n var unmountError = clearCaughtError();\n captureCommitPhaseError(current, unmountError);\n }\n }\n}\n\nfunction safelyDetachRef(current) {\n var ref = current.ref;\n\n if (ref !== null) {\n if (typeof ref === 'function') {\n {\n invokeGuardedCallback(null, ref, null, null);\n\n if (hasCaughtError()) {\n var refError = clearCaughtError();\n captureCommitPhaseError(current, refError);\n }\n }\n } else {\n ref.current = null;\n }\n }\n}\n\nfunction safelyCallDestroy(current, destroy) {\n {\n invokeGuardedCallback(null, destroy, null);\n\n if (hasCaughtError()) {\n var error = clearCaughtError();\n captureCommitPhaseError(current, error);\n }\n }\n}\n\nfunction commitBeforeMutationLifeCycles(current, finishedWork) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n case Block:\n {\n return;\n }\n\n case ClassComponent:\n {\n if (finishedWork.effectTag & Snapshot) {\n if (current !== null) {\n var prevProps = current.memoizedProps;\n var prevState = current.memoizedState;\n startPhaseTimer(finishedWork, 'getSnapshotBeforeUpdate');\n var instance = finishedWork.stateNode; // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n }\n }\n\n var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);\n\n {\n var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;\n\n if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {\n didWarnSet.add(finishedWork.type);\n\n error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentName(finishedWork.type));\n }\n }\n\n instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n stopPhaseTimer();\n }\n }\n\n return;\n }\n\n case HostRoot:\n case HostComponent:\n case HostText:\n case HostPortal:\n case IncompleteClassComponent:\n // Nothing to do for these component types\n return;\n }\n\n {\n {\n throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction commitHookEffectListUnmount(tag, finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n if ((effect.tag & tag) === tag) {\n // Unmount\n var destroy = effect.destroy;\n effect.destroy = undefined;\n\n if (destroy !== undefined) {\n destroy();\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n}\n\nfunction commitHookEffectListMount(tag, finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n if ((effect.tag & tag) === tag) {\n // Mount\n var create = effect.create;\n effect.destroy = create();\n\n {\n var destroy = effect.destroy;\n\n if (destroy !== undefined && typeof destroy !== 'function') {\n var addendum = void 0;\n\n if (destroy === null) {\n addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';\n } else if (typeof destroy.then === 'function') {\n addendum = '\\n\\nIt looks like you wrote useEffect(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\\n\\n' + 'useEffect(() => {\\n' + ' async function fetchData() {\\n' + ' // You can await here\\n' + ' const response = await MyAPI.getData(someId);\\n' + ' // ...\\n' + ' }\\n' + ' fetchData();\\n' + \"}, [someId]); // Or [] if effect doesn't need props or state\\n\\n\" + 'Learn more about data fetching with Hooks: https://fb.me/react-hooks-data-fetching';\n } else {\n addendum = ' You returned: ' + destroy;\n }\n\n error('An effect function must not return anything besides a function, ' + 'which is used for clean-up.%s%s', addendum, getStackByFiberInDevAndProd(finishedWork));\n }\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n}\n\nfunction commitPassiveHookEffects(finishedWork) {\n if ((finishedWork.effectTag & Passive) !== NoEffect) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n case Block:\n {\n // TODO (#17945) We should call all passive destroy functions (for all fibers)\n // before calling any create functions. The current approach only serializes\n // these for a single fiber.\n commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork);\n commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);\n break;\n }\n }\n }\n}\n\nfunction commitLifeCycles(finishedRoot, current, finishedWork, committedExpirationTime) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n case Block:\n {\n // At this point layout effects have already been destroyed (during mutation phase).\n // This is done to prevent sibling component effects from interfering with each other,\n // e.g. a destroy function in one component should never override a ref set\n // by a create function in another component during the same commit.\n commitHookEffectListMount(Layout | HasEffect, finishedWork);\n\n return;\n }\n\n case ClassComponent:\n {\n var instance = finishedWork.stateNode;\n\n if (finishedWork.effectTag & Update) {\n if (current === null) {\n startPhaseTimer(finishedWork, 'componentDidMount'); // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n }\n }\n\n instance.componentDidMount();\n stopPhaseTimer();\n } else {\n var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);\n var prevState = current.memoizedState;\n startPhaseTimer(finishedWork, 'componentDidUpdate'); // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n }\n }\n\n instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n stopPhaseTimer();\n }\n }\n\n var updateQueue = finishedWork.updateQueue;\n\n if (updateQueue !== null) {\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n }\n } // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n\n commitUpdateQueue(finishedWork, updateQueue, instance);\n }\n\n return;\n }\n\n case HostRoot:\n {\n var _updateQueue = finishedWork.updateQueue;\n\n if (_updateQueue !== null) {\n var _instance = null;\n\n if (finishedWork.child !== null) {\n switch (finishedWork.child.tag) {\n case HostComponent:\n _instance = getPublicInstance(finishedWork.child.stateNode);\n break;\n\n case ClassComponent:\n _instance = finishedWork.child.stateNode;\n break;\n }\n }\n\n commitUpdateQueue(finishedWork, _updateQueue, _instance);\n }\n\n return;\n }\n\n case HostComponent:\n {\n var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted\n // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n // These effects should only be committed when components are first mounted,\n // aka when there is no current/alternate.\n\n if (current === null && finishedWork.effectTag & Update) {\n var type = finishedWork.type;\n var props = finishedWork.memoizedProps;\n commitMount(_instance2, type, props);\n }\n\n return;\n }\n\n case HostText:\n {\n // We have no life-cycles associated with text.\n return;\n }\n\n case HostPortal:\n {\n // We have no life-cycles associated with portals.\n return;\n }\n\n case Profiler:\n {\n {\n var onRender = finishedWork.memoizedProps.onRender;\n\n if (typeof onRender === 'function') {\n {\n onRender(finishedWork.memoizedProps.id, current === null ? 'mount' : 'update', finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, getCommitTime(), finishedRoot.memoizedInteractions);\n }\n }\n }\n\n return;\n }\n\n case SuspenseComponent:\n {\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n return;\n }\n\n case SuspenseListComponent:\n case IncompleteClassComponent:\n case FundamentalComponent:\n case ScopeComponent:\n return;\n }\n\n {\n {\n throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction hideOrUnhideAllChildren(finishedWork, isHidden) {\n {\n // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n var node = finishedWork;\n\n while (true) {\n if (node.tag === HostComponent) {\n var instance = node.stateNode;\n\n if (isHidden) {\n hideInstance(instance);\n } else {\n unhideInstance(node.stateNode, node.memoizedProps);\n }\n } else if (node.tag === HostText) {\n var _instance3 = node.stateNode;\n\n if (isHidden) {\n hideTextInstance(_instance3);\n } else {\n unhideTextInstance(_instance3, node.memoizedProps);\n }\n } else if (node.tag === SuspenseComponent && node.memoizedState !== null && node.memoizedState.dehydrated === null) {\n // Found a nested Suspense component that timed out. Skip over the\n // primary child fragment, which should remain hidden.\n var fallbackChildFragment = node.child.sibling;\n fallbackChildFragment.return = node;\n node = fallbackChildFragment;\n continue;\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === finishedWork) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === finishedWork) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n}\n\nfunction commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n\n if (ref !== null) {\n var instance = finishedWork.stateNode;\n var instanceToUse;\n\n switch (finishedWork.tag) {\n case HostComponent:\n instanceToUse = getPublicInstance(instance);\n break;\n\n default:\n instanceToUse = instance;\n } // Moved outside to ensure DCE works with this flag\n\n if (typeof ref === 'function') {\n ref(instanceToUse);\n } else {\n {\n if (!ref.hasOwnProperty('current')) {\n error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().%s', getComponentName(finishedWork.type), getStackByFiberInDevAndProd(finishedWork));\n }\n }\n\n ref.current = instanceToUse;\n }\n }\n}\n\nfunction commitDetachRef(current) {\n var currentRef = current.ref;\n\n if (currentRef !== null) {\n if (typeof currentRef === 'function') {\n currentRef(null);\n } else {\n currentRef.current = null;\n }\n }\n} // User-originating errors (lifecycles and refs) should not interrupt\n// deletion, so don't let them throw. Host-originating errors should\n// interrupt deletion, so it's okay\n\n\nfunction commitUnmount(finishedRoot, current, renderPriorityLevel) {\n onCommitUnmount(current);\n\n switch (current.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n case Block:\n {\n var updateQueue = current.updateQueue;\n\n if (updateQueue !== null) {\n var lastEffect = updateQueue.lastEffect;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n\n {\n // When the owner fiber is deleted, the destroy function of a passive\n // effect hook is called during the synchronous commit phase. This is\n // a concession to implementation complexity. Calling it in the\n // passive effect phase (like they usually are, when dependencies\n // change during an update) would require either traversing the\n // children of the deleted fiber again, or including unmount effects\n // as part of the fiber effect list.\n //\n // Because this is during the sync commit phase, we need to change\n // the priority.\n //\n // TODO: Reconsider this implementation trade off.\n var priorityLevel = renderPriorityLevel > NormalPriority ? NormalPriority : renderPriorityLevel;\n runWithPriority$1(priorityLevel, function () {\n var effect = firstEffect;\n\n do {\n var _destroy = effect.destroy;\n\n if (_destroy !== undefined) {\n safelyCallDestroy(current, _destroy);\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n });\n }\n }\n }\n\n return;\n }\n\n case ClassComponent:\n {\n safelyDetachRef(current);\n var instance = current.stateNode;\n\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(current, instance);\n }\n\n return;\n }\n\n case HostComponent:\n {\n\n safelyDetachRef(current);\n return;\n }\n\n case HostPortal:\n {\n // TODO: this is recursive.\n // We are also not using this parent because\n // the portal will get pushed immediately.\n {\n unmountHostComponents(finishedRoot, current, renderPriorityLevel);\n }\n\n return;\n }\n\n case FundamentalComponent:\n {\n\n return;\n }\n\n case DehydratedFragment:\n {\n\n return;\n }\n\n case ScopeComponent:\n {\n\n return;\n }\n }\n}\n\nfunction commitNestedUnmounts(finishedRoot, root, renderPriorityLevel) {\n // While we're inside a removed host node we don't want to call\n // removeChild on the inner nodes because they're removed by the top\n // call anyway. We also want to call componentWillUnmount on all\n // composites before this host node is removed from the tree. Therefore\n // we do an inner loop while we're still inside the host node.\n var node = root;\n\n while (true) {\n commitUnmount(finishedRoot, node, renderPriorityLevel); // Visit children because they may contain more composite or host nodes.\n // Skip portals because commitUnmount() currently visits them recursively.\n\n if (node.child !== null && ( // If we use mutation we drill down into portals using commitUnmount above.\n // If we don't use mutation we drill down into portals here instead.\n node.tag !== HostPortal)) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === root) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === root) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction detachFiber(current) {\n var alternate = current.alternate; // Cut off the return pointers to disconnect it from the tree. Ideally, we\n // should clear the child pointer of the parent alternate to let this\n // get GC:ed but we don't know which for sure which parent is the current\n // one so we'll settle for GC:ing the subtree of this child. This child\n // itself will be GC:ed when the parent updates the next time.\n\n current.return = null;\n current.child = null;\n current.memoizedState = null;\n current.updateQueue = null;\n current.dependencies = null;\n current.alternate = null;\n current.firstEffect = null;\n current.lastEffect = null;\n current.pendingProps = null;\n current.memoizedProps = null;\n current.stateNode = null;\n\n if (alternate !== null) {\n detachFiber(alternate);\n }\n}\n\nfunction getHostParentFiber(fiber) {\n var parent = fiber.return;\n\n while (parent !== null) {\n if (isHostParent(parent)) {\n return parent;\n }\n\n parent = parent.return;\n }\n\n {\n {\n throw Error( \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction isHostParent(fiber) {\n return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;\n}\n\nfunction getHostSibling(fiber) {\n // We're going to search forward into the tree until we find a sibling host\n // node. Unfortunately, if multiple insertions are done in a row we have to\n // search past them. This leads to exponential search for the next sibling.\n // TODO: Find a more efficient way to do this.\n var node = fiber;\n\n siblings: while (true) {\n // If we didn't find anything, let's try the next sibling.\n while (node.sibling === null) {\n if (node.return === null || isHostParent(node.return)) {\n // If we pop out of the root or hit the parent the fiber we are the\n // last sibling.\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n\n while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) {\n // If it is not host node and, we might have a host node inside it.\n // Try to search down until we find one.\n if (node.effectTag & Placement) {\n // If we don't have a child, try the siblings instead.\n continue siblings;\n } // If we don't have a child, try the siblings instead.\n // We also skip portals because they are not part of this host tree.\n\n\n if (node.child === null || node.tag === HostPortal) {\n continue siblings;\n } else {\n node.child.return = node;\n node = node.child;\n }\n } // Check if this host node is stable or about to be placed.\n\n\n if (!(node.effectTag & Placement)) {\n // Found it!\n return node.stateNode;\n }\n }\n}\n\nfunction commitPlacement(finishedWork) {\n\n\n var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together.\n\n var parent;\n var isContainer;\n var parentStateNode = parentFiber.stateNode;\n\n switch (parentFiber.tag) {\n case HostComponent:\n parent = parentStateNode;\n isContainer = false;\n break;\n\n case HostRoot:\n parent = parentStateNode.containerInfo;\n isContainer = true;\n break;\n\n case HostPortal:\n parent = parentStateNode.containerInfo;\n isContainer = true;\n break;\n\n case FundamentalComponent:\n\n // eslint-disable-next-line-no-fallthrough\n\n default:\n {\n {\n throw Error( \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n }\n\n if (parentFiber.effectTag & ContentReset) {\n // Reset the text content of the parent before doing any insertions\n resetTextContent(parent); // Clear ContentReset from the effect tag\n\n parentFiber.effectTag &= ~ContentReset;\n }\n\n var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n\n if (isContainer) {\n insertOrAppendPlacementNodeIntoContainer(finishedWork, before, parent);\n } else {\n insertOrAppendPlacementNode(finishedWork, before, parent);\n }\n}\n\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n var isHost = tag === HostComponent || tag === HostText;\n\n if (isHost || enableFundamentalAPI ) {\n var stateNode = isHost ? node.stateNode : node.stateNode.instance;\n\n if (before) {\n insertInContainerBefore(parent, stateNode, before);\n } else {\n appendChildToContainer(parent, stateNode);\n }\n } else if (tag === HostPortal) ; else {\n var child = node.child;\n\n if (child !== null) {\n insertOrAppendPlacementNodeIntoContainer(child, before, parent);\n var sibling = child.sibling;\n\n while (sibling !== null) {\n insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);\n sibling = sibling.sibling;\n }\n }\n }\n}\n\nfunction insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n var isHost = tag === HostComponent || tag === HostText;\n\n if (isHost || enableFundamentalAPI ) {\n var stateNode = isHost ? node.stateNode : node.stateNode.instance;\n\n if (before) {\n insertBefore(parent, stateNode, before);\n } else {\n appendChild(parent, stateNode);\n }\n } else if (tag === HostPortal) ; else {\n var child = node.child;\n\n if (child !== null) {\n insertOrAppendPlacementNode(child, before, parent);\n var sibling = child.sibling;\n\n while (sibling !== null) {\n insertOrAppendPlacementNode(sibling, before, parent);\n sibling = sibling.sibling;\n }\n }\n }\n}\n\nfunction unmountHostComponents(finishedRoot, current, renderPriorityLevel) {\n // We only have the top Fiber that was deleted but we need to recurse down its\n // children to find all the terminal nodes.\n var node = current; // Each iteration, currentParent is populated with node's host parent if not\n // currentParentIsValid.\n\n var currentParentIsValid = false; // Note: these two variables *must* always be updated together.\n\n var currentParent;\n var currentParentIsContainer;\n\n while (true) {\n if (!currentParentIsValid) {\n var parent = node.return;\n\n findParent: while (true) {\n if (!(parent !== null)) {\n {\n throw Error( \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var parentStateNode = parent.stateNode;\n\n switch (parent.tag) {\n case HostComponent:\n currentParent = parentStateNode;\n currentParentIsContainer = false;\n break findParent;\n\n case HostRoot:\n currentParent = parentStateNode.containerInfo;\n currentParentIsContainer = true;\n break findParent;\n\n case HostPortal:\n currentParent = parentStateNode.containerInfo;\n currentParentIsContainer = true;\n break findParent;\n\n }\n\n parent = parent.return;\n }\n\n currentParentIsValid = true;\n }\n\n if (node.tag === HostComponent || node.tag === HostText) {\n commitNestedUnmounts(finishedRoot, node, renderPriorityLevel); // After all the children have unmounted, it is now safe to remove the\n // node from the tree.\n\n if (currentParentIsContainer) {\n removeChildFromContainer(currentParent, node.stateNode);\n } else {\n removeChild(currentParent, node.stateNode);\n } // Don't visit children because we already visited them.\n\n } else if (node.tag === HostPortal) {\n if (node.child !== null) {\n // When we go into a portal, it becomes the parent to remove from.\n // We will reassign it back when we pop the portal on the way up.\n currentParent = node.stateNode.containerInfo;\n currentParentIsContainer = true; // Visit children because portals might contain host components.\n\n node.child.return = node;\n node = node.child;\n continue;\n }\n } else {\n commitUnmount(finishedRoot, node, renderPriorityLevel); // Visit children because we may find more host components below.\n\n if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n }\n\n if (node === current) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === current) {\n return;\n }\n\n node = node.return;\n\n if (node.tag === HostPortal) {\n // When we go out of the portal, we need to restore the parent.\n // Since we don't keep a stack of them, we will search for it.\n currentParentIsValid = false;\n }\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction commitDeletion(finishedRoot, current, renderPriorityLevel) {\n {\n // Recursively delete all host nodes from the parent.\n // Detach refs and call componentWillUnmount() on the whole subtree.\n unmountHostComponents(finishedRoot, current, renderPriorityLevel);\n }\n\n detachFiber(current);\n}\n\nfunction commitWork(current, finishedWork) {\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n case Block:\n {\n // Layout effects are destroyed during the mutation phase so that all\n // destroy functions for all fibers are called before any create functions.\n // This prevents sibling component effects from interfering with each other,\n // e.g. a destroy function in one component should never override a ref set\n // by a create function in another component during the same commit.\n commitHookEffectListUnmount(Layout | HasEffect, finishedWork);\n return;\n }\n\n case ClassComponent:\n {\n return;\n }\n\n case HostComponent:\n {\n var instance = finishedWork.stateNode;\n\n if (instance != null) {\n // Commit the work prepared earlier.\n var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n\n var oldProps = current !== null ? current.memoizedProps : newProps;\n var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.\n\n var updatePayload = finishedWork.updateQueue;\n finishedWork.updateQueue = null;\n\n if (updatePayload !== null) {\n commitUpdate(instance, updatePayload, type, oldProps, newProps);\n }\n }\n\n return;\n }\n\n case HostText:\n {\n if (!(finishedWork.stateNode !== null)) {\n {\n throw Error( \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var textInstance = finishedWork.stateNode;\n var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n\n var oldText = current !== null ? current.memoizedProps : newText;\n commitTextUpdate(textInstance, oldText, newText);\n return;\n }\n\n case HostRoot:\n {\n {\n var _root = finishedWork.stateNode;\n\n if (_root.hydrate) {\n // We've just hydrated. No need to hydrate again.\n _root.hydrate = false;\n commitHydratedContainer(_root.containerInfo);\n }\n }\n\n return;\n }\n\n case Profiler:\n {\n return;\n }\n\n case SuspenseComponent:\n {\n commitSuspenseComponent(finishedWork);\n attachSuspenseRetryListeners(finishedWork);\n return;\n }\n\n case SuspenseListComponent:\n {\n attachSuspenseRetryListeners(finishedWork);\n return;\n }\n\n case IncompleteClassComponent:\n {\n return;\n }\n }\n\n {\n {\n throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction commitSuspenseComponent(finishedWork) {\n var newState = finishedWork.memoizedState;\n var newDidTimeout;\n var primaryChildParent = finishedWork;\n\n if (newState === null) {\n newDidTimeout = false;\n } else {\n newDidTimeout = true;\n primaryChildParent = finishedWork.child;\n markCommitTimeOfFallback();\n }\n\n if ( primaryChildParent !== null) {\n hideOrUnhideAllChildren(primaryChildParent, newDidTimeout);\n }\n}\n\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n\n var newState = finishedWork.memoizedState;\n\n if (newState === null) {\n var current = finishedWork.alternate;\n\n if (current !== null) {\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n var suspenseInstance = prevState.dehydrated;\n\n if (suspenseInstance !== null) {\n commitHydratedSuspenseInstance(suspenseInstance);\n }\n }\n }\n }\n}\n\nfunction attachSuspenseRetryListeners(finishedWork) {\n // If this boundary just timed out, then it will have a set of thenables.\n // For each thenable, attach a listener so that when it resolves, React\n // attempts to re-render the boundary in the primary (pre-timeout) state.\n var thenables = finishedWork.updateQueue;\n\n if (thenables !== null) {\n finishedWork.updateQueue = null;\n var retryCache = finishedWork.stateNode;\n\n if (retryCache === null) {\n retryCache = finishedWork.stateNode = new PossiblyWeakSet();\n }\n\n thenables.forEach(function (thenable) {\n // Memoize using the boundary fiber to prevent redundant listeners.\n var retry = resolveRetryThenable.bind(null, finishedWork, thenable);\n\n if (!retryCache.has(thenable)) {\n {\n if (thenable.__reactDoNotTraceInteractions !== true) {\n retry = tracing.unstable_wrap(retry);\n }\n }\n\n retryCache.add(thenable);\n thenable.then(retry, retry);\n }\n });\n }\n}\n\nfunction commitResetTextContent(current) {\n\n resetTextContent(current.stateNode);\n}\n\nvar PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;\n\nfunction createRootErrorUpdate(fiber, errorInfo, expirationTime) {\n var update = createUpdate(expirationTime, null); // Unmount the root by rendering null.\n\n update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n update.payload = {\n element: null\n };\n var error = errorInfo.value;\n\n update.callback = function () {\n onUncaughtError(error);\n logError(fiber, errorInfo);\n };\n\n return update;\n}\n\nfunction createClassErrorUpdate(fiber, errorInfo, expirationTime) {\n var update = createUpdate(expirationTime, null);\n update.tag = CaptureUpdate;\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n\n if (typeof getDerivedStateFromError === 'function') {\n var error$1 = errorInfo.value;\n\n update.payload = function () {\n logError(fiber, errorInfo);\n return getDerivedStateFromError(error$1);\n };\n }\n\n var inst = fiber.stateNode;\n\n if (inst !== null && typeof inst.componentDidCatch === 'function') {\n update.callback = function callback() {\n {\n markFailedErrorBoundaryForHotReloading(fiber);\n }\n\n if (typeof getDerivedStateFromError !== 'function') {\n // To preserve the preexisting retry behavior of error boundaries,\n // we keep track of which ones already failed during this batch.\n // This gets reset before we yield back to the browser.\n // TODO: Warn in strict mode if getDerivedStateFromError is\n // not defined.\n markLegacyErrorBoundaryAsFailed(this); // Only log here if componentDidCatch is the only error boundary method defined\n\n logError(fiber, errorInfo);\n }\n\n var error$1 = errorInfo.value;\n var stack = errorInfo.stack;\n this.componentDidCatch(error$1, {\n componentStack: stack !== null ? stack : ''\n });\n\n {\n if (typeof getDerivedStateFromError !== 'function') {\n // If componentDidCatch is the only error boundary method defined,\n // then it needs to call setState to recover from errors.\n // If no state update is scheduled then the boundary will swallow the error.\n if (fiber.expirationTime !== Sync) {\n error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentName(fiber.type) || 'Unknown');\n }\n }\n }\n };\n } else {\n update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n };\n }\n\n return update;\n}\n\nfunction attachPingListener(root, renderExpirationTime, thenable) {\n // Attach a listener to the promise to \"ping\" the root and retry. But\n // only if one does not already exist for the current render expiration\n // time (which acts like a \"thread ID\" here).\n var pingCache = root.pingCache;\n var threadIDs;\n\n if (pingCache === null) {\n pingCache = root.pingCache = new PossiblyWeakMap$1();\n threadIDs = new Set();\n pingCache.set(thenable, threadIDs);\n } else {\n threadIDs = pingCache.get(thenable);\n\n if (threadIDs === undefined) {\n threadIDs = new Set();\n pingCache.set(thenable, threadIDs);\n }\n }\n\n if (!threadIDs.has(renderExpirationTime)) {\n // Memoize using the thread ID to prevent redundant listeners.\n threadIDs.add(renderExpirationTime);\n var ping = pingSuspendedRoot.bind(null, root, thenable, renderExpirationTime);\n thenable.then(ping, ping);\n }\n}\n\nfunction throwException(root, returnFiber, sourceFiber, value, renderExpirationTime) {\n // The source fiber did not complete.\n sourceFiber.effectTag |= Incomplete; // Its effect list is no longer valid.\n\n sourceFiber.firstEffect = sourceFiber.lastEffect = null;\n\n if (value !== null && typeof value === 'object' && typeof value.then === 'function') {\n // This is a thenable.\n var thenable = value;\n\n if ((sourceFiber.mode & BlockingMode) === NoMode) {\n // Reset the memoizedState to what it was before we attempted\n // to render it.\n var currentSource = sourceFiber.alternate;\n\n if (currentSource) {\n sourceFiber.updateQueue = currentSource.updateQueue;\n sourceFiber.memoizedState = currentSource.memoizedState;\n sourceFiber.expirationTime = currentSource.expirationTime;\n } else {\n sourceFiber.updateQueue = null;\n sourceFiber.memoizedState = null;\n }\n }\n\n var hasInvisibleParentBoundary = hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext); // Schedule the nearest Suspense to re-render the timed out view.\n\n var _workInProgress = returnFiber;\n\n do {\n if (_workInProgress.tag === SuspenseComponent && shouldCaptureSuspense(_workInProgress, hasInvisibleParentBoundary)) {\n // Found the nearest boundary.\n // Stash the promise on the boundary fiber. If the boundary times out, we'll\n // attach another listener to flip the boundary back to its normal state.\n var thenables = _workInProgress.updateQueue;\n\n if (thenables === null) {\n var updateQueue = new Set();\n updateQueue.add(thenable);\n _workInProgress.updateQueue = updateQueue;\n } else {\n thenables.add(thenable);\n } // If the boundary is outside of blocking mode, we should *not*\n // suspend the commit. Pretend as if the suspended component rendered\n // null and keep rendering. In the commit phase, we'll schedule a\n // subsequent synchronous update to re-render the Suspense.\n //\n // Note: It doesn't matter whether the component that suspended was\n // inside a blocking mode tree. If the Suspense is outside of it, we\n // should *not* suspend the commit.\n\n\n if ((_workInProgress.mode & BlockingMode) === NoMode) {\n _workInProgress.effectTag |= DidCapture; // We're going to commit this fiber even though it didn't complete.\n // But we shouldn't call any lifecycle methods or callbacks. Remove\n // all lifecycle effect tags.\n\n sourceFiber.effectTag &= ~(LifecycleEffectMask | Incomplete);\n\n if (sourceFiber.tag === ClassComponent) {\n var currentSourceFiber = sourceFiber.alternate;\n\n if (currentSourceFiber === null) {\n // This is a new mount. Change the tag so it's not mistaken for a\n // completed class component. For example, we should not call\n // componentWillUnmount if it is deleted.\n sourceFiber.tag = IncompleteClassComponent;\n } else {\n // When we try rendering again, we should not reuse the current fiber,\n // since it's known to be in an inconsistent state. Use a force update to\n // prevent a bail out.\n var update = createUpdate(Sync, null);\n update.tag = ForceUpdate;\n enqueueUpdate(sourceFiber, update);\n }\n } // The source fiber did not complete. Mark it with Sync priority to\n // indicate that it still has pending work.\n\n\n sourceFiber.expirationTime = Sync; // Exit without suspending.\n\n return;\n } // Confirmed that the boundary is in a concurrent mode tree. Continue\n // with the normal suspend path.\n //\n // After this we'll use a set of heuristics to determine whether this\n // render pass will run to completion or restart or \"suspend\" the commit.\n // The actual logic for this is spread out in different places.\n //\n // This first principle is that if we're going to suspend when we complete\n // a root, then we should also restart if we get an update or ping that\n // might unsuspend it, and vice versa. The only reason to suspend is\n // because you think you might want to restart before committing. However,\n // it doesn't make sense to restart only while in the period we're suspended.\n //\n // Restarting too aggressively is also not good because it starves out any\n // intermediate loading state. So we use heuristics to determine when.\n // Suspense Heuristics\n //\n // If nothing threw a Promise or all the same fallbacks are already showing,\n // then don't suspend/restart.\n //\n // If this is an initial render of a new tree of Suspense boundaries and\n // those trigger a fallback, then don't suspend/restart. We want to ensure\n // that we can show the initial loading state as quickly as possible.\n //\n // If we hit a \"Delayed\" case, such as when we'd switch from content back into\n // a fallback, then we should always suspend/restart. SuspenseConfig applies to\n // this case. If none is defined, JND is used instead.\n //\n // If we're already showing a fallback and it gets \"retried\", allowing us to show\n // another level, but there's still an inner boundary that would show a fallback,\n // then we suspend/restart for 500ms since the last time we showed a fallback\n // anywhere in the tree. This effectively throttles progressive loading into a\n // consistent train of commits. This also gives us an opportunity to restart to\n // get to the completed state slightly earlier.\n //\n // If there's ambiguity due to batching it's resolved in preference of:\n // 1) \"delayed\", 2) \"initial render\", 3) \"retry\".\n //\n // We want to ensure that a \"busy\" state doesn't get force committed. We want to\n // ensure that new initial loading states can commit as soon as possible.\n\n\n attachPingListener(root, renderExpirationTime, thenable);\n _workInProgress.effectTag |= ShouldCapture;\n _workInProgress.expirationTime = renderExpirationTime;\n return;\n } // This boundary already captured during this render. Continue to the next\n // boundary.\n\n\n _workInProgress = _workInProgress.return;\n } while (_workInProgress !== null); // No boundary was found. Fallthrough to error mode.\n // TODO: Use invariant so the message is stripped in prod?\n\n\n value = new Error((getComponentName(sourceFiber.type) || 'A React component') + ' suspended while rendering, but no fallback UI was specified.\\n' + '\\n' + 'Add a <Suspense fallback=...> component higher in the tree to ' + 'provide a loading indicator or placeholder to display.' + getStackByFiberInDevAndProd(sourceFiber));\n } // We didn't find a boundary that could handle this type of exception. Start\n // over and traverse parent path again, this time treating the exception\n // as an error.\n\n\n renderDidError();\n value = createCapturedValue(value, sourceFiber);\n var workInProgress = returnFiber;\n\n do {\n switch (workInProgress.tag) {\n case HostRoot:\n {\n var _errorInfo = value;\n workInProgress.effectTag |= ShouldCapture;\n workInProgress.expirationTime = renderExpirationTime;\n\n var _update = createRootErrorUpdate(workInProgress, _errorInfo, renderExpirationTime);\n\n enqueueCapturedUpdate(workInProgress, _update);\n return;\n }\n\n case ClassComponent:\n // Capture and retry\n var errorInfo = value;\n var ctor = workInProgress.type;\n var instance = workInProgress.stateNode;\n\n if ((workInProgress.effectTag & DidCapture) === NoEffect && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {\n workInProgress.effectTag |= ShouldCapture;\n workInProgress.expirationTime = renderExpirationTime; // Schedule the error boundary to re-render using updated state\n\n var _update2 = createClassErrorUpdate(workInProgress, errorInfo, renderExpirationTime);\n\n enqueueCapturedUpdate(workInProgress, _update2);\n return;\n }\n\n break;\n }\n\n workInProgress = workInProgress.return;\n } while (workInProgress !== null);\n}\n\nvar ceil = Math.ceil;\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,\n IsSomeRendererActing = ReactSharedInternals.IsSomeRendererActing;\nvar NoContext =\n/* */\n0;\nvar BatchedContext =\n/* */\n1;\nvar EventContext =\n/* */\n2;\nvar DiscreteEventContext =\n/* */\n4;\nvar LegacyUnbatchedContext =\n/* */\n8;\nvar RenderContext =\n/* */\n16;\nvar CommitContext =\n/* */\n32;\nvar RootIncomplete = 0;\nvar RootFatalErrored = 1;\nvar RootErrored = 2;\nvar RootSuspended = 3;\nvar RootSuspendedWithDelay = 4;\nvar RootCompleted = 5;\n// Describes where we are in the React execution stack\nvar executionContext = NoContext; // The root we're working on\n\nvar workInProgressRoot = null; // The fiber we're working on\n\nvar workInProgress = null; // The expiration time we're rendering\n\nvar renderExpirationTime$1 = NoWork; // Whether to root completed, errored, suspended, etc.\n\nvar workInProgressRootExitStatus = RootIncomplete; // A fatal error, if one is thrown\n\nvar workInProgressRootFatalError = null; // Most recent event time among processed updates during this render.\n// This is conceptually a time stamp but expressed in terms of an ExpirationTime\n// because we deal mostly with expiration times in the hot path, so this avoids\n// the conversion happening in the hot path.\n\nvar workInProgressRootLatestProcessedExpirationTime = Sync;\nvar workInProgressRootLatestSuspenseTimeout = Sync;\nvar workInProgressRootCanSuspendUsingConfig = null; // The work left over by components that were visited during this render. Only\n// includes unprocessed updates, not work in bailed out children.\n\nvar workInProgressRootNextUnprocessedUpdateTime = NoWork; // If we're pinged while rendering we don't always restart immediately.\n// This flag determines if it might be worthwhile to restart if an opportunity\n// happens latere.\n\nvar workInProgressRootHasPendingPing = false; // The most recent time we committed a fallback. This lets us ensure a train\n// model where we don't commit new loading states in too quick succession.\n\nvar globalMostRecentFallbackTime = 0;\nvar FALLBACK_THROTTLE_MS = 500;\nvar nextEffect = null;\nvar hasUncaughtError = false;\nvar firstUncaughtError = null;\nvar legacyErrorBoundariesThatAlreadyFailed = null;\nvar rootDoesHavePassiveEffects = false;\nvar rootWithPendingPassiveEffects = null;\nvar pendingPassiveEffectsRenderPriority = NoPriority;\nvar pendingPassiveEffectsExpirationTime = NoWork;\nvar rootsWithPendingDiscreteUpdates = null; // Use these to prevent an infinite loop of nested updates\n\nvar NESTED_UPDATE_LIMIT = 50;\nvar nestedUpdateCount = 0;\nvar rootWithNestedUpdates = null;\nvar NESTED_PASSIVE_UPDATE_LIMIT = 50;\nvar nestedPassiveUpdateCount = 0;\nvar interruptedBy = null; // Marks the need to reschedule pending interactions at these expiration times\n// during the commit phase. This enables them to be traced across components\n// that spawn new work during render. E.g. hidden boundaries, suspended SSR\n// hydration or SuspenseList.\n\nvar spawnedWorkDuringRender = null; // Expiration times are computed by adding to the current time (the start\n// time). However, if two updates are scheduled within the same event, we\n// should treat their start times as simultaneous, even if the actual clock\n// time has advanced between the first and second call.\n// In other words, because expiration times determine how updates are batched,\n// we want all updates of like priority that occur within the same event to\n// receive the same expiration time. Otherwise we get tearing.\n\nvar currentEventTime = NoWork;\nfunction requestCurrentTimeForUpdate() {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n // We're inside React, so it's fine to read the actual time.\n return msToExpirationTime(now());\n } // We're not inside React, so we may be in the middle of a browser event.\n\n\n if (currentEventTime !== NoWork) {\n // Use the same start time for all updates until we enter React again.\n return currentEventTime;\n } // This is the first update since React yielded. Compute a new start time.\n\n\n currentEventTime = msToExpirationTime(now());\n return currentEventTime;\n}\nfunction getCurrentTime() {\n return msToExpirationTime(now());\n}\nfunction computeExpirationForFiber(currentTime, fiber, suspenseConfig) {\n var mode = fiber.mode;\n\n if ((mode & BlockingMode) === NoMode) {\n return Sync;\n }\n\n var priorityLevel = getCurrentPriorityLevel();\n\n if ((mode & ConcurrentMode) === NoMode) {\n return priorityLevel === ImmediatePriority ? Sync : Batched;\n }\n\n if ((executionContext & RenderContext) !== NoContext) {\n // Use whatever time we're already rendering\n // TODO: Should there be a way to opt out, like with `runWithPriority`?\n return renderExpirationTime$1;\n }\n\n var expirationTime;\n\n if (suspenseConfig !== null) {\n // Compute an expiration time based on the Suspense timeout.\n expirationTime = computeSuspenseExpiration(currentTime, suspenseConfig.timeoutMs | 0 || LOW_PRIORITY_EXPIRATION);\n } else {\n // Compute an expiration time based on the Scheduler priority.\n switch (priorityLevel) {\n case ImmediatePriority:\n expirationTime = Sync;\n break;\n\n case UserBlockingPriority$1:\n // TODO: Rename this to computeUserBlockingExpiration\n expirationTime = computeInteractiveExpiration(currentTime);\n break;\n\n case NormalPriority:\n case LowPriority:\n // TODO: Handle LowPriority\n // TODO: Rename this to... something better.\n expirationTime = computeAsyncExpiration(currentTime);\n break;\n\n case IdlePriority:\n expirationTime = Idle;\n break;\n\n default:\n {\n {\n throw Error( \"Expected a valid priority level\" );\n }\n }\n\n }\n } // If we're in the middle of rendering a tree, do not update at the same\n // expiration time that is already rendering.\n // TODO: We shouldn't have to do this if the update is on a different root.\n // Refactor computeExpirationForFiber + scheduleUpdate so we have access to\n // the root when we check for this condition.\n\n\n if (workInProgressRoot !== null && expirationTime === renderExpirationTime$1) {\n // This is a trick to move this update into a separate batch\n expirationTime -= 1;\n }\n\n return expirationTime;\n}\nfunction scheduleUpdateOnFiber(fiber, expirationTime) {\n checkForNestedUpdates();\n warnAboutRenderPhaseUpdatesInDEV(fiber);\n var root = markUpdateTimeFromFiberToRoot(fiber, expirationTime);\n\n if (root === null) {\n warnAboutUpdateOnUnmountedFiberInDEV(fiber);\n return;\n }\n\n checkForInterruption(fiber, expirationTime);\n recordScheduleUpdate(); // TODO: computeExpirationForFiber also reads the priority. Pass the\n // priority as an argument to that function and this one.\n\n var priorityLevel = getCurrentPriorityLevel();\n\n if (expirationTime === Sync) {\n if ( // Check if we're inside unbatchedUpdates\n (executionContext & LegacyUnbatchedContext) !== NoContext && // Check if we're not already rendering\n (executionContext & (RenderContext | CommitContext)) === NoContext) {\n // Register pending interactions on the root to avoid losing traced interaction data.\n schedulePendingInteractions(root, expirationTime); // This is a legacy edge case. The initial mount of a ReactDOM.render-ed\n // root inside of batchedUpdates should be synchronous, but layout updates\n // should be deferred until the end of the batch.\n\n performSyncWorkOnRoot(root);\n } else {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, expirationTime);\n\n if (executionContext === NoContext) {\n // Flush the synchronous work now, unless we're already working or inside\n // a batch. This is intentionally inside scheduleUpdateOnFiber instead of\n // scheduleCallbackForFiber to preserve the ability to schedule a callback\n // without immediately flushing it. We only do this for user-initiated\n // updates, to preserve historical behavior of legacy mode.\n flushSyncCallbackQueue();\n }\n }\n } else {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, expirationTime);\n }\n\n if ((executionContext & DiscreteEventContext) !== NoContext && ( // Only updates at user-blocking priority or greater are considered\n // discrete, even inside a discrete event.\n priorityLevel === UserBlockingPriority$1 || priorityLevel === ImmediatePriority)) {\n // This is the result of a discrete event. Track the lowest priority\n // discrete update per root so we can flush them early, if needed.\n if (rootsWithPendingDiscreteUpdates === null) {\n rootsWithPendingDiscreteUpdates = new Map([[root, expirationTime]]);\n } else {\n var lastDiscreteTime = rootsWithPendingDiscreteUpdates.get(root);\n\n if (lastDiscreteTime === undefined || lastDiscreteTime > expirationTime) {\n rootsWithPendingDiscreteUpdates.set(root, expirationTime);\n }\n }\n }\n}\nvar scheduleWork = scheduleUpdateOnFiber; // This is split into a separate function so we can mark a fiber with pending\n// work without treating it as a typical update that originates from an event;\n// e.g. retrying a Suspense boundary isn't an update, but it does schedule work\n// on a fiber.\n\nfunction markUpdateTimeFromFiberToRoot(fiber, expirationTime) {\n // Update the source fiber's expiration time\n if (fiber.expirationTime < expirationTime) {\n fiber.expirationTime = expirationTime;\n }\n\n var alternate = fiber.alternate;\n\n if (alternate !== null && alternate.expirationTime < expirationTime) {\n alternate.expirationTime = expirationTime;\n } // Walk the parent path to the root and update the child expiration time.\n\n\n var node = fiber.return;\n var root = null;\n\n if (node === null && fiber.tag === HostRoot) {\n root = fiber.stateNode;\n } else {\n while (node !== null) {\n alternate = node.alternate;\n\n if (node.childExpirationTime < expirationTime) {\n node.childExpirationTime = expirationTime;\n\n if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n alternate.childExpirationTime = expirationTime;\n }\n } else if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n alternate.childExpirationTime = expirationTime;\n }\n\n if (node.return === null && node.tag === HostRoot) {\n root = node.stateNode;\n break;\n }\n\n node = node.return;\n }\n }\n\n if (root !== null) {\n if (workInProgressRoot === root) {\n // Received an update to a tree that's in the middle of rendering. Mark\n // that's unprocessed work on this root.\n markUnprocessedUpdateTime(expirationTime);\n\n if (workInProgressRootExitStatus === RootSuspendedWithDelay) {\n // The root already suspended with a delay, which means this render\n // definitely won't finish. Since we have a new update, let's mark it as\n // suspended now, right before marking the incoming update. This has the\n // effect of interrupting the current render and switching to the update.\n // TODO: This happens to work when receiving an update during the render\n // phase, because of the trick inside computeExpirationForFiber to\n // subtract 1 from `renderExpirationTime` to move it into a\n // separate bucket. But we should probably model it with an exception,\n // using the same mechanism we use to force hydration of a subtree.\n // TODO: This does not account for low pri updates that were already\n // scheduled before the root started rendering. Need to track the next\n // pending expiration time (perhaps by backtracking the return path) and\n // then trigger a restart in the `renderDidSuspendDelayIfPossible` path.\n markRootSuspendedAtTime(root, renderExpirationTime$1);\n }\n } // Mark that the root has a pending update.\n\n\n markRootUpdatedAtTime(root, expirationTime);\n }\n\n return root;\n}\n\nfunction getNextRootExpirationTimeToWorkOn(root) {\n // Determines the next expiration time that the root should render, taking\n // into account levels that may be suspended, or levels that may have\n // received a ping.\n var lastExpiredTime = root.lastExpiredTime;\n\n if (lastExpiredTime !== NoWork) {\n return lastExpiredTime;\n } // \"Pending\" refers to any update that hasn't committed yet, including if it\n // suspended. The \"suspended\" range is therefore a subset.\n\n\n var firstPendingTime = root.firstPendingTime;\n\n if (!isRootSuspendedAtTime(root, firstPendingTime)) {\n // The highest priority pending time is not suspended. Let's work on that.\n return firstPendingTime;\n } // If the first pending time is suspended, check if there's a lower priority\n // pending level that we know about. Or check if we received a ping. Work\n // on whichever is higher priority.\n\n\n var lastPingedTime = root.lastPingedTime;\n var nextKnownPendingLevel = root.nextKnownPendingLevel;\n var nextLevel = lastPingedTime > nextKnownPendingLevel ? lastPingedTime : nextKnownPendingLevel;\n\n if ( nextLevel <= Idle && firstPendingTime !== nextLevel) {\n // Don't work on Idle/Never priority unless everything else is committed.\n return NoWork;\n }\n\n return nextLevel;\n} // Use this function to schedule a task for a root. There's only one task per\n// root; if a task was already scheduled, we'll check to make sure the\n// expiration time of the existing task is the same as the expiration time of\n// the next level that the root has work on. This function is called on every\n// update, and right before exiting a task.\n\n\nfunction ensureRootIsScheduled(root) {\n var lastExpiredTime = root.lastExpiredTime;\n\n if (lastExpiredTime !== NoWork) {\n // Special case: Expired work should flush synchronously.\n root.callbackExpirationTime = Sync;\n root.callbackPriority = ImmediatePriority;\n root.callbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n return;\n }\n\n var expirationTime = getNextRootExpirationTimeToWorkOn(root);\n var existingCallbackNode = root.callbackNode;\n\n if (expirationTime === NoWork) {\n // There's nothing to work on.\n if (existingCallbackNode !== null) {\n root.callbackNode = null;\n root.callbackExpirationTime = NoWork;\n root.callbackPriority = NoPriority;\n }\n\n return;\n } // TODO: If this is an update, we already read the current time. Pass the\n // time as an argument.\n\n\n var currentTime = requestCurrentTimeForUpdate();\n var priorityLevel = inferPriorityFromExpirationTime(currentTime, expirationTime); // If there's an existing render task, confirm it has the correct priority and\n // expiration time. Otherwise, we'll cancel it and schedule a new one.\n\n if (existingCallbackNode !== null) {\n var existingCallbackPriority = root.callbackPriority;\n var existingCallbackExpirationTime = root.callbackExpirationTime;\n\n if ( // Callback must have the exact same expiration time.\n existingCallbackExpirationTime === expirationTime && // Callback must have greater or equal priority.\n existingCallbackPriority >= priorityLevel) {\n // Existing callback is sufficient.\n return;\n } // Need to schedule a new task.\n // TODO: Instead of scheduling a new task, we should be able to change the\n // priority of the existing one.\n\n\n cancelCallback(existingCallbackNode);\n }\n\n root.callbackExpirationTime = expirationTime;\n root.callbackPriority = priorityLevel;\n var callbackNode;\n\n if (expirationTime === Sync) {\n // Sync React callbacks are scheduled on a special internal queue\n callbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n } else {\n callbackNode = scheduleCallback(priorityLevel, performConcurrentWorkOnRoot.bind(null, root), // Compute a task timeout based on the expiration time. This also affects\n // ordering because tasks are processed in timeout order.\n {\n timeout: expirationTimeToMs(expirationTime) - now()\n });\n }\n\n root.callbackNode = callbackNode;\n} // This is the entry point for every concurrent task, i.e. anything that\n// goes through Scheduler.\n\n\nfunction performConcurrentWorkOnRoot(root, didTimeout) {\n // Since we know we're in a React event, we can clear the current\n // event time. The next update will compute a new event time.\n currentEventTime = NoWork;\n\n if (didTimeout) {\n // The render task took too long to complete. Mark the current time as\n // expired to synchronously render all expired work in a single batch.\n var currentTime = requestCurrentTimeForUpdate();\n markRootExpiredAtTime(root, currentTime); // This will schedule a synchronous callback.\n\n ensureRootIsScheduled(root);\n return null;\n } // Determine the next expiration time to work on, using the fields stored\n // on the root.\n\n\n var expirationTime = getNextRootExpirationTimeToWorkOn(root);\n\n if (expirationTime !== NoWork) {\n var originalCallbackNode = root.callbackNode;\n\n if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n {\n throw Error( \"Should not already be working.\" );\n }\n }\n\n flushPassiveEffects(); // If the root or expiration time have changed, throw out the existing stack\n // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n if (root !== workInProgressRoot || expirationTime !== renderExpirationTime$1) {\n prepareFreshStack(root, expirationTime);\n startWorkOnPendingInteractions(root, expirationTime);\n } // If we have a work-in-progress fiber, it means there's still work to do\n // in this root.\n\n\n if (workInProgress !== null) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher();\n var prevInteractions = pushInteractions(root);\n startWorkLoopTimer(workInProgress);\n\n do {\n try {\n workLoopConcurrent();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n } while (true);\n\n resetContextDependencies();\n executionContext = prevExecutionContext;\n popDispatcher(prevDispatcher);\n\n {\n popInteractions(prevInteractions);\n }\n\n if (workInProgressRootExitStatus === RootFatalErrored) {\n var fatalError = workInProgressRootFatalError;\n stopInterruptedWorkLoopTimer();\n prepareFreshStack(root, expirationTime);\n markRootSuspendedAtTime(root, expirationTime);\n ensureRootIsScheduled(root);\n throw fatalError;\n }\n\n if (workInProgress !== null) {\n // There's still work left over. Exit without committing.\n stopInterruptedWorkLoopTimer();\n } else {\n // We now have a consistent tree. The next step is either to commit it,\n // or, if something suspended, wait to commit it after a timeout.\n stopFinishedWorkLoopTimer();\n var finishedWork = root.finishedWork = root.current.alternate;\n root.finishedExpirationTime = expirationTime;\n finishConcurrentRender(root, finishedWork, workInProgressRootExitStatus, expirationTime);\n }\n\n ensureRootIsScheduled(root);\n\n if (root.callbackNode === originalCallbackNode) {\n // The task node scheduled for this root is the same one that's\n // currently executed. Need to return a continuation.\n return performConcurrentWorkOnRoot.bind(null, root);\n }\n }\n }\n\n return null;\n}\n\nfunction finishConcurrentRender(root, finishedWork, exitStatus, expirationTime) {\n // Set this to null to indicate there's no in-progress render.\n workInProgressRoot = null;\n\n switch (exitStatus) {\n case RootIncomplete:\n case RootFatalErrored:\n {\n {\n {\n throw Error( \"Root did not complete. This is a bug in React.\" );\n }\n }\n }\n // Flow knows about invariant, so it complains if I add a break\n // statement, but eslint doesn't know about invariant, so it complains\n // if I do. eslint-disable-next-line no-fallthrough\n\n case RootErrored:\n {\n // If this was an async render, the error may have happened due to\n // a mutation in a concurrent event. Try rendering one more time,\n // synchronously, to see if the error goes away. If there are\n // lower priority updates, let's include those, too, in case they\n // fix the inconsistency. Render at Idle to include all updates.\n // If it was Idle or Never or some not-yet-invented time, render\n // at that time.\n markRootExpiredAtTime(root, expirationTime > Idle ? Idle : expirationTime); // We assume that this second render pass will be synchronous\n // and therefore not hit this path again.\n\n break;\n }\n\n case RootSuspended:\n {\n markRootSuspendedAtTime(root, expirationTime);\n var lastSuspendedTime = root.lastSuspendedTime;\n\n if (expirationTime === lastSuspendedTime) {\n root.nextKnownPendingLevel = getRemainingExpirationTime(finishedWork);\n } // We have an acceptable loading state. We need to figure out if we\n // should immediately commit it or wait a bit.\n // If we have processed new updates during this render, we may now\n // have a new loading state ready. We want to ensure that we commit\n // that as soon as possible.\n\n\n var hasNotProcessedNewUpdates = workInProgressRootLatestProcessedExpirationTime === Sync;\n\n if (hasNotProcessedNewUpdates && // do not delay if we're inside an act() scope\n !( IsThisRendererActing.current)) {\n // If we have not processed any new updates during this pass, then\n // this is either a retry of an existing fallback state or a\n // hidden tree. Hidden trees shouldn't be batched with other work\n // and after that's fixed it can only be a retry. We're going to\n // throttle committing retries so that we don't show too many\n // loading states too quickly.\n var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time.\n\n if (msUntilTimeout > 10) {\n if (workInProgressRootHasPendingPing) {\n var lastPingedTime = root.lastPingedTime;\n\n if (lastPingedTime === NoWork || lastPingedTime >= expirationTime) {\n // This render was pinged but we didn't get to restart\n // earlier so try restarting now instead.\n root.lastPingedTime = expirationTime;\n prepareFreshStack(root, expirationTime);\n break;\n }\n }\n\n var nextTime = getNextRootExpirationTimeToWorkOn(root);\n\n if (nextTime !== NoWork && nextTime !== expirationTime) {\n // There's additional work on this root.\n break;\n }\n\n if (lastSuspendedTime !== NoWork && lastSuspendedTime !== expirationTime) {\n // We should prefer to render the fallback of at the last\n // suspended level. Ping the last suspended level to try\n // rendering it again.\n root.lastPingedTime = lastSuspendedTime;\n break;\n } // The render is suspended, it hasn't timed out, and there's no\n // lower priority work to do. Instead of committing the fallback\n // immediately, wait for more data to arrive.\n\n\n root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), msUntilTimeout);\n break;\n }\n } // The work expired. Commit immediately.\n\n\n commitRoot(root);\n break;\n }\n\n case RootSuspendedWithDelay:\n {\n markRootSuspendedAtTime(root, expirationTime);\n var _lastSuspendedTime = root.lastSuspendedTime;\n\n if (expirationTime === _lastSuspendedTime) {\n root.nextKnownPendingLevel = getRemainingExpirationTime(finishedWork);\n }\n\n if ( // do not delay if we're inside an act() scope\n !( IsThisRendererActing.current)) {\n // We're suspended in a state that should be avoided. We'll try to\n // avoid committing it for as long as the timeouts let us.\n if (workInProgressRootHasPendingPing) {\n var _lastPingedTime = root.lastPingedTime;\n\n if (_lastPingedTime === NoWork || _lastPingedTime >= expirationTime) {\n // This render was pinged but we didn't get to restart earlier\n // so try restarting now instead.\n root.lastPingedTime = expirationTime;\n prepareFreshStack(root, expirationTime);\n break;\n }\n }\n\n var _nextTime = getNextRootExpirationTimeToWorkOn(root);\n\n if (_nextTime !== NoWork && _nextTime !== expirationTime) {\n // There's additional work on this root.\n break;\n }\n\n if (_lastSuspendedTime !== NoWork && _lastSuspendedTime !== expirationTime) {\n // We should prefer to render the fallback of at the last\n // suspended level. Ping the last suspended level to try\n // rendering it again.\n root.lastPingedTime = _lastSuspendedTime;\n break;\n }\n\n var _msUntilTimeout;\n\n if (workInProgressRootLatestSuspenseTimeout !== Sync) {\n // We have processed a suspense config whose expiration time we\n // can use as the timeout.\n _msUntilTimeout = expirationTimeToMs(workInProgressRootLatestSuspenseTimeout) - now();\n } else if (workInProgressRootLatestProcessedExpirationTime === Sync) {\n // This should never normally happen because only new updates\n // cause delayed states, so we should have processed something.\n // However, this could also happen in an offscreen tree.\n _msUntilTimeout = 0;\n } else {\n // If we don't have a suspense config, we're going to use a\n // heuristic to determine how long we can suspend.\n var eventTimeMs = inferTimeFromExpirationTime(workInProgressRootLatestProcessedExpirationTime);\n var currentTimeMs = now();\n var timeUntilExpirationMs = expirationTimeToMs(expirationTime) - currentTimeMs;\n var timeElapsed = currentTimeMs - eventTimeMs;\n\n if (timeElapsed < 0) {\n // We get this wrong some time since we estimate the time.\n timeElapsed = 0;\n }\n\n _msUntilTimeout = jnd(timeElapsed) - timeElapsed; // Clamp the timeout to the expiration time. TODO: Once the\n // event time is exact instead of inferred from expiration time\n // we don't need this.\n\n if (timeUntilExpirationMs < _msUntilTimeout) {\n _msUntilTimeout = timeUntilExpirationMs;\n }\n } // Don't bother with a very short suspense time.\n\n\n if (_msUntilTimeout > 10) {\n // The render is suspended, it hasn't timed out, and there's no\n // lower priority work to do. Instead of committing the fallback\n // immediately, wait for more data to arrive.\n root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout);\n break;\n }\n } // The work expired. Commit immediately.\n\n\n commitRoot(root);\n break;\n }\n\n case RootCompleted:\n {\n // The work completed. Ready to commit.\n if ( // do not delay if we're inside an act() scope\n !( IsThisRendererActing.current) && workInProgressRootLatestProcessedExpirationTime !== Sync && workInProgressRootCanSuspendUsingConfig !== null) {\n // If we have exceeded the minimum loading delay, which probably\n // means we have shown a spinner already, we might have to suspend\n // a bit longer to ensure that the spinner is shown for\n // enough time.\n var _msUntilTimeout2 = computeMsUntilSuspenseLoadingDelay(workInProgressRootLatestProcessedExpirationTime, expirationTime, workInProgressRootCanSuspendUsingConfig);\n\n if (_msUntilTimeout2 > 10) {\n markRootSuspendedAtTime(root, expirationTime);\n root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout2);\n break;\n }\n }\n\n commitRoot(root);\n break;\n }\n\n default:\n {\n {\n {\n throw Error( \"Unknown root exit status.\" );\n }\n }\n }\n }\n} // This is the entry point for synchronous tasks that don't go\n// through Scheduler\n\n\nfunction performSyncWorkOnRoot(root) {\n // Check if there's expired work on this root. Otherwise, render at Sync.\n var lastExpiredTime = root.lastExpiredTime;\n var expirationTime = lastExpiredTime !== NoWork ? lastExpiredTime : Sync;\n\n if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n {\n throw Error( \"Should not already be working.\" );\n }\n }\n\n flushPassiveEffects(); // If the root or expiration time have changed, throw out the existing stack\n // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n if (root !== workInProgressRoot || expirationTime !== renderExpirationTime$1) {\n prepareFreshStack(root, expirationTime);\n startWorkOnPendingInteractions(root, expirationTime);\n } // If we have a work-in-progress fiber, it means there's still work to do\n // in this root.\n\n\n if (workInProgress !== null) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher();\n var prevInteractions = pushInteractions(root);\n startWorkLoopTimer(workInProgress);\n\n do {\n try {\n workLoopSync();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n } while (true);\n\n resetContextDependencies();\n executionContext = prevExecutionContext;\n popDispatcher(prevDispatcher);\n\n {\n popInteractions(prevInteractions);\n }\n\n if (workInProgressRootExitStatus === RootFatalErrored) {\n var fatalError = workInProgressRootFatalError;\n stopInterruptedWorkLoopTimer();\n prepareFreshStack(root, expirationTime);\n markRootSuspendedAtTime(root, expirationTime);\n ensureRootIsScheduled(root);\n throw fatalError;\n }\n\n if (workInProgress !== null) {\n // This is a sync render, so we should have finished the whole tree.\n {\n {\n throw Error( \"Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n } else {\n // We now have a consistent tree. Because this is a sync render, we\n // will commit it even if something suspended.\n stopFinishedWorkLoopTimer();\n root.finishedWork = root.current.alternate;\n root.finishedExpirationTime = expirationTime;\n finishSyncRender(root);\n } // Before exiting, make sure there's a callback scheduled for the next\n // pending level.\n\n\n ensureRootIsScheduled(root);\n }\n\n return null;\n}\n\nfunction finishSyncRender(root) {\n // Set this to null to indicate there's no in-progress render.\n workInProgressRoot = null;\n commitRoot(root);\n}\nfunction flushDiscreteUpdates() {\n // TODO: Should be able to flush inside batchedUpdates, but not inside `act`.\n // However, `act` uses `batchedUpdates`, so there's no way to distinguish\n // those two cases. Need to fix this before exposing flushDiscreteUpdates\n // as a public API.\n if ((executionContext & (BatchedContext | RenderContext | CommitContext)) !== NoContext) {\n {\n if ((executionContext & RenderContext) !== NoContext) {\n error('unstable_flushDiscreteUpdates: Cannot flush updates when React is ' + 'already rendering.');\n }\n } // We're already rendering, so we can't synchronously flush pending work.\n // This is probably a nested event dispatch triggered by a lifecycle/effect,\n // like `el.focus()`. Exit.\n\n\n return;\n }\n\n flushPendingDiscreteUpdates(); // If the discrete updates scheduled passive effects, flush them now so that\n // they fire before the next serial event.\n\n flushPassiveEffects();\n}\nfunction syncUpdates(fn, a, b, c) {\n return runWithPriority$1(ImmediatePriority, fn.bind(null, a, b, c));\n}\n\nfunction flushPendingDiscreteUpdates() {\n if (rootsWithPendingDiscreteUpdates !== null) {\n // For each root with pending discrete updates, schedule a callback to\n // immediately flush them.\n var roots = rootsWithPendingDiscreteUpdates;\n rootsWithPendingDiscreteUpdates = null;\n roots.forEach(function (expirationTime, root) {\n markRootExpiredAtTime(root, expirationTime);\n ensureRootIsScheduled(root);\n }); // Now flush the immediate queue.\n\n flushSyncCallbackQueue();\n }\n}\n\nfunction batchedUpdates$1(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext |= BatchedContext;\n\n try {\n return fn(a);\n } finally {\n executionContext = prevExecutionContext;\n\n if (executionContext === NoContext) {\n // Flush the immediate callbacks that were scheduled during this batch\n flushSyncCallbackQueue();\n }\n }\n}\nfunction batchedEventUpdates$1(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext |= EventContext;\n\n try {\n return fn(a);\n } finally {\n executionContext = prevExecutionContext;\n\n if (executionContext === NoContext) {\n // Flush the immediate callbacks that were scheduled during this batch\n flushSyncCallbackQueue();\n }\n }\n}\nfunction discreteUpdates$1(fn, a, b, c, d) {\n var prevExecutionContext = executionContext;\n executionContext |= DiscreteEventContext;\n\n try {\n // Should this\n return runWithPriority$1(UserBlockingPriority$1, fn.bind(null, a, b, c, d));\n } finally {\n executionContext = prevExecutionContext;\n\n if (executionContext === NoContext) {\n // Flush the immediate callbacks that were scheduled during this batch\n flushSyncCallbackQueue();\n }\n }\n}\nfunction unbatchedUpdates(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext &= ~BatchedContext;\n executionContext |= LegacyUnbatchedContext;\n\n try {\n return fn(a);\n } finally {\n executionContext = prevExecutionContext;\n\n if (executionContext === NoContext) {\n // Flush the immediate callbacks that were scheduled during this batch\n flushSyncCallbackQueue();\n }\n }\n}\nfunction flushSync(fn, a) {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n {\n {\n throw Error( \"flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.\" );\n }\n }\n }\n\n var prevExecutionContext = executionContext;\n executionContext |= BatchedContext;\n\n try {\n return runWithPriority$1(ImmediatePriority, fn.bind(null, a));\n } finally {\n executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.\n // Note that this will happen even if batchedUpdates is higher up\n // the stack.\n\n flushSyncCallbackQueue();\n }\n}\n\nfunction prepareFreshStack(root, expirationTime) {\n root.finishedWork = null;\n root.finishedExpirationTime = NoWork;\n var timeoutHandle = root.timeoutHandle;\n\n if (timeoutHandle !== noTimeout) {\n // The root previous suspended and scheduled a timeout to commit a fallback\n // state. Now that we have additional work, cancel the timeout.\n root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above\n\n cancelTimeout(timeoutHandle);\n }\n\n if (workInProgress !== null) {\n var interruptedWork = workInProgress.return;\n\n while (interruptedWork !== null) {\n unwindInterruptedWork(interruptedWork);\n interruptedWork = interruptedWork.return;\n }\n }\n\n workInProgressRoot = root;\n workInProgress = createWorkInProgress(root.current, null);\n renderExpirationTime$1 = expirationTime;\n workInProgressRootExitStatus = RootIncomplete;\n workInProgressRootFatalError = null;\n workInProgressRootLatestProcessedExpirationTime = Sync;\n workInProgressRootLatestSuspenseTimeout = Sync;\n workInProgressRootCanSuspendUsingConfig = null;\n workInProgressRootNextUnprocessedUpdateTime = NoWork;\n workInProgressRootHasPendingPing = false;\n\n {\n spawnedWorkDuringRender = null;\n }\n\n {\n ReactStrictModeWarnings.discardPendingWarnings();\n }\n}\n\nfunction handleError(root, thrownValue) {\n do {\n try {\n // Reset module-level state that was set during the render phase.\n resetContextDependencies();\n resetHooksAfterThrow();\n resetCurrentFiber();\n\n if (workInProgress === null || workInProgress.return === null) {\n // Expected to be working on a non-root fiber. This is a fatal error\n // because there's no ancestor that can handle it; the root is\n // supposed to capture all errors that weren't caught by an error\n // boundary.\n workInProgressRootExitStatus = RootFatalErrored;\n workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next\n // sibling, or the parent if there are no siblings. But since the root\n // has no siblings nor a parent, we set it to null. Usually this is\n // handled by `completeUnitOfWork` or `unwindWork`, but since we're\n // interntionally not calling those, we need set it here.\n // TODO: Consider calling `unwindWork` to pop the contexts.\n\n workInProgress = null;\n return null;\n }\n\n if (enableProfilerTimer && workInProgress.mode & ProfileMode) {\n // Record the time spent rendering before an error was thrown. This\n // avoids inaccurate Profiler durations in the case of a\n // suspended render.\n stopProfilerTimerIfRunningAndRecordDelta(workInProgress, true);\n }\n\n throwException(root, workInProgress.return, workInProgress, thrownValue, renderExpirationTime$1);\n workInProgress = completeUnitOfWork(workInProgress);\n } catch (yetAnotherThrownValue) {\n // Something in the return path also threw.\n thrownValue = yetAnotherThrownValue;\n continue;\n } // Return to the normal work loop.\n\n\n return;\n } while (true);\n}\n\nfunction pushDispatcher(root) {\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n if (prevDispatcher === null) {\n // The React isomorphic package does not include a default dispatcher.\n // Instead the first renderer will lazily attach one, in order to give\n // nicer error messages.\n return ContextOnlyDispatcher;\n } else {\n return prevDispatcher;\n }\n}\n\nfunction popDispatcher(prevDispatcher) {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n}\n\nfunction pushInteractions(root) {\n {\n var prevInteractions = tracing.__interactionsRef.current;\n tracing.__interactionsRef.current = root.memoizedInteractions;\n return prevInteractions;\n }\n}\n\nfunction popInteractions(prevInteractions) {\n {\n tracing.__interactionsRef.current = prevInteractions;\n }\n}\n\nfunction markCommitTimeOfFallback() {\n globalMostRecentFallbackTime = now();\n}\nfunction markRenderEventTimeAndConfig(expirationTime, suspenseConfig) {\n if (expirationTime < workInProgressRootLatestProcessedExpirationTime && expirationTime > Idle) {\n workInProgressRootLatestProcessedExpirationTime = expirationTime;\n }\n\n if (suspenseConfig !== null) {\n if (expirationTime < workInProgressRootLatestSuspenseTimeout && expirationTime > Idle) {\n workInProgressRootLatestSuspenseTimeout = expirationTime; // Most of the time we only have one config and getting wrong is not bad.\n\n workInProgressRootCanSuspendUsingConfig = suspenseConfig;\n }\n }\n}\nfunction markUnprocessedUpdateTime(expirationTime) {\n if (expirationTime > workInProgressRootNextUnprocessedUpdateTime) {\n workInProgressRootNextUnprocessedUpdateTime = expirationTime;\n }\n}\nfunction renderDidSuspend() {\n if (workInProgressRootExitStatus === RootIncomplete) {\n workInProgressRootExitStatus = RootSuspended;\n }\n}\nfunction renderDidSuspendDelayIfPossible() {\n if (workInProgressRootExitStatus === RootIncomplete || workInProgressRootExitStatus === RootSuspended) {\n workInProgressRootExitStatus = RootSuspendedWithDelay;\n } // Check if there's a lower priority update somewhere else in the tree.\n\n\n if (workInProgressRootNextUnprocessedUpdateTime !== NoWork && workInProgressRoot !== null) {\n // Mark the current render as suspended, and then mark that there's a\n // pending update.\n // TODO: This should immediately interrupt the current render, instead\n // of waiting until the next time we yield.\n markRootSuspendedAtTime(workInProgressRoot, renderExpirationTime$1);\n markRootUpdatedAtTime(workInProgressRoot, workInProgressRootNextUnprocessedUpdateTime);\n }\n}\nfunction renderDidError() {\n if (workInProgressRootExitStatus !== RootCompleted) {\n workInProgressRootExitStatus = RootErrored;\n }\n} // Called during render to determine if anything has suspended.\n// Returns false if we're not sure.\n\nfunction renderHasNotSuspendedYet() {\n // If something errored or completed, we can't really be sure,\n // so those are false.\n return workInProgressRootExitStatus === RootIncomplete;\n}\n\nfunction inferTimeFromExpirationTime(expirationTime) {\n // We don't know exactly when the update was scheduled, but we can infer an\n // approximate start time from the expiration time.\n var earliestExpirationTimeMs = expirationTimeToMs(expirationTime);\n return earliestExpirationTimeMs - LOW_PRIORITY_EXPIRATION;\n}\n\nfunction inferTimeFromExpirationTimeWithSuspenseConfig(expirationTime, suspenseConfig) {\n // We don't know exactly when the update was scheduled, but we can infer an\n // approximate start time from the expiration time by subtracting the timeout\n // that was added to the event time.\n var earliestExpirationTimeMs = expirationTimeToMs(expirationTime);\n return earliestExpirationTimeMs - (suspenseConfig.timeoutMs | 0 || LOW_PRIORITY_EXPIRATION);\n} // The work loop is an extremely hot path. Tell Closure not to inline it.\n\n/** @noinline */\n\n\nfunction workLoopSync() {\n // Already timed out, so perform work without checking if we need to yield.\n while (workInProgress !== null) {\n workInProgress = performUnitOfWork(workInProgress);\n }\n}\n/** @noinline */\n\n\nfunction workLoopConcurrent() {\n // Perform work until Scheduler asks us to yield\n while (workInProgress !== null && !shouldYield()) {\n workInProgress = performUnitOfWork(workInProgress);\n }\n}\n\nfunction performUnitOfWork(unitOfWork) {\n // The current, flushed, state of this fiber is the alternate. Ideally\n // nothing should rely on this, but relying on it here means that we don't\n // need an additional field on the work in progress.\n var current = unitOfWork.alternate;\n startWorkTimer(unitOfWork);\n setCurrentFiber(unitOfWork);\n var next;\n\n if ( (unitOfWork.mode & ProfileMode) !== NoMode) {\n startProfilerTimer(unitOfWork);\n next = beginWork$1(current, unitOfWork, renderExpirationTime$1);\n stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);\n } else {\n next = beginWork$1(current, unitOfWork, renderExpirationTime$1);\n }\n\n resetCurrentFiber();\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n\n if (next === null) {\n // If this doesn't spawn new work, complete the current work.\n next = completeUnitOfWork(unitOfWork);\n }\n\n ReactCurrentOwner$2.current = null;\n return next;\n}\n\nfunction completeUnitOfWork(unitOfWork) {\n // Attempt to complete the current unit of work, then move to the next\n // sibling. If there are no more siblings, return to the parent fiber.\n workInProgress = unitOfWork;\n\n do {\n // The current, flushed, state of this fiber is the alternate. Ideally\n // nothing should rely on this, but relying on it here means that we don't\n // need an additional field on the work in progress.\n var current = workInProgress.alternate;\n var returnFiber = workInProgress.return; // Check if the work completed or if something threw.\n\n if ((workInProgress.effectTag & Incomplete) === NoEffect) {\n setCurrentFiber(workInProgress);\n var next = void 0;\n\n if ( (workInProgress.mode & ProfileMode) === NoMode) {\n next = completeWork(current, workInProgress, renderExpirationTime$1);\n } else {\n startProfilerTimer(workInProgress);\n next = completeWork(current, workInProgress, renderExpirationTime$1); // Update render duration assuming we didn't error.\n\n stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false);\n }\n\n stopWorkTimer(workInProgress);\n resetCurrentFiber();\n resetChildExpirationTime(workInProgress);\n\n if (next !== null) {\n // Completing this fiber spawned new work. Work on that next.\n return next;\n }\n\n if (returnFiber !== null && // Do not append effects to parents if a sibling failed to complete\n (returnFiber.effectTag & Incomplete) === NoEffect) {\n // Append all the effects of the subtree and this fiber onto the effect\n // list of the parent. The completion order of the children affects the\n // side-effect order.\n if (returnFiber.firstEffect === null) {\n returnFiber.firstEffect = workInProgress.firstEffect;\n }\n\n if (workInProgress.lastEffect !== null) {\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = workInProgress.firstEffect;\n }\n\n returnFiber.lastEffect = workInProgress.lastEffect;\n } // If this fiber had side-effects, we append it AFTER the children's\n // side-effects. We can perform certain side-effects earlier if needed,\n // by doing multiple passes over the effect list. We don't want to\n // schedule our own side-effect on our own list because if end up\n // reusing children we'll schedule this effect onto itself since we're\n // at the end.\n\n\n var effectTag = workInProgress.effectTag; // Skip both NoWork and PerformedWork tags when creating the effect\n // list. PerformedWork effect is read by React DevTools but shouldn't be\n // committed.\n\n if (effectTag > PerformedWork) {\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = workInProgress;\n } else {\n returnFiber.firstEffect = workInProgress;\n }\n\n returnFiber.lastEffect = workInProgress;\n }\n }\n } else {\n // This fiber did not complete because something threw. Pop values off\n // the stack without entering the complete phase. If this is a boundary,\n // capture values if possible.\n var _next = unwindWork(workInProgress); // Because this fiber did not complete, don't reset its expiration time.\n\n\n if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n // Record the render duration for the fiber that errored.\n stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false); // Include the time spent working on failed children before continuing.\n\n var actualDuration = workInProgress.actualDuration;\n var child = workInProgress.child;\n\n while (child !== null) {\n actualDuration += child.actualDuration;\n child = child.sibling;\n }\n\n workInProgress.actualDuration = actualDuration;\n }\n\n if (_next !== null) {\n // If completing this work spawned new work, do that next. We'll come\n // back here again.\n // Since we're restarting, remove anything that is not a host effect\n // from the effect tag.\n // TODO: The name stopFailedWorkTimer is misleading because Suspense\n // also captures and restarts.\n stopFailedWorkTimer(workInProgress);\n _next.effectTag &= HostEffectMask;\n return _next;\n }\n\n stopWorkTimer(workInProgress);\n\n if (returnFiber !== null) {\n // Mark the parent fiber as incomplete and clear its effect list.\n returnFiber.firstEffect = returnFiber.lastEffect = null;\n returnFiber.effectTag |= Incomplete;\n }\n }\n\n var siblingFiber = workInProgress.sibling;\n\n if (siblingFiber !== null) {\n // If there is more work to do in this returnFiber, do that next.\n return siblingFiber;\n } // Otherwise, return to the parent\n\n\n workInProgress = returnFiber;\n } while (workInProgress !== null); // We've reached the root.\n\n\n if (workInProgressRootExitStatus === RootIncomplete) {\n workInProgressRootExitStatus = RootCompleted;\n }\n\n return null;\n}\n\nfunction getRemainingExpirationTime(fiber) {\n var updateExpirationTime = fiber.expirationTime;\n var childExpirationTime = fiber.childExpirationTime;\n return updateExpirationTime > childExpirationTime ? updateExpirationTime : childExpirationTime;\n}\n\nfunction resetChildExpirationTime(completedWork) {\n if (renderExpirationTime$1 !== Never && completedWork.childExpirationTime === Never) {\n // The children of this component are hidden. Don't bubble their\n // expiration times.\n return;\n }\n\n var newChildExpirationTime = NoWork; // Bubble up the earliest expiration time.\n\n if ( (completedWork.mode & ProfileMode) !== NoMode) {\n // In profiling mode, resetChildExpirationTime is also used to reset\n // profiler durations.\n var actualDuration = completedWork.actualDuration;\n var treeBaseDuration = completedWork.selfBaseDuration; // When a fiber is cloned, its actualDuration is reset to 0. This value will\n // only be updated if work is done on the fiber (i.e. it doesn't bailout).\n // When work is done, it should bubble to the parent's actualDuration. If\n // the fiber has not been cloned though, (meaning no work was done), then\n // this value will reflect the amount of time spent working on a previous\n // render. In that case it should not bubble. We determine whether it was\n // cloned by comparing the child pointer.\n\n var shouldBubbleActualDurations = completedWork.alternate === null || completedWork.child !== completedWork.alternate.child;\n var child = completedWork.child;\n\n while (child !== null) {\n var childUpdateExpirationTime = child.expirationTime;\n var childChildExpirationTime = child.childExpirationTime;\n\n if (childUpdateExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = childUpdateExpirationTime;\n }\n\n if (childChildExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = childChildExpirationTime;\n }\n\n if (shouldBubbleActualDurations) {\n actualDuration += child.actualDuration;\n }\n\n treeBaseDuration += child.treeBaseDuration;\n child = child.sibling;\n }\n\n completedWork.actualDuration = actualDuration;\n completedWork.treeBaseDuration = treeBaseDuration;\n } else {\n var _child = completedWork.child;\n\n while (_child !== null) {\n var _childUpdateExpirationTime = _child.expirationTime;\n var _childChildExpirationTime = _child.childExpirationTime;\n\n if (_childUpdateExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = _childUpdateExpirationTime;\n }\n\n if (_childChildExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = _childChildExpirationTime;\n }\n\n _child = _child.sibling;\n }\n }\n\n completedWork.childExpirationTime = newChildExpirationTime;\n}\n\nfunction commitRoot(root) {\n var renderPriorityLevel = getCurrentPriorityLevel();\n runWithPriority$1(ImmediatePriority, commitRootImpl.bind(null, root, renderPriorityLevel));\n return null;\n}\n\nfunction commitRootImpl(root, renderPriorityLevel) {\n do {\n // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which\n // means `flushPassiveEffects` will sometimes result in additional\n // passive effects. So we need to keep flushing in a loop until there are\n // no more pending effects.\n // TODO: Might be better if `flushPassiveEffects` did not automatically\n // flush synchronous work at the end, to avoid factoring hazards like this.\n flushPassiveEffects();\n } while (rootWithPendingPassiveEffects !== null);\n\n flushRenderPhaseStrictModeWarningsInDEV();\n\n if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n {\n throw Error( \"Should not already be working.\" );\n }\n }\n\n var finishedWork = root.finishedWork;\n var expirationTime = root.finishedExpirationTime;\n\n if (finishedWork === null) {\n return null;\n }\n\n root.finishedWork = null;\n root.finishedExpirationTime = NoWork;\n\n if (!(finishedWork !== root.current)) {\n {\n throw Error( \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n } // commitRoot never returns a continuation; it always finishes synchronously.\n // So we can clear these now to allow a new callback to be scheduled.\n\n\n root.callbackNode = null;\n root.callbackExpirationTime = NoWork;\n root.callbackPriority = NoPriority;\n root.nextKnownPendingLevel = NoWork;\n startCommitTimer(); // Update the first and last pending times on this root. The new first\n // pending time is whatever is left on the root fiber.\n\n var remainingExpirationTimeBeforeCommit = getRemainingExpirationTime(finishedWork);\n markRootFinishedAtTime(root, expirationTime, remainingExpirationTimeBeforeCommit);\n\n if (root === workInProgressRoot) {\n // We can reset these now that they are finished.\n workInProgressRoot = null;\n workInProgress = null;\n renderExpirationTime$1 = NoWork;\n } // This indicates that the last root we worked on is not the same one that\n // we're committing now. This most commonly happens when a suspended root\n // times out.\n // Get the list of effects.\n\n\n var firstEffect;\n\n if (finishedWork.effectTag > PerformedWork) {\n // A fiber's effect list consists only of its children, not itself. So if\n // the root has an effect, we need to add it to the end of the list. The\n // resulting list is the set that would belong to the root's parent, if it\n // had one; that is, all the effects in the tree including the root.\n if (finishedWork.lastEffect !== null) {\n finishedWork.lastEffect.nextEffect = finishedWork;\n firstEffect = finishedWork.firstEffect;\n } else {\n firstEffect = finishedWork;\n }\n } else {\n // There is no effect on the root.\n firstEffect = finishedWork.firstEffect;\n }\n\n if (firstEffect !== null) {\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n var prevInteractions = pushInteractions(root); // Reset this to null before calling lifecycles\n\n ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass\n // of the effect list for each phase: all mutation effects come before all\n // layout effects, and so on.\n // The first phase a \"before mutation\" phase. We use this phase to read the\n // state of the host tree right before we mutate it. This is where\n // getSnapshotBeforeUpdate is called.\n\n startCommitSnapshotEffectsTimer();\n prepareForCommit(root.containerInfo);\n nextEffect = firstEffect;\n\n do {\n {\n invokeGuardedCallback(null, commitBeforeMutationEffects, null);\n\n if (hasCaughtError()) {\n if (!(nextEffect !== null)) {\n {\n throw Error( \"Should be working on an effect.\" );\n }\n }\n\n var error = clearCaughtError();\n captureCommitPhaseError(nextEffect, error);\n nextEffect = nextEffect.nextEffect;\n }\n }\n } while (nextEffect !== null);\n\n stopCommitSnapshotEffectsTimer();\n\n {\n // Mark the current commit time to be shared by all Profilers in this\n // batch. This enables them to be grouped later.\n recordCommitTime();\n } // The next phase is the mutation phase, where we mutate the host tree.\n\n\n startCommitHostEffectsTimer();\n nextEffect = firstEffect;\n\n do {\n {\n invokeGuardedCallback(null, commitMutationEffects, null, root, renderPriorityLevel);\n\n if (hasCaughtError()) {\n if (!(nextEffect !== null)) {\n {\n throw Error( \"Should be working on an effect.\" );\n }\n }\n\n var _error = clearCaughtError();\n\n captureCommitPhaseError(nextEffect, _error);\n nextEffect = nextEffect.nextEffect;\n }\n }\n } while (nextEffect !== null);\n\n stopCommitHostEffectsTimer();\n resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after\n // the mutation phase, so that the previous tree is still current during\n // componentWillUnmount, but before the layout phase, so that the finished\n // work is current during componentDidMount/Update.\n\n root.current = finishedWork; // The next phase is the layout phase, where we call effects that read\n // the host tree after it's been mutated. The idiomatic use case for this is\n // layout, but class component lifecycles also fire here for legacy reasons.\n\n startCommitLifeCyclesTimer();\n nextEffect = firstEffect;\n\n do {\n {\n invokeGuardedCallback(null, commitLayoutEffects, null, root, expirationTime);\n\n if (hasCaughtError()) {\n if (!(nextEffect !== null)) {\n {\n throw Error( \"Should be working on an effect.\" );\n }\n }\n\n var _error2 = clearCaughtError();\n\n captureCommitPhaseError(nextEffect, _error2);\n nextEffect = nextEffect.nextEffect;\n }\n }\n } while (nextEffect !== null);\n\n stopCommitLifeCyclesTimer();\n nextEffect = null; // Tell Scheduler to yield at the end of the frame, so the browser has an\n // opportunity to paint.\n\n requestPaint();\n\n {\n popInteractions(prevInteractions);\n }\n\n executionContext = prevExecutionContext;\n } else {\n // No effects.\n root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were\n // no effects.\n // TODO: Maybe there's a better way to report this.\n\n startCommitSnapshotEffectsTimer();\n stopCommitSnapshotEffectsTimer();\n\n {\n recordCommitTime();\n }\n\n startCommitHostEffectsTimer();\n stopCommitHostEffectsTimer();\n startCommitLifeCyclesTimer();\n stopCommitLifeCyclesTimer();\n }\n\n stopCommitTimer();\n var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;\n\n if (rootDoesHavePassiveEffects) {\n // This commit has passive effects. Stash a reference to them. But don't\n // schedule a callback until after flushing layout work.\n rootDoesHavePassiveEffects = false;\n rootWithPendingPassiveEffects = root;\n pendingPassiveEffectsExpirationTime = expirationTime;\n pendingPassiveEffectsRenderPriority = renderPriorityLevel;\n } else {\n // We are done with the effect chain at this point so let's clear the\n // nextEffect pointers to assist with GC. If we have passive effects, we'll\n // clear this in flushPassiveEffects.\n nextEffect = firstEffect;\n\n while (nextEffect !== null) {\n var nextNextEffect = nextEffect.nextEffect;\n nextEffect.nextEffect = null;\n nextEffect = nextNextEffect;\n }\n } // Check if there's remaining work on this root\n\n\n var remainingExpirationTime = root.firstPendingTime;\n\n if (remainingExpirationTime !== NoWork) {\n {\n if (spawnedWorkDuringRender !== null) {\n var expirationTimes = spawnedWorkDuringRender;\n spawnedWorkDuringRender = null;\n\n for (var i = 0; i < expirationTimes.length; i++) {\n scheduleInteractions(root, expirationTimes[i], root.memoizedInteractions);\n }\n }\n\n schedulePendingInteractions(root, remainingExpirationTime);\n }\n } else {\n // If there's no remaining work, we can clear the set of already failed\n // error boundaries.\n legacyErrorBoundariesThatAlreadyFailed = null;\n }\n\n {\n if (!rootDidHavePassiveEffects) {\n // If there are no passive effects, then we can complete the pending interactions.\n // Otherwise, we'll wait until after the passive effects are flushed.\n // Wait to do this until after remaining work has been scheduled,\n // so that we don't prematurely signal complete for interactions when there's e.g. hidden work.\n finishPendingInteractions(root, expirationTime);\n }\n }\n\n if (remainingExpirationTime === Sync) {\n // Count the number of times the root synchronously re-renders without\n // finishing. If there are too many, it indicates an infinite update loop.\n if (root === rootWithNestedUpdates) {\n nestedUpdateCount++;\n } else {\n nestedUpdateCount = 0;\n rootWithNestedUpdates = root;\n }\n } else {\n nestedUpdateCount = 0;\n }\n\n onCommitRoot(finishedWork.stateNode, expirationTime); // Always call this before exiting `commitRoot`, to ensure that any\n // additional work on this root is scheduled.\n\n ensureRootIsScheduled(root);\n\n if (hasUncaughtError) {\n hasUncaughtError = false;\n var _error3 = firstUncaughtError;\n firstUncaughtError = null;\n throw _error3;\n }\n\n if ((executionContext & LegacyUnbatchedContext) !== NoContext) {\n // This is a legacy edge case. We just committed the initial mount of\n // a ReactDOM.render-ed root inside of batchedUpdates. The commit fired\n // synchronously, but layout updates should be deferred until the end\n // of the batch.\n return null;\n } // If layout work was scheduled, flush it now.\n\n\n flushSyncCallbackQueue();\n return null;\n}\n\nfunction commitBeforeMutationEffects() {\n while (nextEffect !== null) {\n var effectTag = nextEffect.effectTag;\n\n if ((effectTag & Snapshot) !== NoEffect) {\n setCurrentFiber(nextEffect);\n recordEffect();\n var current = nextEffect.alternate;\n commitBeforeMutationLifeCycles(current, nextEffect);\n resetCurrentFiber();\n }\n\n if ((effectTag & Passive) !== NoEffect) {\n // If there are passive effects, schedule a callback to flush at\n // the earliest opportunity.\n if (!rootDoesHavePassiveEffects) {\n rootDoesHavePassiveEffects = true;\n scheduleCallback(NormalPriority, function () {\n flushPassiveEffects();\n return null;\n });\n }\n }\n\n nextEffect = nextEffect.nextEffect;\n }\n}\n\nfunction commitMutationEffects(root, renderPriorityLevel) {\n // TODO: Should probably move the bulk of this function to commitWork.\n while (nextEffect !== null) {\n setCurrentFiber(nextEffect);\n var effectTag = nextEffect.effectTag;\n\n if (effectTag & ContentReset) {\n commitResetTextContent(nextEffect);\n }\n\n if (effectTag & Ref) {\n var current = nextEffect.alternate;\n\n if (current !== null) {\n commitDetachRef(current);\n }\n } // The following switch statement is only concerned about placement,\n // updates, and deletions. To avoid needing to add a case for every possible\n // bitmap value, we remove the secondary effects from the effect tag and\n // switch on that value.\n\n\n var primaryEffectTag = effectTag & (Placement | Update | Deletion | Hydrating);\n\n switch (primaryEffectTag) {\n case Placement:\n {\n commitPlacement(nextEffect); // Clear the \"placement\" from effect tag so that we know that this is\n // inserted, before any life-cycles like componentDidMount gets called.\n // TODO: findDOMNode doesn't rely on this any more but isMounted does\n // and isMounted is deprecated anyway so we should be able to kill this.\n\n nextEffect.effectTag &= ~Placement;\n break;\n }\n\n case PlacementAndUpdate:\n {\n // Placement\n commitPlacement(nextEffect); // Clear the \"placement\" from effect tag so that we know that this is\n // inserted, before any life-cycles like componentDidMount gets called.\n\n nextEffect.effectTag &= ~Placement; // Update\n\n var _current = nextEffect.alternate;\n commitWork(_current, nextEffect);\n break;\n }\n\n case Hydrating:\n {\n nextEffect.effectTag &= ~Hydrating;\n break;\n }\n\n case HydratingAndUpdate:\n {\n nextEffect.effectTag &= ~Hydrating; // Update\n\n var _current2 = nextEffect.alternate;\n commitWork(_current2, nextEffect);\n break;\n }\n\n case Update:\n {\n var _current3 = nextEffect.alternate;\n commitWork(_current3, nextEffect);\n break;\n }\n\n case Deletion:\n {\n commitDeletion(root, nextEffect, renderPriorityLevel);\n break;\n }\n } // TODO: Only record a mutation effect if primaryEffectTag is non-zero.\n\n\n recordEffect();\n resetCurrentFiber();\n nextEffect = nextEffect.nextEffect;\n }\n}\n\nfunction commitLayoutEffects(root, committedExpirationTime) {\n // TODO: Should probably move the bulk of this function to commitWork.\n while (nextEffect !== null) {\n setCurrentFiber(nextEffect);\n var effectTag = nextEffect.effectTag;\n\n if (effectTag & (Update | Callback)) {\n recordEffect();\n var current = nextEffect.alternate;\n commitLifeCycles(root, current, nextEffect);\n }\n\n if (effectTag & Ref) {\n recordEffect();\n commitAttachRef(nextEffect);\n }\n\n resetCurrentFiber();\n nextEffect = nextEffect.nextEffect;\n }\n}\n\nfunction flushPassiveEffects() {\n if (pendingPassiveEffectsRenderPriority !== NoPriority) {\n var priorityLevel = pendingPassiveEffectsRenderPriority > NormalPriority ? NormalPriority : pendingPassiveEffectsRenderPriority;\n pendingPassiveEffectsRenderPriority = NoPriority;\n return runWithPriority$1(priorityLevel, flushPassiveEffectsImpl);\n }\n}\n\nfunction flushPassiveEffectsImpl() {\n if (rootWithPendingPassiveEffects === null) {\n return false;\n }\n\n var root = rootWithPendingPassiveEffects;\n var expirationTime = pendingPassiveEffectsExpirationTime;\n rootWithPendingPassiveEffects = null;\n pendingPassiveEffectsExpirationTime = NoWork;\n\n if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n {\n throw Error( \"Cannot flush passive effects while already rendering.\" );\n }\n }\n\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n var prevInteractions = pushInteractions(root);\n\n {\n // Note: This currently assumes there are no passive effects on the root fiber\n // because the root is not part of its own effect list.\n // This could change in the future.\n var _effect2 = root.current.firstEffect;\n\n while (_effect2 !== null) {\n {\n setCurrentFiber(_effect2);\n invokeGuardedCallback(null, commitPassiveHookEffects, null, _effect2);\n\n if (hasCaughtError()) {\n if (!(_effect2 !== null)) {\n {\n throw Error( \"Should be working on an effect.\" );\n }\n }\n\n var _error5 = clearCaughtError();\n\n captureCommitPhaseError(_effect2, _error5);\n }\n\n resetCurrentFiber();\n }\n\n var nextNextEffect = _effect2.nextEffect; // Remove nextEffect pointer to assist GC\n\n _effect2.nextEffect = null;\n _effect2 = nextNextEffect;\n }\n }\n\n {\n popInteractions(prevInteractions);\n finishPendingInteractions(root, expirationTime);\n }\n\n executionContext = prevExecutionContext;\n flushSyncCallbackQueue(); // If additional passive effects were scheduled, increment a counter. If this\n // exceeds the limit, we'll fire a warning.\n\n nestedPassiveUpdateCount = rootWithPendingPassiveEffects === null ? 0 : nestedPassiveUpdateCount + 1;\n return true;\n}\n\nfunction isAlreadyFailedLegacyErrorBoundary(instance) {\n return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);\n}\nfunction markLegacyErrorBoundaryAsFailed(instance) {\n if (legacyErrorBoundariesThatAlreadyFailed === null) {\n legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);\n } else {\n legacyErrorBoundariesThatAlreadyFailed.add(instance);\n }\n}\n\nfunction prepareToThrowUncaughtError(error) {\n if (!hasUncaughtError) {\n hasUncaughtError = true;\n firstUncaughtError = error;\n }\n}\n\nvar onUncaughtError = prepareToThrowUncaughtError;\n\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n var errorInfo = createCapturedValue(error, sourceFiber);\n var update = createRootErrorUpdate(rootFiber, errorInfo, Sync);\n enqueueUpdate(rootFiber, update);\n var root = markUpdateTimeFromFiberToRoot(rootFiber, Sync);\n\n if (root !== null) {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, Sync);\n }\n}\n\nfunction captureCommitPhaseError(sourceFiber, error) {\n if (sourceFiber.tag === HostRoot) {\n // Error was thrown at the root. There is no parent, so the root\n // itself should capture it.\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n return;\n }\n\n var fiber = sourceFiber.return;\n\n while (fiber !== null) {\n if (fiber.tag === HostRoot) {\n captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error);\n return;\n } else if (fiber.tag === ClassComponent) {\n var ctor = fiber.type;\n var instance = fiber.stateNode;\n\n if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {\n var errorInfo = createCapturedValue(error, sourceFiber);\n var update = createClassErrorUpdate(fiber, errorInfo, // TODO: This is always sync\n Sync);\n enqueueUpdate(fiber, update);\n var root = markUpdateTimeFromFiberToRoot(fiber, Sync);\n\n if (root !== null) {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, Sync);\n }\n\n return;\n }\n }\n\n fiber = fiber.return;\n }\n}\nfunction pingSuspendedRoot(root, thenable, suspendedTime) {\n var pingCache = root.pingCache;\n\n if (pingCache !== null) {\n // The thenable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n pingCache.delete(thenable);\n }\n\n if (workInProgressRoot === root && renderExpirationTime$1 === suspendedTime) {\n // Received a ping at the same priority level at which we're currently\n // rendering. We might want to restart this render. This should mirror\n // the logic of whether or not a root suspends once it completes.\n // TODO: If we're rendering sync either due to Sync, Batched or expired,\n // we should probably never restart.\n // If we're suspended with delay, we'll always suspend so we can always\n // restart. If we're suspended without any updates, it might be a retry.\n // If it's early in the retry we can restart. We can't know for sure\n // whether we'll eventually process an update during this render pass,\n // but it's somewhat unlikely that we get to a ping before that, since\n // getting to the root most update is usually very fast.\n if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && workInProgressRootLatestProcessedExpirationTime === Sync && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {\n // Restart from the root. Don't need to schedule a ping because\n // we're already working on this tree.\n prepareFreshStack(root, renderExpirationTime$1);\n } else {\n // Even though we can't restart right now, we might get an\n // opportunity later. So we mark this render as having a ping.\n workInProgressRootHasPendingPing = true;\n }\n\n return;\n }\n\n if (!isRootSuspendedAtTime(root, suspendedTime)) {\n // The root is no longer suspended at this time.\n return;\n }\n\n var lastPingedTime = root.lastPingedTime;\n\n if (lastPingedTime !== NoWork && lastPingedTime < suspendedTime) {\n // There's already a lower priority ping scheduled.\n return;\n } // Mark the time at which this ping was scheduled.\n\n\n root.lastPingedTime = suspendedTime;\n\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, suspendedTime);\n}\n\nfunction retryTimedOutBoundary(boundaryFiber, retryTime) {\n // The boundary fiber (a Suspense component or SuspenseList component)\n // previously was rendered in its fallback state. One of the promises that\n // suspended it has resolved, which means at least part of the tree was\n // likely unblocked. Try rendering again, at a new expiration time.\n if (retryTime === NoWork) {\n var suspenseConfig = null; // Retries don't carry over the already committed update.\n\n var currentTime = requestCurrentTimeForUpdate();\n retryTime = computeExpirationForFiber(currentTime, boundaryFiber, suspenseConfig);\n } // TODO: Special case idle priority?\n\n\n var root = markUpdateTimeFromFiberToRoot(boundaryFiber, retryTime);\n\n if (root !== null) {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, retryTime);\n }\n}\nfunction resolveRetryThenable(boundaryFiber, thenable) {\n var retryTime = NoWork; // Default\n\n var retryCache;\n\n {\n retryCache = boundaryFiber.stateNode;\n }\n\n if (retryCache !== null) {\n // The thenable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n retryCache.delete(thenable);\n }\n\n retryTimedOutBoundary(boundaryFiber, retryTime);\n} // Computes the next Just Noticeable Difference (JND) boundary.\n// The theory is that a person can't tell the difference between small differences in time.\n// Therefore, if we wait a bit longer than necessary that won't translate to a noticeable\n// difference in the experience. However, waiting for longer might mean that we can avoid\n// showing an intermediate loading state. The longer we have already waited, the harder it\n// is to tell small differences in time. Therefore, the longer we've already waited,\n// the longer we can wait additionally. At some point we have to give up though.\n// We pick a train model where the next boundary commits at a consistent schedule.\n// These particular numbers are vague estimates. We expect to adjust them based on research.\n\nfunction jnd(timeElapsed) {\n return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960;\n}\n\nfunction computeMsUntilSuspenseLoadingDelay(mostRecentEventTime, committedExpirationTime, suspenseConfig) {\n var busyMinDurationMs = suspenseConfig.busyMinDurationMs | 0;\n\n if (busyMinDurationMs <= 0) {\n return 0;\n }\n\n var busyDelayMs = suspenseConfig.busyDelayMs | 0; // Compute the time until this render pass would expire.\n\n var currentTimeMs = now();\n var eventTimeMs = inferTimeFromExpirationTimeWithSuspenseConfig(mostRecentEventTime, suspenseConfig);\n var timeElapsed = currentTimeMs - eventTimeMs;\n\n if (timeElapsed <= busyDelayMs) {\n // If we haven't yet waited longer than the initial delay, we don't\n // have to wait any additional time.\n return 0;\n }\n\n var msUntilTimeout = busyDelayMs + busyMinDurationMs - timeElapsed; // This is the value that is passed to `setTimeout`.\n\n return msUntilTimeout;\n}\n\nfunction checkForNestedUpdates() {\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {\n nestedUpdateCount = 0;\n rootWithNestedUpdates = null;\n\n {\n {\n throw Error( \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\" );\n }\n }\n }\n\n {\n if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {\n nestedPassiveUpdateCount = 0;\n\n error('Maximum update depth exceeded. This can happen when a component ' + \"calls setState inside useEffect, but useEffect either doesn't \" + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');\n }\n }\n}\n\nfunction flushRenderPhaseStrictModeWarningsInDEV() {\n {\n ReactStrictModeWarnings.flushLegacyContextWarning();\n\n {\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n }\n }\n}\n\nfunction stopFinishedWorkLoopTimer() {\n var didCompleteRoot = true;\n stopWorkLoopTimer(interruptedBy, didCompleteRoot);\n interruptedBy = null;\n}\n\nfunction stopInterruptedWorkLoopTimer() {\n // TODO: Track which fiber caused the interruption.\n var didCompleteRoot = false;\n stopWorkLoopTimer(interruptedBy, didCompleteRoot);\n interruptedBy = null;\n}\n\nfunction checkForInterruption(fiberThatReceivedUpdate, updateExpirationTime) {\n if ( workInProgressRoot !== null && updateExpirationTime > renderExpirationTime$1) {\n interruptedBy = fiberThatReceivedUpdate;\n }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = null;\n\nfunction warnAboutUpdateOnUnmountedFiberInDEV(fiber) {\n {\n var tag = fiber.tag;\n\n if (tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent && tag !== Block) {\n // Only warn for user-defined components, not internal ones like Suspense.\n return;\n }\n // the problematic code almost always lies inside that component.\n\n\n var componentName = getComponentName(fiber.type) || 'ReactComponent';\n\n if (didWarnStateUpdateForUnmountedComponent !== null) {\n if (didWarnStateUpdateForUnmountedComponent.has(componentName)) {\n return;\n }\n\n didWarnStateUpdateForUnmountedComponent.add(componentName);\n } else {\n didWarnStateUpdateForUnmountedComponent = new Set([componentName]);\n }\n\n error(\"Can't perform a React state update on an unmounted component. This \" + 'is a no-op, but it indicates a memory leak in your application. To ' + 'fix, cancel all subscriptions and asynchronous tasks in %s.%s', tag === ClassComponent ? 'the componentWillUnmount method' : 'a useEffect cleanup function', getStackByFiberInDevAndProd(fiber));\n }\n}\n\nvar beginWork$1;\n\n{\n var dummyFiber = null;\n\n beginWork$1 = function (current, unitOfWork, expirationTime) {\n // If a component throws an error, we replay it again in a synchronously\n // dispatched event, so that the debugger will treat it as an uncaught\n // error See ReactErrorUtils for more information.\n // Before entering the begin phase, copy the work-in-progress onto a dummy\n // fiber. If beginWork throws, we'll use this to reset the state.\n var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);\n\n try {\n return beginWork(current, unitOfWork, expirationTime);\n } catch (originalError) {\n if (originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {\n // Don't replay promises. Treat everything else like an error.\n throw originalError;\n } // Keep this code in sync with handleError; any changes here must have\n // corresponding changes there.\n\n\n resetContextDependencies();\n resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the\n // same fiber again.\n // Unwind the failed stack frame\n\n unwindInterruptedWork(unitOfWork); // Restore the original properties of the fiber.\n\n assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);\n\n if ( unitOfWork.mode & ProfileMode) {\n // Reset the profiler timer.\n startProfilerTimer(unitOfWork);\n } // Run beginWork again.\n\n\n invokeGuardedCallback(null, beginWork, null, current, unitOfWork, expirationTime);\n\n if (hasCaughtError()) {\n var replayError = clearCaughtError(); // `invokeGuardedCallback` sometimes sets an expando `_suppressLogging`.\n // Rethrow this error instead of the original one.\n\n throw replayError;\n } else {\n // This branch is reachable if the render phase is impure.\n throw originalError;\n }\n }\n };\n}\n\nvar didWarnAboutUpdateInRender = false;\nvar didWarnAboutUpdateInRenderForAnotherComponent;\n\n{\n didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n}\n\nfunction warnAboutRenderPhaseUpdatesInDEV(fiber) {\n {\n if (isRendering && (executionContext & RenderContext) !== NoContext) {\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n var renderingComponentName = workInProgress && getComponentName(workInProgress.type) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.\n\n var dedupeKey = renderingComponentName;\n\n if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {\n didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);\n var setStateComponentName = getComponentName(fiber.type) || 'Unknown';\n\n error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://fb.me/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n if (!didWarnAboutUpdateInRender) {\n error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');\n\n didWarnAboutUpdateInRender = true;\n }\n\n break;\n }\n }\n }\n }\n} // a 'shared' variable that changes when act() opens/closes in tests.\n\n\nvar IsThisRendererActing = {\n current: false\n};\nfunction warnIfNotScopedWithMatchingAct(fiber) {\n {\n if ( IsSomeRendererActing.current === true && IsThisRendererActing.current !== true) {\n error(\"It looks like you're using the wrong act() around your test interactions.\\n\" + 'Be sure to use the matching version of act() corresponding to your renderer:\\n\\n' + '// for react-dom:\\n' + \"import {act} from 'react-dom/test-utils';\\n\" + '// ...\\n' + 'act(() => ...);\\n\\n' + '// for react-test-renderer:\\n' + \"import TestRenderer from 'react-test-renderer';\\n\" + 'const {act} = TestRenderer;\\n' + '// ...\\n' + 'act(() => ...);' + '%s', getStackByFiberInDevAndProd(fiber));\n }\n }\n}\nfunction warnIfNotCurrentlyActingEffectsInDEV(fiber) {\n {\n if ( (fiber.mode & StrictMode) !== NoMode && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {\n error('An update to %s ran an effect, but was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + ' /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://fb.me/react-wrap-tests-with-act' + '%s', getComponentName(fiber.type), getStackByFiberInDevAndProd(fiber));\n }\n }\n}\n\nfunction warnIfNotCurrentlyActingUpdatesInDEV(fiber) {\n {\n if ( executionContext === NoContext && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {\n error('An update to %s inside a test was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + ' /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://fb.me/react-wrap-tests-with-act' + '%s', getComponentName(fiber.type), getStackByFiberInDevAndProd(fiber));\n }\n }\n}\n\nvar warnIfNotCurrentlyActingUpdatesInDev = warnIfNotCurrentlyActingUpdatesInDEV; // In tests, we want to enforce a mocked scheduler.\n\nvar didWarnAboutUnmockedScheduler = false; // TODO Before we release concurrent mode, revisit this and decide whether a mocked\n// scheduler is the actual recommendation. The alternative could be a testing build,\n// a new lib, or whatever; we dunno just yet. This message is for early adopters\n// to get their tests right.\n\nfunction warnIfUnmockedScheduler(fiber) {\n {\n if (didWarnAboutUnmockedScheduler === false && Scheduler.unstable_flushAllWithoutAsserting === undefined) {\n if (fiber.mode & BlockingMode || fiber.mode & ConcurrentMode) {\n didWarnAboutUnmockedScheduler = true;\n\n error('In Concurrent or Sync modes, the \"scheduler\" module needs to be mocked ' + 'to guarantee consistent behaviour across tests and browsers. ' + 'For example, with jest: \\n' + \"jest.mock('scheduler', () => require('scheduler/unstable_mock'));\\n\\n\" + 'For more info, visit https://fb.me/react-mock-scheduler');\n }\n }\n }\n}\n\nfunction computeThreadID(root, expirationTime) {\n // Interaction threads are unique per root and expiration time.\n return expirationTime * 1000 + root.interactionThreadID;\n}\n\nfunction markSpawnedWork(expirationTime) {\n\n if (spawnedWorkDuringRender === null) {\n spawnedWorkDuringRender = [expirationTime];\n } else {\n spawnedWorkDuringRender.push(expirationTime);\n }\n}\n\nfunction scheduleInteractions(root, expirationTime, interactions) {\n\n if (interactions.size > 0) {\n var pendingInteractionMap = root.pendingInteractionMap;\n var pendingInteractions = pendingInteractionMap.get(expirationTime);\n\n if (pendingInteractions != null) {\n interactions.forEach(function (interaction) {\n if (!pendingInteractions.has(interaction)) {\n // Update the pending async work count for previously unscheduled interaction.\n interaction.__count++;\n }\n\n pendingInteractions.add(interaction);\n });\n } else {\n pendingInteractionMap.set(expirationTime, new Set(interactions)); // Update the pending async work count for the current interactions.\n\n interactions.forEach(function (interaction) {\n interaction.__count++;\n });\n }\n\n var subscriber = tracing.__subscriberRef.current;\n\n if (subscriber !== null) {\n var threadID = computeThreadID(root, expirationTime);\n subscriber.onWorkScheduled(interactions, threadID);\n }\n }\n}\n\nfunction schedulePendingInteractions(root, expirationTime) {\n\n scheduleInteractions(root, expirationTime, tracing.__interactionsRef.current);\n}\n\nfunction startWorkOnPendingInteractions(root, expirationTime) {\n // we can accurately attribute time spent working on it, And so that cascading\n // work triggered during the render phase will be associated with it.\n\n\n var interactions = new Set();\n root.pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n if (scheduledExpirationTime >= expirationTime) {\n scheduledInteractions.forEach(function (interaction) {\n return interactions.add(interaction);\n });\n }\n }); // Store the current set of interactions on the FiberRoot for a few reasons:\n // We can re-use it in hot functions like performConcurrentWorkOnRoot()\n // without having to recalculate it. We will also use it in commitWork() to\n // pass to any Profiler onRender() hooks. This also provides DevTools with a\n // way to access it when the onCommitRoot() hook is called.\n\n root.memoizedInteractions = interactions;\n\n if (interactions.size > 0) {\n var subscriber = tracing.__subscriberRef.current;\n\n if (subscriber !== null) {\n var threadID = computeThreadID(root, expirationTime);\n\n try {\n subscriber.onWorkStarted(interactions, threadID);\n } catch (error) {\n // If the subscriber throws, rethrow it in a separate task\n scheduleCallback(ImmediatePriority, function () {\n throw error;\n });\n }\n }\n }\n}\n\nfunction finishPendingInteractions(root, committedExpirationTime) {\n\n var earliestRemainingTimeAfterCommit = root.firstPendingTime;\n var subscriber;\n\n try {\n subscriber = tracing.__subscriberRef.current;\n\n if (subscriber !== null && root.memoizedInteractions.size > 0) {\n var threadID = computeThreadID(root, committedExpirationTime);\n subscriber.onWorkStopped(root.memoizedInteractions, threadID);\n }\n } catch (error) {\n // If the subscriber throws, rethrow it in a separate task\n scheduleCallback(ImmediatePriority, function () {\n throw error;\n });\n } finally {\n // Clear completed interactions from the pending Map.\n // Unless the render was suspended or cascading work was scheduled,\n // In which case– leave pending interactions until the subsequent render.\n var pendingInteractionMap = root.pendingInteractionMap;\n pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n // Only decrement the pending interaction count if we're done.\n // If there's still work at the current priority,\n // That indicates that we are waiting for suspense data.\n if (scheduledExpirationTime > earliestRemainingTimeAfterCommit) {\n pendingInteractionMap.delete(scheduledExpirationTime);\n scheduledInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber !== null && interaction.__count === 0) {\n try {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n } catch (error) {\n // If the subscriber throws, rethrow it in a separate task\n scheduleCallback(ImmediatePriority, function () {\n throw error;\n });\n }\n }\n });\n }\n });\n }\n}\n\nvar onScheduleFiberRoot = null;\nvar onCommitFiberRoot = null;\nvar onCommitFiberUnmount = null;\nvar hasLoggedError = false;\nvar isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';\nfunction injectInternals(internals) {\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // No DevTools\n return false;\n }\n\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n if (hook.isDisabled) {\n // This isn't a real property on the hook, but it can be set to opt out\n // of DevTools integration and associated warnings and logs.\n // https://github.com/facebook/react/issues/3877\n return true;\n }\n\n if (!hook.supportsFiber) {\n {\n error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://fb.me/react-devtools');\n } // DevTools exists, even though it doesn't support Fiber.\n\n\n return true;\n }\n\n try {\n var rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.\n\n if (true) {\n // Only used by Fast Refresh\n if (typeof hook.onScheduleFiberRoot === 'function') {\n onScheduleFiberRoot = function (root, children) {\n try {\n hook.onScheduleFiberRoot(rendererID, root, children);\n } catch (err) {\n if (true && !hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n };\n }\n }\n\n onCommitFiberRoot = function (root, expirationTime) {\n try {\n var didError = (root.current.effectTag & DidCapture) === DidCapture;\n\n if (enableProfilerTimer) {\n var currentTime = getCurrentTime();\n var priorityLevel = inferPriorityFromExpirationTime(currentTime, expirationTime);\n hook.onCommitFiberRoot(rendererID, root, priorityLevel, didError);\n } else {\n hook.onCommitFiberRoot(rendererID, root, undefined, didError);\n }\n } catch (err) {\n if (true) {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n };\n\n onCommitFiberUnmount = function (fiber) {\n try {\n hook.onCommitFiberUnmount(rendererID, fiber);\n } catch (err) {\n if (true) {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n };\n } catch (err) {\n // Catch all errors because it is unsafe to throw during initialization.\n {\n error('React instrumentation encountered an error: %s.', err);\n }\n } // DevTools exists\n\n\n return true;\n}\nfunction onScheduleRoot(root, children) {\n if (typeof onScheduleFiberRoot === 'function') {\n onScheduleFiberRoot(root, children);\n }\n}\nfunction onCommitRoot(root, expirationTime) {\n if (typeof onCommitFiberRoot === 'function') {\n onCommitFiberRoot(root, expirationTime);\n }\n}\nfunction onCommitUnmount(fiber) {\n if (typeof onCommitFiberUnmount === 'function') {\n onCommitFiberUnmount(fiber);\n }\n}\n\nvar hasBadMapPolyfill;\n\n{\n hasBadMapPolyfill = false;\n\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n var testMap = new Map([[nonExtensibleObject, null]]);\n var testSet = new Set([nonExtensibleObject]); // This is necessary for Rollup to not consider these unused.\n // https://github.com/rollup/rollup/issues/1771\n // TODO: we can remove these if Rollup fixes the bug.\n\n testMap.set(0, 0);\n testSet.add(0);\n } catch (e) {\n // TODO: Consider warning about bad polyfills\n hasBadMapPolyfill = true;\n }\n}\n\nvar debugCounter = 1;\n\nfunction FiberNode(tag, pendingProps, key, mode) {\n // Instance\n this.tag = tag;\n this.key = key;\n this.elementType = null;\n this.type = null;\n this.stateNode = null; // Fiber\n\n this.return = null;\n this.child = null;\n this.sibling = null;\n this.index = 0;\n this.ref = null;\n this.pendingProps = pendingProps;\n this.memoizedProps = null;\n this.updateQueue = null;\n this.memoizedState = null;\n this.dependencies = null;\n this.mode = mode; // Effects\n\n this.effectTag = NoEffect;\n this.nextEffect = null;\n this.firstEffect = null;\n this.lastEffect = null;\n this.expirationTime = NoWork;\n this.childExpirationTime = NoWork;\n this.alternate = null;\n\n {\n // Note: The following is done to avoid a v8 performance cliff.\n //\n // Initializing the fields below to smis and later updating them with\n // double values will cause Fibers to end up having separate shapes.\n // This behavior/bug has something to do with Object.preventExtension().\n // Fortunately this only impacts DEV builds.\n // Unfortunately it makes React unusably slow for some applications.\n // To work around this, initialize the fields below with doubles.\n //\n // Learn more about this here:\n // https://github.com/facebook/react/issues/14365\n // https://bugs.chromium.org/p/v8/issues/detail?id=8538\n this.actualDuration = Number.NaN;\n this.actualStartTime = Number.NaN;\n this.selfBaseDuration = Number.NaN;\n this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.\n // This won't trigger the performance cliff mentioned above,\n // and it simplifies other profiler code (including DevTools).\n\n this.actualDuration = 0;\n this.actualStartTime = -1;\n this.selfBaseDuration = 0;\n this.treeBaseDuration = 0;\n } // This is normally DEV-only except www when it adds listeners.\n // TODO: remove the User Timing integration in favor of Root Events.\n\n\n {\n this._debugID = debugCounter++;\n this._debugIsCurrentlyTiming = false;\n }\n\n {\n this._debugSource = null;\n this._debugOwner = null;\n this._debugNeedsRemount = false;\n this._debugHookTypes = null;\n\n if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {\n Object.preventExtensions(this);\n }\n }\n} // This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n// more difficult to predict when they get optimized and they are almost\n// never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n// always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n// to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n// is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n// compatible.\n\n\nvar createFiber = function (tag, pendingProps, key, mode) {\n // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors\n return new FiberNode(tag, pendingProps, key, mode);\n};\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction isSimpleFunctionComponent(type) {\n return typeof type === 'function' && !shouldConstruct(type) && type.defaultProps === undefined;\n}\nfunction resolveLazyComponentTag(Component) {\n if (typeof Component === 'function') {\n return shouldConstruct(Component) ? ClassComponent : FunctionComponent;\n } else if (Component !== undefined && Component !== null) {\n var $$typeof = Component.$$typeof;\n\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n return ForwardRef;\n }\n\n if ($$typeof === REACT_MEMO_TYPE) {\n return MemoComponent;\n }\n }\n\n return IndeterminateComponent;\n} // This is used to create an alternate fiber to do work on.\n\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n\n if (workInProgress === null) {\n // We use a double buffering pooling technique because we know that we'll\n // only ever need at most two versions of a tree. We pool the \"other\" unused\n // node that we're free to reuse. This is lazily created to avoid allocating\n // extra objects for things that are never updated. It also allow us to\n // reclaim the extra memory if needed.\n workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);\n workInProgress.elementType = current.elementType;\n workInProgress.type = current.type;\n workInProgress.stateNode = current.stateNode;\n\n {\n // DEV-only fields\n {\n workInProgress._debugID = current._debugID;\n }\n\n workInProgress._debugSource = current._debugSource;\n workInProgress._debugOwner = current._debugOwner;\n workInProgress._debugHookTypes = current._debugHookTypes;\n }\n\n workInProgress.alternate = current;\n current.alternate = workInProgress;\n } else {\n workInProgress.pendingProps = pendingProps; // We already have an alternate.\n // Reset the effect tag.\n\n workInProgress.effectTag = NoEffect; // The effect list is no longer valid.\n\n workInProgress.nextEffect = null;\n workInProgress.firstEffect = null;\n workInProgress.lastEffect = null;\n\n {\n // We intentionally reset, rather than copy, actualDuration & actualStartTime.\n // This prevents time from endlessly accumulating in new commits.\n // This has the downside of resetting values for different priority renders,\n // But works for yielding (the common case) and should support resuming.\n workInProgress.actualDuration = 0;\n workInProgress.actualStartTime = -1;\n }\n }\n\n workInProgress.childExpirationTime = current.childExpirationTime;\n workInProgress.expirationTime = current.expirationTime;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n // it cannot be shared with the current fiber.\n\n var currentDependencies = current.dependencies;\n workInProgress.dependencies = currentDependencies === null ? null : {\n expirationTime: currentDependencies.expirationTime,\n firstContext: currentDependencies.firstContext,\n responders: currentDependencies.responders\n }; // These will be overridden during the parent's reconciliation\n\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n\n {\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n }\n\n {\n workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n case FunctionComponent:\n case SimpleMemoComponent:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n\n case ClassComponent:\n workInProgress.type = resolveClassForHotReloading(current.type);\n break;\n\n case ForwardRef:\n workInProgress.type = resolveForwardRefForHotReloading(current.type);\n break;\n }\n }\n\n return workInProgress;\n} // Used to reuse a Fiber for a second pass.\n\nfunction resetWorkInProgress(workInProgress, renderExpirationTime) {\n // This resets the Fiber to what createFiber or createWorkInProgress would\n // have set the values to before during the first pass. Ideally this wouldn't\n // be necessary but unfortunately many code paths reads from the workInProgress\n // when they should be reading from current and writing to workInProgress.\n // We assume pendingProps, index, key, ref, return are still untouched to\n // avoid doing another reconciliation.\n // Reset the effect tag but keep any Placement tags, since that's something\n // that child fiber is setting, not the reconciliation.\n workInProgress.effectTag &= Placement; // The effect list is no longer valid.\n\n workInProgress.nextEffect = null;\n workInProgress.firstEffect = null;\n workInProgress.lastEffect = null;\n var current = workInProgress.alternate;\n\n if (current === null) {\n // Reset to createFiber's initial values.\n workInProgress.childExpirationTime = NoWork;\n workInProgress.expirationTime = renderExpirationTime;\n workInProgress.child = null;\n workInProgress.memoizedProps = null;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.dependencies = null;\n\n {\n // Note: We don't reset the actualTime counts. It's useful to accumulate\n // actual time across multiple render passes.\n workInProgress.selfBaseDuration = 0;\n workInProgress.treeBaseDuration = 0;\n }\n } else {\n // Reset to the cloned values that createWorkInProgress would've.\n workInProgress.childExpirationTime = current.childExpirationTime;\n workInProgress.expirationTime = current.expirationTime;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n // it cannot be shared with the current fiber.\n\n var currentDependencies = current.dependencies;\n workInProgress.dependencies = currentDependencies === null ? null : {\n expirationTime: currentDependencies.expirationTime,\n firstContext: currentDependencies.firstContext,\n responders: currentDependencies.responders\n };\n\n {\n // Note: We don't reset the actualTime counts. It's useful to accumulate\n // actual time across multiple render passes.\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n }\n }\n\n return workInProgress;\n}\nfunction createHostRootFiber(tag) {\n var mode;\n\n if (tag === ConcurrentRoot) {\n mode = ConcurrentMode | BlockingMode | StrictMode;\n } else if (tag === BlockingRoot) {\n mode = BlockingMode | StrictMode;\n } else {\n mode = NoMode;\n }\n\n if ( isDevToolsPresent) {\n // Always collect profile timings when DevTools are present.\n // This enables DevTools to start capturing timing at any point–\n // Without some nodes in the tree having empty base times.\n mode |= ProfileMode;\n }\n\n return createFiber(HostRoot, null, null, mode);\n}\nfunction createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {\n var fiber;\n var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.\n\n var resolvedType = type;\n\n if (typeof type === 'function') {\n if (shouldConstruct(type)) {\n fiberTag = ClassComponent;\n\n {\n resolvedType = resolveClassForHotReloading(resolvedType);\n }\n } else {\n {\n resolvedType = resolveFunctionForHotReloading(resolvedType);\n }\n }\n } else if (typeof type === 'string') {\n fiberTag = HostComponent;\n } else {\n getTag: switch (type) {\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, expirationTime, key);\n\n case REACT_CONCURRENT_MODE_TYPE:\n fiberTag = Mode;\n mode |= ConcurrentMode | BlockingMode | StrictMode;\n break;\n\n case REACT_STRICT_MODE_TYPE:\n fiberTag = Mode;\n mode |= StrictMode;\n break;\n\n case REACT_PROFILER_TYPE:\n return createFiberFromProfiler(pendingProps, mode, expirationTime, key);\n\n case REACT_SUSPENSE_TYPE:\n return createFiberFromSuspense(pendingProps, mode, expirationTime, key);\n\n case REACT_SUSPENSE_LIST_TYPE:\n return createFiberFromSuspenseList(pendingProps, mode, expirationTime, key);\n\n default:\n {\n if (typeof type === 'object' && type !== null) {\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n fiberTag = ContextProvider;\n break getTag;\n\n case REACT_CONTEXT_TYPE:\n // This is a consumer\n fiberTag = ContextConsumer;\n break getTag;\n\n case REACT_FORWARD_REF_TYPE:\n fiberTag = ForwardRef;\n\n {\n resolvedType = resolveForwardRefForHotReloading(resolvedType);\n }\n\n break getTag;\n\n case REACT_MEMO_TYPE:\n fiberTag = MemoComponent;\n break getTag;\n\n case REACT_LAZY_TYPE:\n fiberTag = LazyComponent;\n resolvedType = null;\n break getTag;\n\n case REACT_BLOCK_TYPE:\n fiberTag = Block;\n break getTag;\n\n }\n }\n\n var info = '';\n\n {\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and \" + 'named imports.';\n }\n\n var ownerName = owner ? getComponentName(owner.type) : null;\n\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n }\n\n {\n {\n throw Error( \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" + (type == null ? type : typeof type) + \".\" + info );\n }\n }\n }\n }\n }\n\n fiber = createFiber(fiberTag, pendingProps, key, mode);\n fiber.elementType = type;\n fiber.type = resolvedType;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\nfunction createFiberFromElement(element, mode, expirationTime) {\n var owner = null;\n\n {\n owner = element._owner;\n }\n\n var type = element.type;\n var key = element.key;\n var pendingProps = element.props;\n var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, expirationTime);\n\n {\n fiber._debugSource = element._source;\n fiber._debugOwner = element._owner;\n }\n\n return fiber;\n}\nfunction createFiberFromFragment(elements, mode, expirationTime, key) {\n var fiber = createFiber(Fragment, elements, key, mode);\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromProfiler(pendingProps, mode, expirationTime, key) {\n {\n if (typeof pendingProps.id !== 'string' || typeof pendingProps.onRender !== 'function') {\n error('Profiler must specify an \"id\" string and \"onRender\" function as props');\n }\n }\n\n var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode); // TODO: The Profiler fiber shouldn't have a type. It has a tag.\n\n fiber.elementType = REACT_PROFILER_TYPE;\n fiber.type = REACT_PROFILER_TYPE;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromSuspense(pendingProps, mode, expirationTime, key) {\n var fiber = createFiber(SuspenseComponent, pendingProps, key, mode); // TODO: The SuspenseComponent fiber shouldn't have a type. It has a tag.\n // This needs to be fixed in getComponentName so that it relies on the tag\n // instead.\n\n fiber.type = REACT_SUSPENSE_TYPE;\n fiber.elementType = REACT_SUSPENSE_TYPE;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\nfunction createFiberFromSuspenseList(pendingProps, mode, expirationTime, key) {\n var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);\n\n {\n // TODO: The SuspenseListComponent fiber shouldn't have a type. It has a tag.\n // This needs to be fixed in getComponentName so that it relies on the tag\n // instead.\n fiber.type = REACT_SUSPENSE_LIST_TYPE;\n }\n\n fiber.elementType = REACT_SUSPENSE_LIST_TYPE;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\nfunction createFiberFromText(content, mode, expirationTime) {\n var fiber = createFiber(HostText, content, null, mode);\n fiber.expirationTime = expirationTime;\n return fiber;\n}\nfunction createFiberFromHostInstanceForDeletion() {\n var fiber = createFiber(HostComponent, null, null, NoMode); // TODO: These should not need a type.\n\n fiber.elementType = 'DELETED';\n fiber.type = 'DELETED';\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, expirationTime) {\n var pendingProps = portal.children !== null ? portal.children : [];\n var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);\n fiber.expirationTime = expirationTime;\n fiber.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n // Used by persistent updates\n implementation: portal.implementation\n };\n return fiber;\n} // Used for stashing WIP properties to replay failed work in DEV.\n\nfunction assignFiberPropertiesInDEV(target, source) {\n if (target === null) {\n // This Fiber's initial properties will always be overwritten.\n // We only use a Fiber to ensure the same hidden class so DEV isn't slow.\n target = createFiber(IndeterminateComponent, null, null, NoMode);\n } // This is intentionally written as a list of all properties.\n // We tried to use Object.assign() instead but this is called in\n // the hottest path, and Object.assign() was too slow:\n // https://github.com/facebook/react/issues/12502\n // This code is DEV-only so size is not a concern.\n\n\n target.tag = source.tag;\n target.key = source.key;\n target.elementType = source.elementType;\n target.type = source.type;\n target.stateNode = source.stateNode;\n target.return = source.return;\n target.child = source.child;\n target.sibling = source.sibling;\n target.index = source.index;\n target.ref = source.ref;\n target.pendingProps = source.pendingProps;\n target.memoizedProps = source.memoizedProps;\n target.updateQueue = source.updateQueue;\n target.memoizedState = source.memoizedState;\n target.dependencies = source.dependencies;\n target.mode = source.mode;\n target.effectTag = source.effectTag;\n target.nextEffect = source.nextEffect;\n target.firstEffect = source.firstEffect;\n target.lastEffect = source.lastEffect;\n target.expirationTime = source.expirationTime;\n target.childExpirationTime = source.childExpirationTime;\n target.alternate = source.alternate;\n\n {\n target.actualDuration = source.actualDuration;\n target.actualStartTime = source.actualStartTime;\n target.selfBaseDuration = source.selfBaseDuration;\n target.treeBaseDuration = source.treeBaseDuration;\n }\n\n {\n target._debugID = source._debugID;\n }\n\n target._debugSource = source._debugSource;\n target._debugOwner = source._debugOwner;\n target._debugIsCurrentlyTiming = source._debugIsCurrentlyTiming;\n target._debugNeedsRemount = source._debugNeedsRemount;\n target._debugHookTypes = source._debugHookTypes;\n return target;\n}\n\nfunction FiberRootNode(containerInfo, tag, hydrate) {\n this.tag = tag;\n this.current = null;\n this.containerInfo = containerInfo;\n this.pendingChildren = null;\n this.pingCache = null;\n this.finishedExpirationTime = NoWork;\n this.finishedWork = null;\n this.timeoutHandle = noTimeout;\n this.context = null;\n this.pendingContext = null;\n this.hydrate = hydrate;\n this.callbackNode = null;\n this.callbackPriority = NoPriority;\n this.firstPendingTime = NoWork;\n this.firstSuspendedTime = NoWork;\n this.lastSuspendedTime = NoWork;\n this.nextKnownPendingLevel = NoWork;\n this.lastPingedTime = NoWork;\n this.lastExpiredTime = NoWork;\n\n {\n this.interactionThreadID = tracing.unstable_getThreadID();\n this.memoizedInteractions = new Set();\n this.pendingInteractionMap = new Map();\n }\n}\n\nfunction createFiberRoot(containerInfo, tag, hydrate, hydrationCallbacks) {\n var root = new FiberRootNode(containerInfo, tag, hydrate);\n // stateNode is any.\n\n\n var uninitializedFiber = createHostRootFiber(tag);\n root.current = uninitializedFiber;\n uninitializedFiber.stateNode = root;\n initializeUpdateQueue(uninitializedFiber);\n return root;\n}\nfunction isRootSuspendedAtTime(root, expirationTime) {\n var firstSuspendedTime = root.firstSuspendedTime;\n var lastSuspendedTime = root.lastSuspendedTime;\n return firstSuspendedTime !== NoWork && firstSuspendedTime >= expirationTime && lastSuspendedTime <= expirationTime;\n}\nfunction markRootSuspendedAtTime(root, expirationTime) {\n var firstSuspendedTime = root.firstSuspendedTime;\n var lastSuspendedTime = root.lastSuspendedTime;\n\n if (firstSuspendedTime < expirationTime) {\n root.firstSuspendedTime = expirationTime;\n }\n\n if (lastSuspendedTime > expirationTime || firstSuspendedTime === NoWork) {\n root.lastSuspendedTime = expirationTime;\n }\n\n if (expirationTime <= root.lastPingedTime) {\n root.lastPingedTime = NoWork;\n }\n\n if (expirationTime <= root.lastExpiredTime) {\n root.lastExpiredTime = NoWork;\n }\n}\nfunction markRootUpdatedAtTime(root, expirationTime) {\n // Update the range of pending times\n var firstPendingTime = root.firstPendingTime;\n\n if (expirationTime > firstPendingTime) {\n root.firstPendingTime = expirationTime;\n } // Update the range of suspended times. Treat everything lower priority or\n // equal to this update as unsuspended.\n\n\n var firstSuspendedTime = root.firstSuspendedTime;\n\n if (firstSuspendedTime !== NoWork) {\n if (expirationTime >= firstSuspendedTime) {\n // The entire suspended range is now unsuspended.\n root.firstSuspendedTime = root.lastSuspendedTime = root.nextKnownPendingLevel = NoWork;\n } else if (expirationTime >= root.lastSuspendedTime) {\n root.lastSuspendedTime = expirationTime + 1;\n } // This is a pending level. Check if it's higher priority than the next\n // known pending level.\n\n\n if (expirationTime > root.nextKnownPendingLevel) {\n root.nextKnownPendingLevel = expirationTime;\n }\n }\n}\nfunction markRootFinishedAtTime(root, finishedExpirationTime, remainingExpirationTime) {\n // Update the range of pending times\n root.firstPendingTime = remainingExpirationTime; // Update the range of suspended times. Treat everything higher priority or\n // equal to this update as unsuspended.\n\n if (finishedExpirationTime <= root.lastSuspendedTime) {\n // The entire suspended range is now unsuspended.\n root.firstSuspendedTime = root.lastSuspendedTime = root.nextKnownPendingLevel = NoWork;\n } else if (finishedExpirationTime <= root.firstSuspendedTime) {\n // Part of the suspended range is now unsuspended. Narrow the range to\n // include everything between the unsuspended time (non-inclusive) and the\n // last suspended time.\n root.firstSuspendedTime = finishedExpirationTime - 1;\n }\n\n if (finishedExpirationTime <= root.lastPingedTime) {\n // Clear the pinged time\n root.lastPingedTime = NoWork;\n }\n\n if (finishedExpirationTime <= root.lastExpiredTime) {\n // Clear the expired time\n root.lastExpiredTime = NoWork;\n }\n}\nfunction markRootExpiredAtTime(root, expirationTime) {\n var lastExpiredTime = root.lastExpiredTime;\n\n if (lastExpiredTime === NoWork || lastExpiredTime > expirationTime) {\n root.lastExpiredTime = expirationTime;\n }\n}\n\nvar didWarnAboutNestedUpdates;\nvar didWarnAboutFindNodeInStrictMode;\n\n{\n didWarnAboutNestedUpdates = false;\n didWarnAboutFindNodeInStrictMode = {};\n}\n\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) {\n return emptyContextObject;\n }\n\n var fiber = get(parentComponent);\n var parentContext = findCurrentUnmaskedContext(fiber);\n\n if (fiber.tag === ClassComponent) {\n var Component = fiber.type;\n\n if (isContextProvider(Component)) {\n return processChildContext(fiber, Component, parentContext);\n }\n }\n\n return parentContext;\n}\n\nfunction findHostInstanceWithWarning(component, methodName) {\n {\n var fiber = get(component);\n\n if (fiber === undefined) {\n if (typeof component.render === 'function') {\n {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n } else {\n {\n {\n throw Error( \"Argument appears to not be a ReactComponent. Keys: \" + Object.keys(component) );\n }\n }\n }\n }\n\n var hostFiber = findCurrentHostFiber(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n if (hostFiber.mode & StrictMode) {\n var componentName = getComponentName(fiber.type) || 'Component';\n\n if (!didWarnAboutFindNodeInStrictMode[componentName]) {\n didWarnAboutFindNodeInStrictMode[componentName] = true;\n\n if (fiber.mode & StrictMode) {\n error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-find-node%s', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n } else {\n error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-find-node%s', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n }\n }\n }\n\n return hostFiber.stateNode;\n }\n}\n\nfunction createContainer(containerInfo, tag, hydrate, hydrationCallbacks) {\n return createFiberRoot(containerInfo, tag, hydrate);\n}\nfunction updateContainer(element, container, parentComponent, callback) {\n {\n onScheduleRoot(container, element);\n }\n\n var current$1 = container.current;\n var currentTime = requestCurrentTimeForUpdate();\n\n {\n // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n if ('undefined' !== typeof jest) {\n warnIfUnmockedScheduler(current$1);\n warnIfNotScopedWithMatchingAct(current$1);\n }\n }\n\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, current$1, suspenseConfig);\n var context = getContextForSubtree(parentComponent);\n\n if (container.context === null) {\n container.context = context;\n } else {\n container.pendingContext = context;\n }\n\n {\n if (isRendering && current !== null && !didWarnAboutNestedUpdates) {\n didWarnAboutNestedUpdates = true;\n\n error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\\n\\n' + 'Check the render method of %s.', getComponentName(current.type) || 'Unknown');\n }\n }\n\n var update = createUpdate(expirationTime, suspenseConfig); // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n update.payload = {\n element: element\n };\n callback = callback === undefined ? null : callback;\n\n if (callback !== null) {\n {\n if (typeof callback !== 'function') {\n error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);\n }\n }\n\n update.callback = callback;\n }\n\n enqueueUpdate(current$1, update);\n scheduleWork(current$1, expirationTime);\n return expirationTime;\n}\nfunction getPublicRootInstance(container) {\n var containerFiber = container.current;\n\n if (!containerFiber.child) {\n return null;\n }\n\n switch (containerFiber.child.tag) {\n case HostComponent:\n return getPublicInstance(containerFiber.child.stateNode);\n\n default:\n return containerFiber.child.stateNode;\n }\n}\n\nfunction markRetryTimeImpl(fiber, retryTime) {\n var suspenseState = fiber.memoizedState;\n\n if (suspenseState !== null && suspenseState.dehydrated !== null) {\n if (suspenseState.retryTime < retryTime) {\n suspenseState.retryTime = retryTime;\n }\n }\n} // Increases the priority of thennables when they resolve within this boundary.\n\n\nfunction markRetryTimeIfNotHydrated(fiber, retryTime) {\n markRetryTimeImpl(fiber, retryTime);\n var alternate = fiber.alternate;\n\n if (alternate) {\n markRetryTimeImpl(alternate, retryTime);\n }\n}\n\nfunction attemptUserBlockingHydration$1(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority and they should not suspend on I/O,\n // since you have to wrap anything that might suspend in\n // Suspense.\n return;\n }\n\n var expTime = computeInteractiveExpiration(requestCurrentTimeForUpdate());\n scheduleWork(fiber, expTime);\n markRetryTimeIfNotHydrated(fiber, expTime);\n}\nfunction attemptContinuousHydration$1(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority and they should not suspend on I/O,\n // since you have to wrap anything that might suspend in\n // Suspense.\n return;\n }\n\n scheduleWork(fiber, ContinuousHydration);\n markRetryTimeIfNotHydrated(fiber, ContinuousHydration);\n}\nfunction attemptHydrationAtCurrentPriority$1(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority other than synchronously flush it.\n return;\n }\n\n var currentTime = requestCurrentTimeForUpdate();\n var expTime = computeExpirationForFiber(currentTime, fiber, null);\n scheduleWork(fiber, expTime);\n markRetryTimeIfNotHydrated(fiber, expTime);\n}\nfunction findHostInstanceWithNoPortals(fiber) {\n var hostFiber = findCurrentHostFiberWithNoPortals(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n if (hostFiber.tag === FundamentalComponent) {\n return hostFiber.stateNode.instance;\n }\n\n return hostFiber.stateNode;\n}\n\nvar shouldSuspendImpl = function (fiber) {\n return false;\n};\n\nfunction shouldSuspend(fiber) {\n return shouldSuspendImpl(fiber);\n}\nvar overrideHookState = null;\nvar overrideProps = null;\nvar scheduleUpdate = null;\nvar setSuspenseHandler = null;\n\n{\n var copyWithSetImpl = function (obj, path, idx, value) {\n if (idx >= path.length) {\n return value;\n }\n\n var key = path[idx];\n var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj); // $FlowFixMe number or string is fine here\n\n updated[key] = copyWithSetImpl(obj[key], path, idx + 1, value);\n return updated;\n };\n\n var copyWithSet = function (obj, path, value) {\n return copyWithSetImpl(obj, path, 0, value);\n }; // Support DevTools editable values for useState and useReducer.\n\n\n overrideHookState = function (fiber, id, path, value) {\n // For now, the \"id\" of stateful hooks is just the stateful hook index.\n // This may change in the future with e.g. nested hooks.\n var currentHook = fiber.memoizedState;\n\n while (currentHook !== null && id > 0) {\n currentHook = currentHook.next;\n id--;\n }\n\n if (currentHook !== null) {\n var newState = copyWithSet(currentHook.memoizedState, path, value);\n currentHook.memoizedState = newState;\n currentHook.baseState = newState; // We aren't actually adding an update to the queue,\n // because there is no update we can add for useReducer hooks that won't trigger an error.\n // (There's no appropriate action type for DevTools overrides.)\n // As a result though, React will see the scheduled update as a noop and bailout.\n // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n fiber.memoizedProps = _assign({}, fiber.memoizedProps);\n scheduleWork(fiber, Sync);\n }\n }; // Support DevTools props for function components, forwardRef, memo, host components, etc.\n\n\n overrideProps = function (fiber, path, value) {\n fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);\n\n if (fiber.alternate) {\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n\n scheduleWork(fiber, Sync);\n };\n\n scheduleUpdate = function (fiber) {\n scheduleWork(fiber, Sync);\n };\n\n setSuspenseHandler = function (newShouldSuspendImpl) {\n shouldSuspendImpl = newShouldSuspendImpl;\n };\n}\n\nfunction injectIntoDevTools(devToolsConfig) {\n var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;\n var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\n return injectInternals(_assign({}, devToolsConfig, {\n overrideHookState: overrideHookState,\n overrideProps: overrideProps,\n setSuspenseHandler: setSuspenseHandler,\n scheduleUpdate: scheduleUpdate,\n currentDispatcherRef: ReactCurrentDispatcher,\n findHostInstanceByFiber: function (fiber) {\n var hostFiber = findCurrentHostFiber(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n return hostFiber.stateNode;\n },\n findFiberByHostInstance: function (instance) {\n if (!findFiberByHostInstance) {\n // Might not be implemented by the renderer.\n return null;\n }\n\n return findFiberByHostInstance(instance);\n },\n // React Refresh\n findHostInstancesForRefresh: findHostInstancesForRefresh ,\n scheduleRefresh: scheduleRefresh ,\n scheduleRoot: scheduleRoot ,\n setRefreshHandler: setRefreshHandler ,\n // Enables DevTools to append owner stacks to error messages in DEV mode.\n getCurrentFiber: function () {\n return current;\n } \n }));\n}\nvar IsSomeRendererActing$1 = ReactSharedInternals.IsSomeRendererActing;\n\nfunction ReactDOMRoot(container, options) {\n this._internalRoot = createRootImpl(container, ConcurrentRoot, options);\n}\n\nfunction ReactDOMBlockingRoot(container, tag, options) {\n this._internalRoot = createRootImpl(container, tag, options);\n}\n\nReactDOMRoot.prototype.render = ReactDOMBlockingRoot.prototype.render = function (children) {\n var root = this._internalRoot;\n\n {\n if (typeof arguments[1] === 'function') {\n error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n }\n\n var container = root.containerInfo;\n\n if (container.nodeType !== COMMENT_NODE) {\n var hostInstance = findHostInstanceWithNoPortals(root.current);\n\n if (hostInstance) {\n if (hostInstance.parentNode !== container) {\n error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + \"root.unmount() to empty a root's container.\");\n }\n }\n }\n }\n\n updateContainer(children, root, null, null);\n};\n\nReactDOMRoot.prototype.unmount = ReactDOMBlockingRoot.prototype.unmount = function () {\n {\n if (typeof arguments[0] === 'function') {\n error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n }\n }\n\n var root = this._internalRoot;\n var container = root.containerInfo;\n updateContainer(null, root, null, function () {\n unmarkContainerAsRoot(container);\n });\n};\n\nfunction createRootImpl(container, tag, options) {\n // Tag is either LegacyRoot or Concurrent Root\n var hydrate = options != null && options.hydrate === true;\n var hydrationCallbacks = options != null && options.hydrationOptions || null;\n var root = createContainer(container, tag, hydrate);\n markContainerAsRoot(root.current, container);\n\n if (hydrate && tag !== LegacyRoot) {\n var doc = container.nodeType === DOCUMENT_NODE ? container : container.ownerDocument;\n eagerlyTrapReplayableEvents(container, doc);\n }\n\n return root;\n}\nfunction createLegacyRoot(container, options) {\n return new ReactDOMBlockingRoot(container, LegacyRoot, options);\n}\nfunction isValidContainer(node) {\n return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));\n}\n\nvar ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;\nvar topLevelUpdateWarnings;\nvar warnedAboutHydrateAPI = false;\n\n{\n topLevelUpdateWarnings = function (container) {\n if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {\n var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer._internalRoot.current);\n\n if (hostInstance) {\n if (hostInstance.parentNode !== container) {\n error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');\n }\n }\n }\n\n var isRootRenderedBySomeReact = !!container._reactRootContainer;\n var rootEl = getReactRootElementInContainer(container);\n var hasNonRootReactChild = !!(rootEl && getInstanceFromNode$1(rootEl));\n\n if (hasNonRootReactChild && !isRootRenderedBySomeReact) {\n error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');\n }\n\n if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {\n error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.');\n }\n };\n}\n\nfunction getReactRootElementInContainer(container) {\n if (!container) {\n return null;\n }\n\n if (container.nodeType === DOCUMENT_NODE) {\n return container.documentElement;\n } else {\n return container.firstChild;\n }\n}\n\nfunction shouldHydrateDueToLegacyHeuristic(container) {\n var rootElement = getReactRootElementInContainer(container);\n return !!(rootElement && rootElement.nodeType === ELEMENT_NODE && rootElement.hasAttribute(ROOT_ATTRIBUTE_NAME));\n}\n\nfunction legacyCreateRootFromDOMContainer(container, forceHydrate) {\n var shouldHydrate = forceHydrate || shouldHydrateDueToLegacyHeuristic(container); // First clear any existing content.\n\n if (!shouldHydrate) {\n var warned = false;\n var rootSibling;\n\n while (rootSibling = container.lastChild) {\n {\n if (!warned && rootSibling.nodeType === ELEMENT_NODE && rootSibling.hasAttribute(ROOT_ATTRIBUTE_NAME)) {\n warned = true;\n\n error('render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.');\n }\n }\n\n container.removeChild(rootSibling);\n }\n }\n\n {\n if (shouldHydrate && !forceHydrate && !warnedAboutHydrateAPI) {\n warnedAboutHydrateAPI = true;\n\n warn('render(): Calling ReactDOM.render() to hydrate server-rendered markup ' + 'will stop working in React v17. Replace the ReactDOM.render() call ' + 'with ReactDOM.hydrate() if you want React to attach to the server HTML.');\n }\n }\n\n return createLegacyRoot(container, shouldHydrate ? {\n hydrate: true\n } : undefined);\n}\n\nfunction warnOnInvalidCallback$1(callback, callerName) {\n {\n if (callback !== null && typeof callback !== 'function') {\n error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n }\n }\n}\n\nfunction legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {\n {\n topLevelUpdateWarnings(container);\n warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render');\n } // TODO: Without `any` type, Flow says \"Property cannot be accessed on any\n // member of intersection type.\" Whyyyyyy.\n\n\n var root = container._reactRootContainer;\n var fiberRoot;\n\n if (!root) {\n // Initial mount\n root = container._reactRootContainer = legacyCreateRootFromDOMContainer(container, forceHydrate);\n fiberRoot = root._internalRoot;\n\n if (typeof callback === 'function') {\n var originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(fiberRoot);\n originalCallback.call(instance);\n };\n } // Initial mount should not be batched.\n\n\n unbatchedUpdates(function () {\n updateContainer(children, fiberRoot, parentComponent, callback);\n });\n } else {\n fiberRoot = root._internalRoot;\n\n if (typeof callback === 'function') {\n var _originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(fiberRoot);\n\n _originalCallback.call(instance);\n };\n } // Update\n\n\n updateContainer(children, fiberRoot, parentComponent, callback);\n }\n\n return getPublicRootInstance(fiberRoot);\n}\n\nfunction findDOMNode(componentOrElement) {\n {\n var owner = ReactCurrentOwner$3.current;\n\n if (owner !== null && owner.stateNode !== null) {\n var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;\n\n if (!warnedAboutRefsInRender) {\n error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(owner.type) || 'A component');\n }\n\n owner.stateNode._warnedAboutRefsInRender = true;\n }\n }\n\n if (componentOrElement == null) {\n return null;\n }\n\n if (componentOrElement.nodeType === ELEMENT_NODE) {\n return componentOrElement;\n }\n\n {\n return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');\n }\n}\nfunction hydrate(element, container, callback) {\n if (!isValidContainer(container)) {\n {\n throw Error( \"Target container is not a DOM element.\" );\n }\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call createRoot(container, {hydrate: true}).render(element)?');\n }\n } // TODO: throw or warn if we couldn't hydrate?\n\n\n return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);\n}\nfunction render(element, container, callback) {\n if (!isValidContainer(container)) {\n {\n throw Error( \"Target container is not a DOM element.\" );\n }\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');\n }\n }\n\n return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);\n}\nfunction unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n if (!isValidContainer(containerNode)) {\n {\n throw Error( \"Target container is not a DOM element.\" );\n }\n }\n\n if (!(parentComponent != null && has(parentComponent))) {\n {\n throw Error( \"parentComponent must be a valid React Component\" );\n }\n }\n\n return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);\n}\nfunction unmountComponentAtNode(container) {\n if (!isValidContainer(container)) {\n {\n throw Error( \"unmountComponentAtNode(...): Target container is not a DOM element.\" );\n }\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. Did you mean to call root.unmount()?');\n }\n }\n\n if (container._reactRootContainer) {\n {\n var rootEl = getReactRootElementInContainer(container);\n var renderedByDifferentReact = rootEl && !getInstanceFromNode$1(rootEl);\n\n if (renderedByDifferentReact) {\n error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by another copy of React.');\n }\n } // Unmount should not be batched.\n\n\n unbatchedUpdates(function () {\n legacyRenderSubtreeIntoContainer(null, null, container, false, function () {\n // $FlowFixMe This should probably use `delete container._reactRootContainer`\n container._reactRootContainer = null;\n unmarkContainerAsRoot(container);\n });\n }); // If you call unmountComponentAtNode twice in quick succession, you'll\n // get `true` twice. That's probably fine?\n\n return true;\n } else {\n {\n var _rootEl = getReactRootElementInContainer(container);\n\n var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode$1(_rootEl)); // Check if the container itself is a React root node.\n\n var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainer(container.parentNode) && !!container.parentNode._reactRootContainer;\n\n if (hasNonRootReactChild) {\n error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');\n }\n }\n\n return false;\n }\n}\n\nfunction createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.\nimplementation) {\n var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n return {\n // This tag allow us to uniquely identify this as a React Portal\n $$typeof: REACT_PORTAL_TYPE,\n key: key == null ? null : '' + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\n\nvar ReactVersion = '16.13.1';\n\nsetAttemptUserBlockingHydration(attemptUserBlockingHydration$1);\nsetAttemptContinuousHydration(attemptContinuousHydration$1);\nsetAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);\nvar didWarnAboutUnstableCreatePortal = false;\n\n{\n if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype\n Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype\n Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {\n error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n}\n\nsetRestoreImplementation(restoreControlledState$3);\nsetBatchingImplementation(batchedUpdates$1, discreteUpdates$1, flushDiscreteUpdates, batchedEventUpdates$1);\n\nfunction createPortal$1(children, container) {\n var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (!isValidContainer(container)) {\n {\n throw Error( \"Target container is not a DOM element.\" );\n }\n } // TODO: pass ReactDOM portal implementation as third argument\n // $FlowFixMe The Flow type is opaque but there's no way to actually create it.\n\n\n return createPortal(children, container, null, key);\n}\n\nfunction renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n\n return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);\n}\n\nfunction unstable_createPortal(children, container) {\n var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n {\n if (!didWarnAboutUnstableCreatePortal) {\n didWarnAboutUnstableCreatePortal = true;\n\n warn('The ReactDOM.unstable_createPortal() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactDOM.createPortal() instead. It has the exact same API, ' + 'but without the \"unstable_\" prefix.');\n }\n }\n\n return createPortal$1(children, container, key);\n}\n\nvar Internals = {\n // Keep in sync with ReactDOMUnstableNativeDependencies.js\n // ReactTestUtils.js, and ReactTestUtilsAct.js. This is an array for better minification.\n Events: [getInstanceFromNode$1, getNodeFromInstance$1, getFiberCurrentPropsFromNode$1, injectEventPluginsByName, eventNameDispatchConfigs, accumulateTwoPhaseDispatches, accumulateDirectDispatches, enqueueStateRestore, restoreStateIfNeeded, dispatchEvent, runEventsInBatch, flushPassiveEffects, IsThisRendererActing]\n};\nvar foundDevTools = injectIntoDevTools({\n findFiberByHostInstance: getClosestInstanceFromNode,\n bundleType: 1 ,\n version: ReactVersion,\n rendererPackageName: 'react-dom'\n});\n\n{\n if (!foundDevTools && canUseDOM && window.top === window.self) {\n // If we're in Chrome or Firefox, provide a download link if not installed.\n if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.\n\n if (/^(https?|file):$/.test(protocol)) {\n // eslint-disable-next-line react-internal/no-production-logging\n console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://fb.me/react-devtools' + (protocol === 'file:' ? '\\nYou might need to use a local HTTP server (instead of file://): ' + 'https://fb.me/react-devtools-faq' : ''), 'font-weight:bold');\n }\n }\n }\n}\n\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;\nexports.createPortal = createPortal$1;\nexports.findDOMNode = findDOMNode;\nexports.flushSync = flushSync;\nexports.hydrate = hydrate;\nexports.render = render;\nexports.unmountComponentAtNode = unmountComponentAtNode;\nexports.unstable_batchedUpdates = batchedUpdates$1;\nexports.unstable_createPortal = unstable_createPortal;\nexports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;\nexports.version = ReactVersion;\n })();\n}\n\n}).call(this,require('_process'))\n},{\"_process\":67,\"object-assign\":66,\"prop-types/checkPropTypes\":69,\"react\":76,\"scheduler\":83,\"scheduler/tracing\":84}],72:[function(require,module,exports){\n/** @license React v16.13.1\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),r=require(\"scheduler\");function u(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!aa)throw Error(u(227));\nfunction ba(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var da=!1,ea=null,fa=!1,ha=null,ia={onError:function(a){da=!0;ea=a}};function ja(a,b,c,d,e,f,g,h,k){da=!1;ea=null;ba.apply(ia,arguments)}function ka(a,b,c,d,e,f,g,h,k){ja.apply(this,arguments);if(da){if(da){var l=ea;da=!1;ea=null}else throw Error(u(198));fa||(fa=!0,ha=l)}}var la=null,ma=null,na=null;\nfunction oa(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=na(c);ka(d,b,void 0,a);a.currentTarget=null}var pa=null,qa={};\nfunction ra(){if(pa)for(var a in qa){var b=qa[a],c=pa.indexOf(a);if(!(-1<c))throw Error(u(96,a));if(!sa[c]){if(!b.extractEvents)throw Error(u(97,a));sa[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;if(ta.hasOwnProperty(h))throw Error(u(99,h));ta[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&ua(k[e],g,h);e=!0}else f.registrationName?(ua(f.registrationName,g,h),e=!0):e=!1;if(!e)throw Error(u(98,d,a));}}}}\nfunction ua(a,b,c){if(va[a])throw Error(u(100,a));va[a]=b;wa[a]=b.eventTypes[c].dependencies}var sa=[],ta={},va={},wa={};function xa(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(!qa.hasOwnProperty(c)||qa[c]!==d){if(qa[c])throw Error(u(102,c));qa[c]=d;b=!0}}b&&ra()}var ya=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),za=null,Aa=null,Ba=null;\nfunction Ca(a){if(a=ma(a)){if(\"function\"!==typeof za)throw Error(u(280));var b=a.stateNode;b&&(b=la(b),za(a.stateNode,a.type,b))}}function Da(a){Aa?Ba?Ba.push(a):Ba=[a]:Aa=a}function Ea(){if(Aa){var a=Aa,b=Ba;Ba=Aa=null;Ca(a);if(b)for(a=0;a<b.length;a++)Ca(b[a])}}function Fa(a,b){return a(b)}function Ga(a,b,c,d,e){return a(b,c,d,e)}function Ha(){}var Ia=Fa,Ja=!1,Ka=!1;function La(){if(null!==Aa||null!==Ba)Ha(),Ea()}\nfunction Ma(a,b,c){if(Ka)return a(b,c);Ka=!0;try{return Ia(a,b,c)}finally{Ka=!1,La()}}var Na=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Oa=Object.prototype.hasOwnProperty,Pa={},Qa={};\nfunction Ra(a){if(Oa.call(Qa,a))return!0;if(Oa.call(Pa,a))return!1;if(Na.test(a))return Qa[a]=!0;Pa[a]=!0;return!1}function Sa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction Ta(a,b,c,d){if(null===b||\"undefined\"===typeof b||Sa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(Ta(b,c,e,d)&&(c=null),d||null===e?Ra(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nvar Ya=/^(.*)[\\\\\\/]/,E=\"function\"===typeof Symbol&&Symbol.for,Za=E?Symbol.for(\"react.element\"):60103,$a=E?Symbol.for(\"react.portal\"):60106,ab=E?Symbol.for(\"react.fragment\"):60107,bb=E?Symbol.for(\"react.strict_mode\"):60108,cb=E?Symbol.for(\"react.profiler\"):60114,db=E?Symbol.for(\"react.provider\"):60109,eb=E?Symbol.for(\"react.context\"):60110,fb=E?Symbol.for(\"react.concurrent_mode\"):60111,gb=E?Symbol.for(\"react.forward_ref\"):60112,hb=E?Symbol.for(\"react.suspense\"):60113,ib=E?Symbol.for(\"react.suspense_list\"):\n60120,jb=E?Symbol.for(\"react.memo\"):60115,kb=E?Symbol.for(\"react.lazy\"):60116,lb=E?Symbol.for(\"react.block\"):60121,mb=\"function\"===typeof Symbol&&Symbol.iterator;function nb(a){if(null===a||\"object\"!==typeof a)return null;a=mb&&a[mb]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function ob(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}}\nfunction pb(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ab:return\"Fragment\";case $a:return\"Portal\";case cb:return\"Profiler\";case bb:return\"StrictMode\";case hb:return\"Suspense\";case ib:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case eb:return\"Context.Consumer\";case db:return\"Context.Provider\";case gb:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\n\"ForwardRef\");case jb:return pb(a.type);case lb:return pb(a.render);case kb:if(a=1===a._status?a._result:null)return pb(a)}return null}function qb(a){var b=\"\";do{a:switch(a.tag){case 3:case 4:case 6:case 7:case 10:case 9:var c=\"\";break a;default:var d=a._debugOwner,e=a._debugSource,f=pb(a.type);c=null;d&&(c=pb(d.type));d=f;f=\"\";e?f=\" (at \"+e.fileName.replace(Ya,\"\")+\":\"+e.lineNumber+\")\":c&&(f=\" (created by \"+c+\")\");c=\"\\n in \"+(d||\"Unknown\")+f}b+=c;a=a.return}while(a);return b}\nfunction rb(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function sb(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction tb(a){var b=sb(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function xb(a){a._valueTracker||(a._valueTracker=tb(a))}function yb(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=sb(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function zb(a,b){var c=b.checked;return n({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}\nfunction Ab(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=rb(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Bb(a,b){b=b.checked;null!=b&&Xa(a,\"checked\",b,!1)}\nfunction Cb(a,b){Bb(a,b);var c=rb(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?Db(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&Db(a,b.type,rb(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Eb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction Db(a,b,c){if(\"number\"!==b||a.ownerDocument.activeElement!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function Fb(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function Gb(a,b){a=n({children:void 0},b);if(b=Fb(b.children))a.children=b;return a}\nfunction Hb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+rb(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction Ib(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(u(91));return n({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function Jb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(u(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;d<b.length&&!a.isPropagationStopped();d++)oa(a,b[d],c[d]);else b&&oa(a,b,c);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function mc(a){null!==a&&(kc=ic(kc,a));a=kc;kc=null;if(a){jc(a,lc);if(kc)throw Error(u(95));if(fa)throw a=ha,fa=!1,ha=null,a;}}\nfunction nc(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}function oc(a){if(!ya)return!1;a=\"on\"+a;var b=a in document;b||(b=document.createElement(\"div\"),b.setAttribute(a,\"return;\"),b=\"function\"===typeof b[a]);return b}var pc=[];function qc(a){a.topLevelType=null;a.nativeEvent=null;a.targetInst=null;a.ancestors.length=0;10>pc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c<a.ancestors.length;c++){b=a.ancestors[c];var e=nc(a.nativeEvent);d=a.topLevelType;var f=a.nativeEvent,g=a.eventSystemFlags;0===c&&(g|=64);for(var h=null,k=0;k<sa.length;k++){var l=sa[k];l&&(l=l.extractEvents(d,b,f,e,g))&&(h=\nic(h,l))}mc(h)}}function uc(a,b,c){if(!c.has(a)){switch(a){case \"scroll\":vc(b,\"scroll\",!0);break;case \"focus\":case \"blur\":vc(b,\"focus\",!0);vc(b,\"blur\",!0);c.set(\"blur\",null);c.set(\"focus\",null);break;case \"cancel\":case \"close\":oc(a)&&vc(b,a,!0);break;case \"invalid\":case \"submit\":case \"reset\":break;default:-1===ac.indexOf(a)&&F(a,b)}c.set(a,null)}}\nvar wc,xc,yc,zc=!1,Ac=[],Bc=null,Cc=null,Dc=null,Ec=new Map,Fc=new Map,Gc=[],Hc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit\".split(\" \"),Ic=\"focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture\".split(\" \");\nfunction Jc(a,b){var c=cc(b);Hc.forEach(function(a){uc(a,b,c)});Ic.forEach(function(a){uc(a,b,c)})}function Kc(a,b,c,d,e){return{blockedOn:a,topLevelType:b,eventSystemFlags:c|32,nativeEvent:e,container:d}}\nfunction Lc(a,b){switch(a){case \"focus\":case \"blur\":Bc=null;break;case \"dragenter\":case \"dragleave\":Cc=null;break;case \"mouseover\":case \"mouseout\":Dc=null;break;case \"pointerover\":case \"pointerout\":Ec.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Fc.delete(b.pointerId)}}function Mc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=Kc(b,c,d,e,f),null!==b&&(b=Nc(b),null!==b&&xc(b)),a;a.eventSystemFlags|=d;return a}\nfunction Oc(a,b,c,d,e){switch(b){case \"focus\":return Bc=Mc(Bc,a,b,c,d,e),!0;case \"dragenter\":return Cc=Mc(Cc,a,b,c,d,e),!0;case \"mouseover\":return Dc=Mc(Dc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Ec.set(f,Mc(Ec.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Fc.set(f,Mc(Fc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Pc(a){var b=tc(a.target);if(null!==b){var c=dc(b);if(null!==c)if(b=c.tag,13===b){if(b=ec(c),null!==b){a.blockedOn=b;r.unstable_runWithPriority(a.priority,function(){yc(c)});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}function Qc(a){if(null!==a.blockedOn)return!1;var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);if(null!==b){var c=Nc(b);null!==c&&xc(c);a.blockedOn=b;return!1}return!0}\nfunction Sc(a,b,c){Qc(a)&&c.delete(b)}function Tc(){for(zc=!1;0<Ac.length;){var a=Ac[0];if(null!==a.blockedOn){a=Nc(a.blockedOn);null!==a&&wc(a);break}var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);null!==b?a.blockedOn=b:Ac.shift()}null!==Bc&&Qc(Bc)&&(Bc=null);null!==Cc&&Qc(Cc)&&(Cc=null);null!==Dc&&Qc(Dc)&&(Dc=null);Ec.forEach(Sc);Fc.forEach(Sc)}function Uc(a,b){a.blockedOn===b&&(a.blockedOn=null,zc||(zc=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Tc)))}\nfunction Vc(a){function b(b){return Uc(b,a)}if(0<Ac.length){Uc(Ac[0],a);for(var c=1;c<Ac.length;c++){var d=Ac[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Bc&&Uc(Bc,a);null!==Cc&&Uc(Cc,a);null!==Dc&&Uc(Dc,a);Ec.forEach(b);Fc.forEach(b);for(c=0;c<Gc.length;c++)d=Gc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Gc.length&&(c=Gc[0],null===c.blockedOn);)Pc(c),null===c.blockedOn&&Gc.shift()}\nvar Wc={},Yc=new Map,Zc=new Map,$c=[\"abort\",\"abort\",Xb,\"animationEnd\",Yb,\"animationIteration\",Zb,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\n\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",$b,\"transitionEnd\",\"waiting\",\"waiting\"];function ad(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1],f=\"on\"+(e[0].toUpperCase()+e.slice(1));f={phasedRegistrationNames:{bubbled:f,captured:f+\"Capture\"},dependencies:[d],eventPriority:b};Zc.set(d,b);Yc.set(d,f);Wc[e]=f}}\nad(\"blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),0);\nad(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1);ad($c,2);for(var bd=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),cd=0;cd<bd.length;cd++)Zc.set(bd[cd],0);\nvar dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function F(a,b){vc(b,a,!1)}function vc(a,b,c){var d=Zc.get(b);switch(void 0===d?2:d){case 0:d=gd.bind(null,b,1,a);break;case 1:d=hd.bind(null,b,1,a);break;default:d=id.bind(null,b,1,a)}c?a.addEventListener(b,d,!0):a.addEventListener(b,d,!1)}function gd(a,b,c,d){Ja||Ha();var e=id,f=Ja;Ja=!0;try{Ga(e,a,b,c,d)}finally{(Ja=f)||La()}}function hd(a,b,c,d){ed(dd,id.bind(null,a,b,c,d))}\nfunction id(a,b,c,d){if(fd)if(0<Ac.length&&-1<Hc.indexOf(a))a=Kc(null,a,b,c,d),Ac.push(a);else{var e=Rc(a,b,c,d);if(null===e)Lc(a,d);else if(-1<Hc.indexOf(a))a=Kc(e,a,b,c,d),Ac.push(a);else if(!Oc(e,a,b,c,d)){Lc(a,d);a=rc(a,d,null,b);try{Ma(sc,a)}finally{qc(a)}}}}\nfunction Rc(a,b,c,d){c=nc(d);c=tc(c);if(null!==c){var e=dc(c);if(null===e)c=null;else{var f=e.tag;if(13===f){c=ec(e);if(null!==c)return c;c=null}else if(3===f){if(e.stateNode.hydrate)return 3===e.tag?e.stateNode.containerInfo:null;c=null}else e!==c&&(c=null)}}a=rc(a,d,c,b);try{Ma(sc,a)}finally{qc(a)}return null}\nvar jd={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},kd=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(jd).forEach(function(a){kd.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);jd[b]=jd[a]})});function ld(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||jd.hasOwnProperty(a)&&jd[a]?(\"\"+b).trim():b+\"px\"}\nfunction md(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ld(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var nd=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction od(a,b){if(b){if(nd[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(u(137,a,\"\"));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(u(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(u(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(u(62,\"\"));}}\nfunction pd(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var qd=Mb.html;function rd(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=cc(a);b=wa[b];for(var d=0;d<b.length;d++)uc(b[d],a,c)}function sd(){}\nfunction td(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function ud(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function vd(a,b){var c=ud(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0<b--;)Td(c[b],\"captured\",a);for(b=0;b<c.length;b++)Td(c[b],\"bubbled\",a)}}\nfunction Vd(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=Sd(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a))}function Wd(a){a&&a.dispatchConfig.registrationName&&Vd(a._targetInst,null,a)}function Xd(a){jc(a,Ud)}var Yd=null,Zd=null,$d=null;\nfunction ae(){if($d)return $d;var a,b=Zd,c=b.length,d,e=\"value\"in Yd?Yd.value:Yd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return $d=e.slice(a,1<d?1-d:void 0)}function be(){return!0}function ce(){return!1}\nfunction G(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?be:ce;this.isPropagationStopped=ce;return this}\nn(G.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=be)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=be)},persist:function(){this.isPersistent=be},isPersistent:ce,destructor:function(){var a=this.constructor.Interface,\nb;for(b in a)this[b]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null;this.isPropagationStopped=this.isDefaultPrevented=ce;this._dispatchInstances=this._dispatchListeners=null}});G.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\nG.extend=function(a){function b(){}function c(){return d.apply(this,arguments)}var d=this;b.prototype=d.prototype;var e=new b;n(e,c.prototype);c.prototype=e;c.prototype.constructor=c;c.Interface=n({},d.Interface,a);c.extend=d.extend;de(c);return c};de(G);function ee(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction fe(a){if(!(a instanceof this))throw Error(u(279));a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8<ke&&11>=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return me&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar ve={eventTypes:oe,extractEvents:function(a,b,c,d){var e;if(je)b:{switch(a){case \"compositionstart\":var f=oe.compositionStart;break b;case \"compositionend\":f=oe.compositionEnd;break b;case \"compositionupdate\":f=oe.compositionUpdate;break b}f=void 0}else se?qe(a,c)&&(f=oe.compositionEnd):\"keydown\"===a&&229===c.keyCode&&(f=oe.compositionStart);f?(me&&\"ko\"!==c.locale&&(se||f!==oe.compositionStart?f===oe.compositionEnd&&se&&(e=ae()):(Yd=d,Zd=\"value\"in Yd?Yd.value:Yd.textContent,se=!0)),f=ge.getPooled(f,\nb,c,d),e?f.data=e:(e=re(c),null!==e&&(f.data=e)),Xd(f),e=f):e=null;(a=le?te(a,c):ue(a,c))?(b=he.getPooled(oe.beforeInput,b,c,d),b.data=a,Xd(b)):b=null;return null===e?b:null===b?e:[e,b]}},we={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function xe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!we[a.type]:\"textarea\"===b?!0:!1}\nvar ye={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function ze(a,b,c){a=G.getPooled(ye.change,a,b,c);a.type=\"change\";Da(c);Xd(a);return a}var Ae=null,Be=null;function Ce(a){mc(a)}function De(a){var b=Pd(a);if(yb(b))return a}function Ee(a,b){if(\"change\"===a)return b}var Fe=!1;ya&&(Fe=oc(\"input\")&&(!document.documentMode||9<document.documentMode));\nfunction Ge(){Ae&&(Ae.detachEvent(\"onpropertychange\",He),Be=Ae=null)}function He(a){if(\"value\"===a.propertyName&&De(Be))if(a=ze(Be,a,nc(a)),Ja)mc(a);else{Ja=!0;try{Fa(Ce,a)}finally{Ja=!1,La()}}}function Ie(a,b,c){\"focus\"===a?(Ge(),Ae=b,Be=c,Ae.attachEvent(\"onpropertychange\",He)):\"blur\"===a&&Ge()}function Je(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return De(Be)}function Ke(a,b){if(\"click\"===a)return De(b)}function Le(a,b){if(\"input\"===a||\"change\"===a)return De(b)}\nvar Me={eventTypes:ye,_isInputEventSupported:Fe,extractEvents:function(a,b,c,d){var e=b?Pd(b):window,f=e.nodeName&&e.nodeName.toLowerCase();if(\"select\"===f||\"input\"===f&&\"file\"===e.type)var g=Ee;else if(xe(e))if(Fe)g=Le;else{g=Je;var h=Ie}else(f=e.nodeName)&&\"input\"===f.toLowerCase()&&(\"checkbox\"===e.type||\"radio\"===e.type)&&(g=Ke);if(g&&(g=g(a,b)))return ze(g,c,d);h&&h(a,e,b);\"blur\"===a&&(a=e._wrapperState)&&a.controlled&&\"number\"===e.type&&Db(e,\"number\",e.value)}},Ne=G.extend({view:null,detail:null}),\nOe={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pe(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Oe[a])?!!b[a]:!1}function Qe(){return Pe}\nvar Re=0,Se=0,Te=!1,Ue=!1,Ve=Ne.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Qe,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)},movementX:function(a){if(\"movementX\"in a)return a.movementX;var b=Re;Re=a.screenX;return Te?\"mousemove\"===a.type?a.screenX-b:0:(Te=!0,0)},movementY:function(a){if(\"movementY\"in a)return a.movementY;\nvar b=Se;Se=a.screenY;return Ue?\"mousemove\"===a.type?a.screenY-b:0:(Ue=!0,0)}}),We=Ve.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Xe={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",\ndependencies:[\"pointerout\",\"pointerover\"]}},Ye={eventTypes:Xe,extractEvents:function(a,b,c,d,e){var f=\"mouseover\"===a||\"pointerover\"===a,g=\"mouseout\"===a||\"pointerout\"===a;if(f&&0===(e&32)&&(c.relatedTarget||c.fromElement)||!g&&!f)return null;f=d.window===d?d:(f=d.ownerDocument)?f.defaultView||f.parentWindow:window;if(g){if(g=b,b=(b=c.relatedTarget||c.toElement)?tc(b):null,null!==b){var h=dc(b);if(b!==h||5!==b.tag&&6!==b.tag)b=null}}else g=null;if(g===b)return null;if(\"mouseout\"===a||\"mouseover\"===\na){var k=Ve;var l=Xe.mouseLeave;var m=Xe.mouseEnter;var p=\"mouse\"}else if(\"pointerout\"===a||\"pointerover\"===a)k=We,l=Xe.pointerLeave,m=Xe.pointerEnter,p=\"pointer\";a=null==g?f:Pd(g);f=null==b?f:Pd(b);l=k.getPooled(l,g,c,d);l.type=p+\"leave\";l.target=a;l.relatedTarget=f;c=k.getPooled(m,b,c,d);c.type=p+\"enter\";c.target=f;c.relatedTarget=a;d=g;p=b;if(d&&p)a:{k=d;m=p;g=0;for(a=k;a;a=Rd(a))g++;a=0;for(b=m;b;b=Rd(b))a++;for(;0<g-a;)k=Rd(k),g--;for(;0<a-g;)m=Rd(m),a--;for(;g--;){if(k===m||k===m.alternate)break a;\nk=Rd(k);m=Rd(m)}k=null}else k=null;m=k;for(k=[];d&&d!==m;){g=d.alternate;if(null!==g&&g===m)break;k.push(d);d=Rd(d)}for(d=[];p&&p!==m;){g=p.alternate;if(null!==g&&g===m)break;d.push(p);p=Rd(p)}for(p=0;p<k.length;p++)Vd(k[p],\"bubbled\",l);for(p=d.length;0<p--;)Vd(d[p],\"captured\",c);return 0===(e&64)?[l]:[l,c]}};function Ze(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var $e=\"function\"===typeof Object.is?Object.is:Ze,af=Object.prototype.hasOwnProperty;\nfunction bf(a,b){if($e(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!af.call(b,c[d])||!$e(a[c[d]],b[c[d]]))return!1;return!0}\nvar cf=ya&&\"documentMode\"in document&&11>=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;g<f.length;g++)if(!e.has(f[g])){e=!1;break a}e=!0}f=!e}if(f)return null;e=b?Pd(b):window;switch(a){case \"focus\":if(xe(e)||\"true\"===e.contentEditable)ef=e,ff=b,gf=null;break;case \"blur\":gf=ff=ef=null;break;case \"mousedown\":hf=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":return hf=!1,jf(c,d);case \"selectionchange\":if(cf)break;\ncase \"keydown\":case \"keyup\":return jf(c,d)}return null}},lf=G.extend({animationName:null,elapsedTime:null,pseudoElement:null}),mf=G.extend({clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),nf=Ne.extend({relatedTarget:null});function of(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}\nvar pf={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},qf={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},rf=Ne.extend({key:function(a){if(a.key){var b=pf[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=of(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?qf[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Qe,charCode:function(a){return\"keypress\"===\na.type?of(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===a.type?of(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),sf=Ve.extend({dataTransfer:null}),tf=Ne.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Qe}),uf=G.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),vf=Ve.extend({deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in\na?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null}),wf={eventTypes:Wc,extractEvents:function(a,b,c,d){var e=Yc.get(a);if(!e)return null;switch(a){case \"keypress\":if(0===of(c))return null;case \"keydown\":case \"keyup\":a=rf;break;case \"blur\":case \"focus\":a=nf;break;case \"click\":if(2===c.button)return null;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":a=\nVe;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":a=sf;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":a=tf;break;case Xb:case Yb:case Zb:a=lf;break;case $b:a=uf;break;case \"scroll\":a=Ne;break;case \"wheel\":a=vf;break;case \"copy\":case \"cut\":case \"paste\":a=mf;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":a=\nWe;break;default:a=G}b=a.getPooled(e,b,c,d);Xd(b);return b}};if(pa)throw Error(u(101));pa=Array.prototype.slice.call(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));ra();var xf=Nc;la=Qd;ma=xf;na=Pd;xa({SimpleEventPlugin:wf,EnterLeaveEventPlugin:Ye,ChangeEventPlugin:Me,SelectEventPlugin:kf,BeforeInputEventPlugin:ve});var yf=[],zf=-1;function H(a){0>zf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});Wf=null}catch(c){throw null!==Wf&&(Wf=Wf.slice(a+1)),Jf(Of,gg),c;}finally{Yf=!1}}}function hg(a,b,c){c/=10;return 1073741821-(((1073741821-a+b/10)/c|0)+1)*c}function ig(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}var jg={current:null},kg=null,lg=null,mg=null;function ng(){mg=lg=kg=null}\nfunction og(a){var b=jg.current;H(jg);a.type._context._currentValue=b}function pg(a,b){for(;null!==a;){var c=a.alternate;if(a.childExpirationTime<b)a.childExpirationTime=b,null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);else if(null!==c&&c.childExpirationTime<b)c.childExpirationTime=b;else break;a=a.return}}function qg(a,b){kg=a;mg=lg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(a.expirationTime>=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(g<d){var ca={expirationTime:z.expirationTime,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null};null===x?(p=x=\nca,m=k):x=x.next=ca;g>l&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=e;e=c;if(\"function\"!==typeof d)throw Error(u(191,d));d.call(e)}}}var Dg=Wa.ReactCurrentBatchConfig,Eg=(new aa.Component).refs;function Fg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;0===a.expirationTime&&(a.updateQueue.baseState=c)}\nvar Jg={isMounted:function(a){return(a=a._reactInternalFiber)?dc(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gg(),d=Dg.suspense;\nc=Hg(c,a,d);d=wg(c,d);d.tag=2;void 0!==b&&null!==b&&(d.callback=b);xg(a,d);Ig(a,c)}};function Kg(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!bf(c,d)||!bf(e,f):!0}\nfunction Lg(a,b,c){var d=!1,e=Af;var f=b.contextType;\"object\"===typeof f&&null!==f?f=sg(f):(e=L(b)?Bf:J.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Cf(a,e):Af);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Jg;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Mg(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Jg.enqueueReplaceState(b,b.state,null)}\nfunction Ng(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Eg;ug(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=sg(f):(f=L(b)?Bf:J.current,e.context=Cf(a,f));zg(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Fg(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||\n(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Jg.enqueueReplaceState(e,e.state,null),zg(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var Og=Array.isArray;\nfunction Pg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(u(309));var d=c.stateNode}if(!d)throw Error(u(147,a));var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Eg&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw Error(u(284));if(!c._owner)throw Error(u(290,a));}return a}\nfunction Qg(a,b){if(\"textarea\"!==a.type)throw Error(u(31,\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\"));}\nfunction Rg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Sg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function g(b){a&&null===b.alternate&&(b.effectTag=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Tg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Pg(a,b,c),d.return=a,d;d=Ug(c.type,c.key,c.props,null,a.mode,d);d.ref=Pg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==\nc.implementation)return b=Vg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Wg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function p(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=Tg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Za:return c=Ug(b.type,b.key,b.props,null,a.mode,c),c.ref=Pg(a,null,b),c.return=a,c;case $a:return b=Vg(b,a.mode,c),b.return=a,b}if(Og(b)||\nnb(b))return b=Wg(b,a.mode,c,null),b.return=a,b;Qg(a,b)}return null}function x(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Za:return c.key===e?c.type===ab?m(a,b,c.props.children,d,e):k(a,b,c,d):null;case $a:return c.key===e?l(a,b,c,d):null}if(Og(c)||nb(c))return null!==e?null:m(a,b,c,d,null);Qg(a,c)}return null}function z(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=\na.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Za:return a=a.get(null===d.key?c:d.key)||null,d.type===ab?m(b,a,d.props.children,e,d.key):k(b,a,d,e);case $a:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Og(d)||nb(d))return a=a.get(c)||null,m(b,a,d,e,null);Qg(b,d)}return null}function ca(e,g,h,k){for(var l=null,t=null,m=g,y=g=0,A=null;null!==m&&y<h.length;y++){m.index>y?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;y<h.length;y++)m=p(e,h[y],k),null!==m&&(g=f(m,g,y),null===t?l=m:t.sibling=m,t=m);return l}for(m=d(e,m);y<h.length;y++)A=z(m,e,y,h[y],k),null!==A&&(a&&null!==A.alternate&&m.delete(null===A.key?y:A.key),g=f(A,g,y),null===t?l=A:t.sibling=A,t=A);a&&m.forEach(function(a){return b(e,a)});return l}function D(e,g,h,l){var k=nb(h);if(\"function\"!==typeof k)throw Error(u(150));h=k.call(h);\nif(null==h)throw Error(u(151));for(var m=k=null,t=g,y=g=0,A=null,q=h.next();null!==t&&!q.done;y++,q=h.next()){t.index>y?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!$e(a[c],b[c]))return!1;return!0}\nfunction oh(a,b,c,d,e,f){lh=f;N=b;b.memoizedState=null;b.updateQueue=null;b.expirationTime=0;jh.current=null===a||null===a.memoizedState?ph:qh;a=c(d,e);if(b.expirationTime===lh){f=0;do{b.expirationTime=0;if(!(25>f))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(l<lh){var m={expirationTime:k.expirationTime,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null};null===h?(g=h=m,f=d):h=h.next=m;l>N.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97<d?97:d,function(){var d=kh.suspense;kh.suspense=void 0===b?null:b;try{a(!1),c()}finally{kh.suspense=d}})}\nfunction zh(a,b,c){var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e={expirationTime:d,suspenseConfig:e,action:c,eagerReducer:null,eagerState:null,next:null};var f=b.pending;null===f?e.next=e:(e.next=f.next,f.next=e);b.pending=e;f=a.alternate;if(a===N||null!==f&&f===N)mh=!0,e.expirationTime=lh,N.expirationTime=lh;else{if(0===a.expirationTime&&(null===f||0===f.expirationTime)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.eagerReducer=f;e.eagerState=h;if($e(h,g))return}catch(k){}finally{}Ig(a,\nd)}}\nvar sh={readContext:sg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useResponder:Q,useDeferredValue:Q,useTransition:Q},ph={readContext:sg,useCallback:Kh,useContext:sg,useEffect:Eh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Ch(4,2,Hh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Ch(4,2,a,b)},useMemo:function(a,b){var c=th();b=void 0===b?null:b;a=a();c.memoizedState=[a,\nb];return a},useReducer:function(a,b,c){var d=th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=zh.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=th();a={current:a};return b.memoizedState=a},useState:yh,useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=yh(a),d=c[0],e=c[1];Eh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=\nc}},[a,b]);return d},useTransition:function(a){var b=yh(!1),c=b[0];b=b[1];return[Kh(Nh.bind(null,b,a),[b,a]),c]}},qh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:wh,useRef:Bh,useState:function(){return wh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=wh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=\nwh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,b,a),[b,a]),c]}},rh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:xh,useRef:Bh,useState:function(){return xh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=xh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=xh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,\nb,a),[b,a]),c]}},Oh=null,Ph=null,Qh=!1;function Rh(a,b){var c=Sh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}\nfunction Th(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Uh(a){if(Qh){var b=Ph;if(b){var c=b;if(!Th(a,b)){b=Jd(c.nextSibling);if(!b||!Th(a,b)){a.effectTag=a.effectTag&-1025|2;Qh=!1;Oh=a;return}Rh(Oh,c)}Oh=a;Ph=Jd(b.firstChild)}else a.effectTag=a.effectTag&-1025|2,Qh=!1,Oh=a}}function Vh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;Oh=a}\nfunction Wh(a){if(a!==Oh)return!1;if(!Qh)return Vh(a),Qh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!Gd(b,a.memoizedProps))for(b=Ph;b;)Rh(a,b),b=Jd(b.nextSibling);Vh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(u(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(c===Ad){if(0===b){Ph=Jd(a.nextSibling);break a}b--}else c!==zd&&c!==Cd&&c!==Bd||b++}a=a.nextSibling}Ph=null}}else Ph=Oh?Jd(a.stateNode.nextSibling):null;return!0}\nfunction Xh(){Ph=Oh=null;Qh=!1}var Yh=Wa.ReactCurrentOwner,rg=!1;function R(a,b,c,d){b.child=null===a?Yg(b,null,c,d):Xg(b,a.child,c,d)}function Zh(a,b,c,d,e){c=c.render;var f=b.ref;qg(b,e);d=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,d,e);return b.child}\nfunction ai(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!bi(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ci(a,b,g,d,e,f);a=Ug(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e<f&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:bf,c(e,d)&&a.ref===b.ref))return $h(a,b,f);b.effectTag|=1;a=Sg(g,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction ci(a,b,c,d,e,f){return null!==a&&bf(a.memoizedProps,d)&&a.ref===b.ref&&(rg=!1,e<f)?(b.expirationTime=a.expirationTime,$h(a,b,f)):di(a,b,c,d,f)}function ei(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function di(a,b,c,d,e){var f=L(c)?Bf:J.current;f=Cf(b,f);qg(b,e);c=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,c,e);return b.child}\nfunction fi(a,b,c,d,e){if(L(c)){var f=!0;Gf(b)}else f=!1;qg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),Lg(b,c,d),Ng(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l));var m=c.getDerivedStateFromProps,p=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;p||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l);tg=!1;var x=b.memoizedState;g.state=x;zg(b,d,g,e);k=b.memoizedState;h!==d||x!==k||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),k=b.memoizedState),(h=tg||Kg(b,c,h,d,x,k,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.effectTag|=4)):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),d=!1)}else g=b.stateNode,vg(a,b),h=b.memoizedProps,g.props=b.type===b.elementType?h:ig(b.type,h),k=g.context,l=c.contextType,\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l)),m=c.getDerivedStateFromProps,(p=\"function\"===typeof m||\"function\"===\ntypeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l),tg=!1,k=b.memoizedState,g.state=k,zg(b,d,g,e),x=b.memoizedState,h!==d||k!==x||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),x=b.memoizedState),(m=tg||Kg(b,c,h,d,k,x,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nx,l),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,l)),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.effectTag|=256)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=l,d=m):\n(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),d=!1);return gi(a,b,c,d,f,e)}\nfunction gi(a,b,c,d,e,f){ei(a,b);var g=0!==(b.effectTag&64);if(!d&&!g)return e&&Hf(b,c,!1),$h(a,b,f);d=b.stateNode;Yh.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.effectTag|=1;null!==a&&g?(b.child=Xg(b,a.child,null,f),b.child=Xg(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&Hf(b,c,!0);return b.child}function hi(a){var b=a.stateNode;b.pendingContext?Ef(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Ef(a,b.context,!1);dh(a,b.containerInfo)}\nvar ii={dehydrated:null,retryTime:0};\nfunction ji(a,b,c){var d=b.mode,e=b.pendingProps,f=M.current,g=!1,h;(h=0!==(b.effectTag&64))||(h=0!==(f&2)&&(null===a||null!==a.memoizedState));h?(g=!0,b.effectTag&=-65):null!==a&&null===a.memoizedState||void 0===e.fallback||!0===e.unstable_avoidThisFallback||(f|=1);I(M,f&1);if(null===a){void 0!==e.fallback&&Uh(b);if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=\nb;e.sibling=c;b.memoizedState=ii;b.child=e;return c}d=e.children;b.memoizedState=null;return b.child=Yg(b,null,d,c)}if(null!==a.memoizedState){a=a.child;d=a.sibling;if(g){e=e.fallback;c=Sg(a,a.pendingProps);c.return=b;if(0===(b.mode&2)&&(g=null!==b.memoizedState?b.child.child:b.child,g!==a.child))for(c.child=g;null!==g;)g.return=c,g=g.sibling;d=Sg(d,e);d.return=b;c.sibling=d;c.childExpirationTime=0;b.memoizedState=ii;b.child=c;return d}c=Xg(b,a.child,e.children,c);b.memoizedState=null;return b.child=\nc}a=a.child;if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;e.child=a;null!==a&&(a.return=e);if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=b;e.sibling=c;c.effectTag|=2;e.childExpirationTime=0;b.memoizedState=ii;b.child=e;return c}b.memoizedState=null;return b.child=Xg(b,a,e.children,c)}\nfunction ki(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);pg(a.return,b)}function li(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailExpiration:0,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailExpiration=0,g.tailMode=e,g.lastEffect=f)}\nfunction mi(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.effectTag|=64;else{if(null!==a&&0!==(a.effectTag&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&ki(a,c);else if(19===a.tag)ki(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(M,d);if(0===(b.mode&2))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===hh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);li(b,!1,e,c,f,b.lastEffect);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===hh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}li(b,!0,c,null,f,b.lastEffect);break;case \"together\":li(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}\nfunction $h(a,b,c){null!==a&&(b.dependencies=a.dependencies);var d=b.expirationTime;0!==d&&Bg(d);if(b.childExpirationTime<c)return null;if(null!==a&&b.child!==a.child)throw Error(u(153));if(null!==b.child){a=b.child;c=Sg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Sg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}var ni,oi,pi,qi;\nni=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};oi=function(){};\npi=function(a,b,c,d,e){var f=a.memoizedProps;if(f!==d){var g=b.stateNode;ch($g.current);a=null;switch(c){case \"input\":f=zb(g,f);d=zb(g,d);a=[];break;case \"option\":f=Gb(g,f);d=Gb(g,d);a=[];break;case \"select\":f=n({},f,{value:void 0});d=n({},d,{value:void 0});a=[];break;case \"textarea\":f=Ib(g,f);d=Ib(g,d);a=[];break;default:\"function\"!==typeof f.onClick&&\"function\"===typeof d.onClick&&(g.onclick=sd)}od(c,d);var h,k;c=null;for(h in f)if(!d.hasOwnProperty(h)&&f.hasOwnProperty(h)&&null!=f[h])if(\"style\"===\nh)for(k in g=f[h],g)g.hasOwnProperty(k)&&(c||(c={}),c[k]=\"\");else\"dangerouslySetInnerHTML\"!==h&&\"children\"!==h&&\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(va.hasOwnProperty(h)?a||(a=[]):(a=a||[]).push(h,null));for(h in d){var l=d[h];g=null!=f?f[h]:void 0;if(d.hasOwnProperty(h)&&l!==g&&(null!=l||null!=g))if(\"style\"===h)if(g){for(k in g)!g.hasOwnProperty(k)||l&&l.hasOwnProperty(k)||(c||(c={}),c[k]=\"\");for(k in l)l.hasOwnProperty(k)&&g[k]!==l[k]&&(c||(c={}),\nc[k]=l[k])}else c||(a||(a=[]),a.push(h,c)),c=l;else\"dangerouslySetInnerHTML\"===h?(l=l?l.__html:void 0,g=g?g.__html:void 0,null!=l&&g!==l&&(a=a||[]).push(h,l)):\"children\"===h?g===l||\"string\"!==typeof l&&\"number\"!==typeof l||(a=a||[]).push(h,\"\"+l):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&(va.hasOwnProperty(h)?(null!=l&&rd(e,h),a||g===l||(a=[])):(a=a||[]).push(h,l))}c&&(a=a||[]).push(\"style\",c);e=a;if(b.updateQueue=e)b.effectTag|=4}};\nqi=function(a,b,c,d){c!==d&&(b.effectTag|=4)};function ri(a,b){switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction si(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return L(b.type)&&Df(),null;case 3:return eh(),H(K),H(J),c=b.stateNode,c.pendingContext&&(c.context=c.pendingContext,c.pendingContext=null),null!==a&&null!==a.child||!Wh(b)||(b.effectTag|=4),oi(b),null;case 5:gh(b);c=ch(bh.current);var e=b.type;if(null!==a&&null!=b.stateNode)pi(a,b,e,d,c),a.ref!==b.ref&&(b.effectTag|=128);else{if(!d){if(null===b.stateNode)throw Error(u(166));\nreturn null}a=ch($g.current);if(Wh(b)){d=b.stateNode;e=b.type;var f=b.memoizedProps;d[Md]=b;d[Nd]=f;switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",d);break;case \"video\":case \"audio\":for(a=0;a<ac.length;a++)F(ac[a],d);break;case \"source\":F(\"error\",d);break;case \"img\":case \"image\":case \"link\":F(\"error\",d);F(\"load\",d);break;case \"form\":F(\"reset\",d);F(\"submit\",d);break;case \"details\":F(\"toggle\",d);break;case \"input\":Ab(d,f);F(\"invalid\",d);rd(c,\"onChange\");break;case \"select\":d._wrapperState=\n{wasMultiple:!!f.multiple};F(\"invalid\",d);rd(c,\"onChange\");break;case \"textarea\":Jb(d,f),F(\"invalid\",d),rd(c,\"onChange\")}od(e,f);a=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(a=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(a=[\"children\",\"\"+h]):va.hasOwnProperty(g)&&null!=h&&rd(c,g)}switch(e){case \"input\":xb(d);Eb(d,f,!0);break;case \"textarea\":xb(d);Lb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&\n(d.onclick=sd)}c=a;b.updateQueue=c;null!==c&&(b.effectTag|=4)}else{g=9===c.nodeType?c:c.ownerDocument;a===qd&&(a=Nb(e));a===qd?\"script\"===e?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;h<ac.length;h++)F(ac[h],a);h=d;break;case \"source\":F(\"error\",a);h=d;break;case \"img\":case \"image\":case \"link\":F(\"error\",a);F(\"load\",a);h=d;break;case \"form\":F(\"reset\",a);F(\"submit\",a);h=d;break;case \"details\":F(\"toggle\",a);h=d;break;case \"input\":Ab(a,d);h=zb(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;case \"option\":h=Gb(a,d);break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};h=n({},d,{value:void 0});F(\"invalid\",a);rd(c,\"onChange\");break;case \"textarea\":Jb(a,\nd);h=Ib(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;default:h=d}od(e,h);var k=h;for(f in k)if(k.hasOwnProperty(f)){var l=k[f];\"style\"===f?md(a,l):\"dangerouslySetInnerHTML\"===f?(l=l?l.__html:void 0,null!=l&&Qb(a,l)):\"children\"===f?\"string\"===typeof l?(\"textarea\"!==e||\"\"!==l)&&Rb(a,l):\"number\"===typeof l&&Rb(a,\"\"+l):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(va.hasOwnProperty(f)?null!=l&&rd(c,f):null!=l&&Xa(a,f,l,g))}switch(e){case \"input\":xb(a);Eb(a,d,!1);\nbreak;case \"textarea\":xb(a);Lb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+rb(d.value));break;case \"select\":a.multiple=!!d.multiple;c=d.value;null!=c?Hb(a,!!d.multiple,c,!1):null!=d.defaultValue&&Hb(a,!!d.multiple,d.defaultValue,!0);break;default:\"function\"===typeof h.onClick&&(a.onclick=sd)}Fd(e,d)&&(b.effectTag|=4)}null!==b.ref&&(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)qi(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(u(166));\nc=ch(bh.current);ch($g.current);Wh(b)?(c=b.stateNode,d=b.memoizedProps,c[Md]=b,c.nodeValue!==d&&(b.effectTag|=4)):(c=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),c[Md]=b,b.stateNode=c)}return null;case 13:H(M);d=b.memoizedState;if(0!==(b.effectTag&64))return b.expirationTime=c,b;c=null!==d;d=!1;null===a?void 0!==b.memoizedProps.fallback&&Wh(b):(e=a.memoizedState,d=null!==e,c||null===e||(e=a.child.sibling,null!==e&&(f=b.firstEffect,null!==f?(b.firstEffect=e,e.nextEffect=f):(b.firstEffect=b.lastEffect=\ne,e.nextEffect=null),e.effectTag=8)));if(c&&!d&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(M.current&1))S===ti&&(S=ui);else{if(S===ti||S===ui)S=vi;0!==wi&&null!==T&&(xi(T,U),yi(T,wi))}if(c||d)b.effectTag|=4;return null;case 4:return eh(),oi(b),null;case 10:return og(b),null;case 17:return L(b.type)&&Df(),null;case 19:H(M);d=b.memoizedState;if(null===d)return null;e=0!==(b.effectTag&64);f=d.rendering;if(null===f)if(e)ri(d,!1);else{if(S!==ti||null!==a&&0!==(a.effectTag&\n64))for(f=b.child;null!==f;){a=hh(f);if(null!==a){b.effectTag|=64;ri(d,!1);e=a.updateQueue;null!==e&&(b.updateQueue=e,b.effectTag|=4);null===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;for(d=b.child;null!==d;)e=d,f=c,e.effectTag&=2,e.nextEffect=null,e.firstEffect=null,e.lastEffect=null,a=e.alternate,null===a?(e.childExpirationTime=0,e.expirationTime=f,e.child=null,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null):(e.childExpirationTime=a.childExpirationTime,\ne.expirationTime=a.expirationTime,e.child=a.child,e.memoizedProps=a.memoizedProps,e.memoizedState=a.memoizedState,e.updateQueue=a.updateQueue,f=a.dependencies,e.dependencies=null===f?null:{expirationTime:f.expirationTime,firstContext:f.firstContext,responders:f.responders}),d=d.sibling;I(M,M.current&1|2);return b.child}f=f.sibling}}else{if(!e)if(a=hh(f),null!==a){if(b.effectTag|=64,e=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.effectTag|=4),ri(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!f.alternate)return b=\nb.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*$f()-d.renderingStartTime>d.tailExpiration&&1<c&&(b.effectTag|=64,e=!0,ri(d,!1),b.expirationTime=b.childExpirationTime=c-1);d.isBackwards?(f.sibling=b.child,b.child=f):(c=d.last,null!==c?c.sibling=f:b.child=f,d.last=f)}return null!==d.tail?(0===d.tailExpiration&&(d.tailExpiration=$f()+500),c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=$f(),c.sibling=null,b=M.current,I(M,e?b&1|2:b&1),c):null}throw Error(u(156,\nb.tag));}function zi(a){switch(a.tag){case 1:L(a.type)&&Df();var b=a.effectTag;return b&4096?(a.effectTag=b&-4097|64,a):null;case 3:eh();H(K);H(J);b=a.effectTag;if(0!==(b&64))throw Error(u(285));a.effectTag=b&-4097|64;return a;case 5:return gh(a),null;case 13:return H(M),b=a.effectTag,b&4096?(a.effectTag=b&-4097|64,a):null;case 19:return H(M),null;case 4:return eh(),null;case 10:return og(a),null;default:return null}}function Ai(a,b){return{value:a,source:b,stack:qb(b)}}\nvar Bi=\"function\"===typeof WeakSet?WeakSet:Set;function Ci(a,b){var c=b.source,d=b.stack;null===d&&null!==c&&(d=qb(c));null!==c&&pb(c.type);b=b.value;null!==a&&1===a.tag&&pb(a.type);try{console.error(b)}catch(e){setTimeout(function(){throw e;})}}function Di(a,b){try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){Ei(a,c)}}function Fi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Ei(a,c)}else b.current=null}\nfunction Gi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.effectTag&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:ig(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:case 5:case 6:case 4:case 17:return}throw Error(u(163));}\nfunction Hi(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.destroy;c.destroy=void 0;void 0!==d&&d()}c=c.next}while(c!==b)}}function Ii(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}\nfunction Ji(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:Ii(3,c);return;case 1:a=c.stateNode;if(c.effectTag&4)if(null===b)a.componentDidMount();else{var d=c.elementType===c.type?b.memoizedProps:ig(c.type,b.memoizedProps);a.componentDidUpdate(d,b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)}b=c.updateQueue;null!==b&&Cg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Cg(c,b,a)}return;\ncase 5:a=c.stateNode;null===b&&c.effectTag&4&&Fd(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Vc(c))));return;case 19:case 17:case 20:case 21:return}throw Error(u(163));}\nfunction Ki(a,b,c){\"function\"===typeof Li&&Li(b);switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a.next;cg(97<c?97:c,function(){var a=d;do{var c=a.destroy;if(void 0!==c){var g=b;try{c()}catch(h){Ei(g,h)}}a=a.next}while(a!==d)})}break;case 1:Fi(b);c=b.stateNode;\"function\"===typeof c.componentWillUnmount&&Di(b,c);break;case 5:Fi(b);break;case 4:Mi(a,b,c)}}\nfunction Ni(a){var b=a.alternate;a.return=null;a.child=null;a.memoizedState=null;a.updateQueue=null;a.dependencies=null;a.alternate=null;a.firstEffect=null;a.lastEffect=null;a.pendingProps=null;a.memoizedProps=null;a.stateNode=null;null!==b&&Ni(b)}function Oi(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Pi(a){a:{for(var b=a.return;null!==b;){if(Oi(b)){var c=b;break a}b=b.return}throw Error(u(160));}b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(u(161));}c.effectTag&16&&(Rb(b,\"\"),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||Oi(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.effectTag&2)continue b;\nif(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}d?Qi(a,c,b):Ri(a,c,b)}\nfunction Qi(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=sd));else if(4!==d&&(a=a.child,null!==a))for(Qi(a,b,c),a=a.sibling;null!==a;)Qi(a,b,c),a=a.sibling}\nfunction Ri(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Ri(a,b,c),a=a.sibling;null!==a;)Ri(a,b,c),a=a.sibling}\nfunction Mi(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(u(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag){a:for(var h=a,k=d,l=c,m=k;;)if(Ki(h,m,l),null!==m.child&&4!==m.tag)m.child.return=m,m=m.child;else{if(m===k)break a;for(;null===m.sibling;){if(null===m.return||m.return===k)break a;m=m.return}m.sibling.return=m.return;m=m.sibling}g?(h=\nf,k=d.stateNode,8===h.nodeType?h.parentNode.removeChild(k):h.removeChild(k)):f.removeChild(d.stateNode)}else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ki(a,d,c),null!==d.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction Si(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:Hi(3,b);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps,e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[Nd]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&Bb(c,d);pd(a,e);b=pd(a,d);for(e=0;e<f.length;e+=2){var g=f[e],h=f[e+1];\"style\"===g?md(c,h):\"dangerouslySetInnerHTML\"===g?Qb(c,h):\"children\"===g?Rb(c,h):Xa(c,g,h,b)}switch(a){case \"input\":Cb(c,d);break;\ncase \"textarea\":Kb(c,d);break;case \"select\":b=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,a=d.value,null!=a?Hb(c,!!d.multiple,a,!1):b!==!!d.multiple&&(null!=d.defaultValue?Hb(c,!!d.multiple,d.defaultValue,!0):Hb(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}return;case 6:if(null===b.stateNode)throw Error(u(162));b.stateNode.nodeValue=b.memoizedProps;return;case 3:b=b.stateNode;b.hydrate&&(b.hydrate=!1,Vc(b.containerInfo));return;case 12:return;case 13:c=b;null===b.memoizedState?\nd=!1:(d=!0,c=b.child,Ti=$f());if(null!==c)a:for(a=c;;){if(5===a.tag)f=a.stateNode,d?(f=f.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(f=a.stateNode,e=a.memoizedProps.style,e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null,f.style.display=ld(\"display\",e));else if(6===a.tag)a.stateNode.nodeValue=d?\"\":a.memoizedProps;else if(13===a.tag&&null!==a.memoizedState&&null===a.memoizedState.dehydrated){f=a.child.sibling;f.return=a;a=\nf;continue}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===c)break;for(;null===a.sibling;){if(null===a.return||a.return===c)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}Ui(b);return;case 19:Ui(b);return;case 17:return}throw Error(u(163));}function Ui(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Bi);b.forEach(function(b){var d=Vi.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nvar Wi=\"function\"===typeof WeakMap?WeakMap:Map;function Xi(a,b,c){c=wg(c,null);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Yi||(Yi=!0,Zi=d);Ci(a,b)};return c}\nfunction $i(a,b,c){c=wg(c,null);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ci(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===aj?aj=new Set([this]):aj.add(this),Ci(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nvar bj=Math.ceil,cj=Wa.ReactCurrentDispatcher,dj=Wa.ReactCurrentOwner,V=0,ej=8,fj=16,gj=32,ti=0,hj=1,ij=2,ui=3,vi=4,jj=5,W=V,T=null,X=null,U=0,S=ti,kj=null,lj=1073741823,mj=1073741823,nj=null,wi=0,oj=!1,Ti=0,pj=500,Y=null,Yi=!1,Zi=null,aj=null,qj=!1,rj=null,sj=90,tj=null,uj=0,vj=null,wj=0;function Gg(){return(W&(fj|gj))!==V?1073741821-($f()/10|0):0!==wj?wj:wj=1073741821-($f()/10|0)}\nfunction Hg(a,b,c){b=b.mode;if(0===(b&2))return 1073741823;var d=ag();if(0===(b&4))return 99===d?1073741823:1073741822;if((W&fj)!==V)return U;if(null!==c)a=hg(a,c.timeoutMs|0||5E3,250);else switch(d){case 99:a=1073741823;break;case 98:a=hg(a,150,100);break;case 97:case 96:a=hg(a,5E3,250);break;case 95:a=2;break;default:throw Error(u(326));}null!==T&&a===U&&--a;return a}\nfunction Ig(a,b){if(50<uj)throw uj=0,vj=null,Error(u(185));a=xj(a,b);if(null!==a){var c=ag();1073741823===b?(W&ej)!==V&&(W&(fj|gj))===V?yj(a):(Z(a),W===V&&gg()):Z(a);(W&4)===V||98!==c&&99!==c||(null===tj?tj=new Map([[a,b]]):(c=tj.get(a),(void 0===c||c>b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);var d=a.return,e=null;if(null===d&&3===a.tag)e=a.stateNode;else for(;null!==d;){c=d.alternate;d.childExpirationTime<b&&(d.childExpirationTime=b);null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);if(null===d.return&&3===d.tag){e=d.stateNode;break}d=d.return}null!==e&&(T===e&&(Bg(b),S===vi&&xi(e,U)),yi(e,b));return e}\nfunction zj(a){var b=a.lastExpiredTime;if(0!==b)return b;b=a.firstPendingTime;if(!Aj(a,b))return b;var c=a.lastPingedTime;a=a.nextKnownPendingLevel;a=c>a?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2<c?2:c);break;case ui:xi(a,c);d=a.lastSuspendedTime;\nc===d&&(a.nextKnownPendingLevel=Ij(e));if(1073741823===lj&&(e=Ti+pj-$f(),10<e)){if(oj){var f=a.lastPingedTime;if(0===f||f>=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c<d&&(d=c));if(10<d){a.timeoutHandle=Hd(Jj.bind(null,a),d);break}Jj(a);break;case jj:if(1073741823!==lj&&null!==nj){f=lj;var g=nj;d=g.busyMinDurationMs|0;0>=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10<d){xi(a,c);a.timeoutHandle=\nHd(Jj.bind(null,a),d);break}}Jj(a);break;default:throw Error(u(329));}Z(a);if(a.callbackNode===b)return Bj.bind(null,a)}}return null}\nfunction yj(a){var b=a.lastExpiredTime;b=0!==b?b:1073741823;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&b===U||Ej(a,b);if(null!==X){var c=W;W|=fj;var d=Fj();do try{Kj();break}catch(e){Hj(a,e)}while(1);ng();W=c;cj.current=d;if(S===hj)throw c=kj,Ej(a,b),xi(a,b),Z(a),c;if(null!==X)throw Error(u(261));a.finishedWork=a.current.alternate;a.finishedExpirationTime=b;T=null;Jj(a);Z(a)}return null}function Lj(){if(null!==tj){var a=tj;tj=null;a.forEach(function(a,c){Cj(c,a);Z(c)});gg()}}\nfunction Mj(a,b){var c=W;W|=1;try{return a(b)}finally{W=c,W===V&&gg()}}function Nj(a,b){var c=W;W&=-2;W|=ej;try{return a(b)}finally{W=c,W===V&&gg()}}\nfunction Ej(a,b){a.finishedWork=null;a.finishedExpirationTime=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Id(c));if(null!==X)for(c=X.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&Df();break;case 3:eh();H(K);H(J);break;case 5:gh(d);break;case 4:eh();break;case 13:H(M);break;case 19:H(M);break;case 10:og(d)}c=c.return}T=a;X=Sg(a.current,null);U=b;S=ti;kj=null;mj=lj=1073741823;nj=null;wi=0;oj=!1}\nfunction Hj(a,b){do{try{ng();jh.current=sh;if(mh)for(var c=N.memoizedState;null!==c;){var d=c.queue;null!==d&&(d.pending=null);c=c.next}lh=0;P=O=N=null;mh=!1;if(null===X||null===X.return)return S=hj,kj=b,X=null;a:{var e=a,f=X.return,g=X,h=b;b=U;g.effectTag|=2048;g.firstEffect=g.lastEffect=null;if(null!==h&&\"object\"===typeof h&&\"function\"===typeof h.then){var k=h;if(0===(g.mode&2)){var l=g.alternate;l?(g.updateQueue=l.updateQueue,g.memoizedState=l.memoizedState,g.expirationTime=l.expirationTime):(g.updateQueue=\nnull,g.memoizedState=null)}var m=0!==(M.current&1),p=f;do{var x;if(x=13===p.tag){var z=p.memoizedState;if(null!==z)x=null!==z.dehydrated?!0:!1;else{var ca=p.memoizedProps;x=void 0===ca.fallback?!1:!0!==ca.unstable_avoidThisFallback?!0:m?!1:!0}}if(x){var D=p.updateQueue;if(null===D){var t=new Set;t.add(k);p.updateQueue=t}else D.add(k);if(0===(p.mode&2)){p.effectTag|=64;g.effectTag&=-2981;if(1===g.tag)if(null===g.alternate)g.tag=17;else{var y=wg(1073741823,null);y.tag=2;xg(g,y)}g.expirationTime=1073741823;\nbreak a}h=void 0;g=b;var A=e.pingCache;null===A?(A=e.pingCache=new Wi,h=new Set,A.set(k,h)):(h=A.get(k),void 0===h&&(h=new Set,A.set(k,h)));if(!h.has(g)){h.add(g);var q=Oj.bind(null,e,k,g);k.then(q,q)}p.effectTag|=4096;p.expirationTime=b;break a}p=p.return}while(null!==p);h=Error((pb(g.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){a<lj&&2<a&&(lj=a);null!==b&&a<mj&&2<a&&(mj=a,nj=b)}function Bg(a){a>wi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1<X.effectTag&&(null!==\na.lastEffect?a.lastEffect.nextEffect=X:a.firstEffect=X,a.lastEffect=X))}else{b=zi(X);if(null!==b)return b.effectTag&=2047,b;null!==a&&(a.firstEffect=a.lastEffect=null,a.effectTag|=2048)}b=X.sibling;if(null!==b)return b;X=a}while(null!==X);S===ti&&(S=jj);return null}function Ij(a){var b=a.expirationTime;a=a.childExpirationTime;return b>a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1<c.effectTag?null!==c.lastEffect?(c.lastEffect.nextEffect=c,e=c.firstEffect):e=c:e=c.firstEffect;if(null!==e){var f=W;W|=gj;dj.current=null;Dd=fd;var g=xd();if(yd(g)){if(\"selectionStart\"in g)var h={start:g.selectionStart,end:g.selectionEnd};else a:{h=(h=g.ownerDocument)&&h.defaultView||window;var k=h.getSelection&&h.getSelection();if(k&&0!==k.rangeCount){h=k.anchorNode;var l=k.anchorOffset,\nm=k.focusNode;k=k.focusOffset;try{h.nodeType,m.nodeType}catch(wb){h=null;break a}var p=0,x=-1,z=-1,ca=0,D=0,t=g,y=null;b:for(;;){for(var A;;){t!==h||0!==l&&3!==t.nodeType||(x=p+l);t!==m||0!==k&&3!==t.nodeType||(z=p+k);3===t.nodeType&&(p+=t.nodeValue.length);if(null===(A=t.firstChild))break;y=t;t=A}for(;;){if(t===g)break b;y===h&&++ca===l&&(x=p);y===m&&++D===k&&(z=p);if(null!==(A=t.nextSibling))break;t=y;y=t.parentNode}t=A}h=-1===x||-1===z?null:{start:x,end:z}}else h=null}h=h||{start:0,end:0}}else h=\nnull;Ed={activeElementDetached:null,focusedElem:g,selectionRange:h};fd=!1;Y=e;do try{Tj()}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=e;do try{for(g=a,h=b;null!==Y;){var q=Y.effectTag;q&16&&Rb(Y.stateNode,\"\");if(q&128){var B=Y.alternate;if(null!==B){var w=B.ref;null!==w&&(\"function\"===typeof w?w(null):w.current=null)}}switch(q&1038){case 2:Pi(Y);Y.effectTag&=-3;break;case 6:Pi(Y);Y.effectTag&=-3;Si(Y.alternate,Y);break;case 1024:Y.effectTag&=-1025;break;case 1028:Y.effectTag&=\n-1025;Si(Y.alternate,Y);break;case 4:Si(Y.alternate,Y);break;case 8:l=Y,Mi(g,l,h),Ni(l)}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);w=Ed;B=xd();q=w.focusedElem;h=w.selectionRange;if(B!==q&&q&&q.ownerDocument&&wd(q.ownerDocument.documentElement,q)){null!==h&&yd(q)&&(B=h.start,w=h.end,void 0===w&&(w=B),\"selectionStart\"in q?(q.selectionStart=B,q.selectionEnd=Math.min(w,q.value.length)):(w=(B=q.ownerDocument||document)&&B.defaultView||window,w.getSelection&&\n(w=w.getSelection(),l=q.textContent.length,g=Math.min(h.start,l),h=void 0===h.end?g:Math.min(h.end,l),!w.extend&&g>h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q<B.length;q++)w=B[q],w.element.scrollLeft=w.left,w.element.scrollTop=w.top}fd=!!Dd;Ed=Dd=null;a.current=c;Y=e;do try{for(q=a;null!==Y;){var ub=Y.effectTag;ub&36&&Ji(q,Y.alternate,Y);if(ub&128){B=void 0;var vb=Y.ref;if(null!==vb){var Xc=Y.stateNode;switch(Y.tag){case 5:B=Xc;break;default:B=Xc}\"function\"===typeof vb?vb(B):vb.current=B}}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=\nnull;Vf();W=f}else a.current=c;if(qj)qj=!1,rj=a,sj=b;else for(Y=e;null!==Y;)b=Y.nextEffect,Y.nextEffect=null,Y=b;b=a.firstPendingTime;0===b&&(aj=null);1073741823===b?a===vj?uj++:(uj=0,vj=a):uj=0;\"function\"===typeof Uj&&Uj(c.stateNode,d);Z(a);if(Yi)throw Yi=!1,a=Zi,Zi=null,a;if((W&ej)!==V)return null;gg();return null}function Tj(){for(;null!==Y;){var a=Y.effectTag;0!==(a&256)&&Gi(Y.alternate,Y);0===(a&512)||qj||(qj=!0,dg(97,function(){Dj();return null}));Y=Y.nextEffect}}\nfunction Dj(){if(90!==sj){var a=97<sj?97:sj;sj=90;return cg(a,Vj)}}function Vj(){if(null===rj)return!1;var a=rj;rj=null;if((W&(fj|gj))!==V)throw Error(u(331));var b=W;W|=gj;for(a=a.current.firstEffect;null!==a;){try{var c=a;if(0!==(c.effectTag&512))switch(c.tag){case 0:case 11:case 15:case 22:Hi(5,c),Ii(5,c)}}catch(d){if(null===a)throw Error(u(330));Ei(a,d)}c=a.nextEffect;a.nextEffect=null;a=c}W=b;gg();return!0}\nfunction Wj(a,b,c){b=Ai(c,b);b=Xi(a,b,1073741823);xg(a,b);a=xj(a,1073741823);null!==a&&Z(a)}function Ei(a,b){if(3===a.tag)Wj(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){Wj(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===aj||!aj.has(d))){a=Ai(b,a);a=$i(c,a,1073741823);xg(c,a);c=xj(c,1073741823);null!==c&&Z(c);break}}c=c.return}}\nfunction Oj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);T===a&&U===c?S===vi||S===ui&&1073741823===lj&&$f()-Ti<pj?Ej(a,U):oj=!0:Aj(a,c)&&(b=a.lastPingedTime,0!==b&&b<c||(a.lastPingedTime=c,Z(a)))}function Vi(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=Gg(),b=Hg(b,a,null));a=xj(a,b);null!==a&&Z(a)}var Rj;\nRj=function(a,b,c){var d=b.expirationTime;if(null!==a){var e=b.pendingProps;if(a.memoizedProps!==e||K.current)rg=!0;else{if(d<c){rg=!1;switch(b.tag){case 3:hi(b);Xh();break;case 5:fh(b);if(b.mode&4&&1!==c&&e.hidden)return b.expirationTime=b.childExpirationTime=1,null;break;case 1:L(b.type)&&Gf(b);break;case 4:dh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;e=b.type._context;I(jg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){d=b.child.childExpirationTime;\nif(0!==d&&d>=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime<c&&(h.expirationTime=c);l=h.alternate;null!==l&&l.expirationTime<c&&(l.expirationTime=c);pg(h.return,c);k.expirationTime<c&&(k.expirationTime=c);break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=\ng}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,qg(b,c),e=sg(e,f.unstable_observedBits),d=d(e),b.effectTag|=1,R(a,b,d,c),b.child;case 14:return e=b.type,f=ig(e,b.pendingProps),f=ig(e.type,f),ai(a,b,e,f,d,c);case 15:return ci(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),b.tag=1,L(d)?(a=!0,Gf(b)):a=!1,qg(b,c),Lg(b,d,e),Ng(b,d,e,c),gi(null,\nb,d,!0,a,c);case 19:return mi(a,b,c)}throw Error(u(156,b.tag));};var Uj=null,Li=null;function Yj(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Uj=function(a){try{b.onCommitFiberRoot(c,a,void 0,64===(a.current.effectTag&64))}catch(e){}};Li=function(a){try{b.onCommitFiberUnmount(c,a)}catch(e){}}}catch(d){}return!0}\nfunction Zj(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function Sh(a,b,c,d){return new Zj(a,b,c,d)}\nfunction bi(a){a=a.prototype;return!(!a||!a.isReactComponent)}function Xj(a){if(\"function\"===typeof a)return bi(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===gb)return 11;if(a===jb)return 14}return 2}\nfunction Sg(a,b){var c=a.alternate;null===c?(c=Sh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{expirationTime:b.expirationTime,\nfirstContext:b.firstContext,responders:b.responders};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Ug(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bi(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ab:return Wg(c.children,e,f,b);case fb:g=8;e|=7;break;case bb:g=8;e|=1;break;case cb:return a=Sh(12,c,b,e|8),a.elementType=cb,a.type=cb,a.expirationTime=f,a;case hb:return a=Sh(13,c,b,e),a.type=hb,a.elementType=hb,a.expirationTime=f,a;case ib:return a=Sh(19,c,b,e),a.elementType=ib,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case db:g=\n10;break a;case eb:g=9;break a;case gb:g=11;break a;case jb:g=14;break a;case kb:g=16;d=null;break a;case lb:g=22;break a}throw Error(u(130,null==a?a:typeof a,\"\"));}b=Sh(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Wg(a,b,c,d){a=Sh(7,a,d,b);a.expirationTime=c;return a}function Tg(a,b,c){a=Sh(6,a,null,b);a.expirationTime=c;return a}\nfunction Vg(a,b,c){b=Sh(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction ak(a,b,c){this.tag=b;this.current=null;this.containerInfo=a;this.pingCache=this.pendingChildren=null;this.finishedExpirationTime=0;this.finishedWork=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=90;this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}\nfunction Aj(a,b){var c=a.firstSuspendedTime;a=a.lastSuspendedTime;return 0!==c&&c>=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;c<b&&(a.firstSuspendedTime=b);if(d>b||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime<b&&(a.retryTime=b)}function ek(a,b){dk(a,b);(a=a.alternate)&&dk(a,b)}\nfunction fk(a,b,c){c=null!=c&&!0===c.hydrate;var d=new ak(a,b,c),e=Sh(3,null,null,2===b?7:1===b?3:0);d.current=e;e.stateNode=d;ug(e);a[Od]=d.current;c&&0!==b&&Jc(a,9===a.nodeType?a:a.ownerDocument);this._internalRoot=d}fk.prototype.render=function(a){bk(a,this._internalRoot,null,null)};fk.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;bk(null,a,null,function(){b[Od]=null})};\nfunction gk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function hk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new fk(a,0,b?{hydrate:!0}:void 0)}\nfunction ik(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if(\"function\"===typeof e){var h=e;e=function(){var a=ck(g);h.call(a)}}bk(b,g,a,e)}else{f=c._reactRootContainer=hk(c,d);g=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=ck(g);k.call(a)}}Nj(function(){bk(b,g,a,e)})}return ck(g)}function jk(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:$a,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nwc=function(a){if(13===a.tag){var b=hg(Gg(),150,100);Ig(a,b);ek(a,b)}};xc=function(a){13===a.tag&&(Ig(a,3),ek(a,3))};yc=function(a){if(13===a.tag){var b=Gg();b=Hg(b,a,null);Ig(a,b);ek(a,b)}};\nza=function(a,b,c){switch(b){case \"input\":Cb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Qd(d);if(!e)throw Error(u(90));yb(d);Cb(d,e)}}}break;case \"textarea\":Kb(a,c);break;case \"select\":b=c.value,null!=b&&Hb(a,!!c.multiple,b,!1)}};Fa=Mj;\nGa=function(a,b,c,d,e){var f=W;W|=4;try{return cg(98,a.bind(null,b,c,d,e))}finally{W=f,W===V&&gg()}};Ha=function(){(W&(1|fj|gj))===V&&(Lj(),Dj())};Ia=function(a,b){var c=W;W|=2;try{return a(b)}finally{W=c,W===V&&gg()}};function kk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!gk(b))throw Error(u(200));return jk(a,b,null,c)}var lk={Events:[Nc,Pd,Qd,xa,ta,Xd,function(a){jc(a,Wd)},Da,Ea,id,mc,Dj,{current:!1}]};\n(function(a){var b=a.findFiberByHostInstance;return Yj(n({},a,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Wa.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=hc(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))})({findFiberByHostInstance:tc,bundleType:0,version:\"16.13.1\",\nrendererPackageName:\"react-dom\"});exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=lk;exports.createPortal=kk;exports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;if(void 0===b){if(\"function\"===typeof a.render)throw Error(u(188));throw Error(u(268,Object.keys(a)));}a=hc(b);a=null===a?null:a.stateNode;return a};\nexports.flushSync=function(a,b){if((W&(fj|gj))!==V)throw Error(u(187));var c=W;W|=1;try{return cg(99,a.bind(null,b))}finally{W=c,gg()}};exports.hydrate=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!0,c)};exports.render=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!1,c)};\nexports.unmountComponentAtNode=function(a){if(!gk(a))throw Error(u(40));return a._reactRootContainer?(Nj(function(){ik(null,null,a,!1,function(){a._reactRootContainer=null;a[Od]=null})}),!0):!1};exports.unstable_batchedUpdates=Mj;exports.unstable_createPortal=function(a,b){return kk(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!gk(c))throw Error(u(200));if(null==a||void 0===a._reactInternalFiber)throw Error(u(38));return ik(a,b,c,!1,d)};exports.version=\"16.13.1\";\n\n},{\"object-assign\":66,\"react\":76,\"scheduler\":83}],73:[function(require,module,exports){\n(function (process){\n'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n\n}).call(this,require('_process'))\n},{\"./cjs/react-dom.development.js\":71,\"./cjs/react-dom.production.min.js\":72,\"_process\":67}],74:[function(require,module,exports){\n(function (process){\n/** @license React v16.13.1\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar _assign = require('object-assign');\nvar checkPropTypes = require('prop-types/checkPropTypes');\n\nvar ReactVersion = '16.13.1';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\n/**\n * Keeps track of the current batch's configuration such as how long an update\n * should suspend for if it needs to.\n */\nvar ReactCurrentBatchConfig = {\n suspense: null\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n var sourceInfo = '';\n\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n\n if (match) {\n var pathBeforeSlash = match[1];\n\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n}\n\nvar Resolved = 1;\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type.render);\n\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n\n break;\n }\n }\n }\n\n return null;\n}\n\nvar ReactDebugCurrentFrame = {};\nvar currentlyValidatingElement = null;\nfunction setCurrentlyValidatingElement(element) {\n {\n currentlyValidatingElement = element;\n }\n}\n\n{\n // Stack implementation injected by the current renderer.\n ReactDebugCurrentFrame.getCurrentStack = null;\n\n ReactDebugCurrentFrame.getStackAddendum = function () {\n var stack = ''; // Add an extra top frame while an element is being validated\n\n if (currentlyValidatingElement) {\n var name = getComponentName(currentlyValidatingElement.type);\n var owner = currentlyValidatingElement._owner;\n stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\n } // Delegate to the injected renderer-specific implementation\n\n\n var impl = ReactDebugCurrentFrame.getCurrentStack;\n\n if (impl) {\n stack += impl() || '';\n }\n\n return stack;\n };\n}\n\n/**\n * Used by act() to track whether you're inside an act() scope.\n */\nvar IsSomeRendererActing = {\n current: false\n};\n\nvar ReactSharedInternals = {\n ReactCurrentDispatcher: ReactCurrentDispatcher,\n ReactCurrentBatchConfig: ReactCurrentBatchConfig,\n ReactCurrentOwner: ReactCurrentOwner,\n IsSomeRendererActing: IsSomeRendererActing,\n // Used by renderers to avoid bundling object-assign twice in UMD bundles:\n assign: _assign\n};\n\n{\n _assign(ReactSharedInternals, {\n // These should not be included in production.\n ReactDebugCurrentFrame: ReactDebugCurrentFrame,\n // Shim for React DOM 16.0.0 which still destructured (but not used) this.\n // TODO: remove in React 17.0.\n ReactComponentTreeHook: {}\n });\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n}\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n in') === 0;\n\n if (!hasExistingStack) {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n {\n var _constructor = publicInstance.constructor;\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n var warningKey = componentName + \".\" + callerName;\n\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n return;\n }\n\n error(\"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n }\n}\n/**\n * This is the abstract API for an update queue.\n */\n\n\nvar ReactNoopUpdateQueue = {\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} Name of the calling function in the public API.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nvar emptyObject = {};\n\n{\n Object.freeze(emptyObject);\n}\n/**\n * Base class helpers for the updating state of a component.\n */\n\n\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the\n // renderer.\n\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\n\nComponent.prototype.setState = function (partialState, callback) {\n if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) {\n {\n throw Error( \"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\" );\n }\n }\n\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\n\n\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n\n\n{\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n\n var defineDeprecationWarning = function (methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n\n return undefined;\n }\n });\n };\n\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nfunction ComponentDummy() {}\n\nComponentDummy.prototype = Component.prototype;\n/**\n * Convenience component with default shallow equality check for sCU.\n */\n\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.\n\n_assign(pureComponentPrototype, Component.prototype);\n\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n var refObject = {\n current: null\n };\n\n {\n Object.seal(refObject);\n }\n\n return refObject;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {\n var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\n\nfunction createElement(type, config, children) {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n\n {\n warnIfStringRefCannotBeAutoConverted(config);\n }\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n\n props.children = childArray;\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n {\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n return newElement;\n}\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\n\nfunction cloneElement(element, config, children) {\n if (!!(element === null || element === undefined)) {\n {\n throw Error( \"React.cloneElement(...): The argument must be a React element, but you passed \" + element + \".\" );\n }\n }\n\n var propName; // Original props are copied\n\n var props = _assign({}, element.props); // Reserved names are extracted\n\n\n var key = element.key;\n var ref = element.ref; // Self is preserved since the owner is preserved.\n\n var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n\n var source = element._source; // Owner will be preserved, unless ref is overridden\n\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n } // Remaining properties override existing props\n\n\n var defaultProps;\n\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n return '$' + escapedString;\n}\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\n\nvar didWarnAboutMaps = false;\nvar userProvidedKeyEscapeRegex = /\\/+/g;\n\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\nvar POOL_SIZE = 10;\nvar traverseContextPool = [];\n\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\n if (traverseContextPool.length) {\n var traverseContext = traverseContextPool.pop();\n traverseContext.result = mapResult;\n traverseContext.keyPrefix = keyPrefix;\n traverseContext.func = mapFunction;\n traverseContext.context = mapContext;\n traverseContext.count = 0;\n return traverseContext;\n } else {\n return {\n result: mapResult,\n keyPrefix: keyPrefix,\n func: mapFunction,\n context: mapContext,\n count: 0\n };\n }\n}\n\nfunction releaseTraverseContext(traverseContext) {\n traverseContext.result = null;\n traverseContext.keyPrefix = null;\n traverseContext.func = null;\n traverseContext.context = null;\n traverseContext.count = 0;\n\n if (traverseContextPool.length < POOL_SIZE) {\n traverseContextPool.push(traverseContext);\n }\n}\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\n\n\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n var invokeCallback = false;\n\n if (children === null) {\n invokeCallback = true;\n } else {\n switch (type) {\n case 'string':\n case 'number':\n invokeCallback = true;\n break;\n\n case 'object':\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = true;\n }\n\n }\n }\n\n if (invokeCallback) {\n callback(traverseContext, children, // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n\n if (typeof iteratorFn === 'function') {\n\n {\n // Warn about using Maps as children\n if (iteratorFn === children.entries) {\n if (!didWarnAboutMaps) {\n warn('Using Maps as children is deprecated and will be removed in ' + 'a future major release. Consider converting children to ' + 'an array of keyed ReactElements instead.');\n }\n\n didWarnAboutMaps = true;\n }\n }\n\n var iterator = iteratorFn.call(children);\n var step;\n var ii = 0;\n\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else if (type === 'object') {\n var addendum = '';\n\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\n }\n\n var childrenString = '' + children;\n\n {\n {\n throw Error( \"Objects are not valid as a React child (found: \" + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + \").\" + addendum );\n }\n }\n }\n }\n\n return subtreeCount;\n}\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\n\n\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\n\n\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (typeof component === 'object' && component !== null && component.key != null) {\n // Explicit key\n return escape(component.key);\n } // Implicit key determined by the index in the set\n\n\n return index.toString(36);\n}\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func,\n context = bookKeeping.context;\n func.call(context, child, bookKeeping.count++);\n}\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\n\n\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n\n var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result,\n keyPrefix = bookKeeping.keyPrefix,\n func = bookKeeping.func,\n context = bookKeeping.context;\n var mappedChild = func.call(context, child, bookKeeping.count++);\n\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\n return c;\n });\n } else if (mappedChild != null) {\n if (isValidElement(mappedChild)) {\n mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n }\n\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n\n var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\n\n\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\n\n\nfunction countChildren(children) {\n return traverseAllChildren(children, function () {\n return null;\n }, null);\n}\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\n\n\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\n return child;\n });\n return result;\n}\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\n\n\nfunction onlyChild(children) {\n if (!isValidElement(children)) {\n {\n throw Error( \"React.Children.only expected to receive a single React element child.\" );\n }\n }\n\n return children;\n}\n\nfunction createContext(defaultValue, calculateChangedBits) {\n if (calculateChangedBits === undefined) {\n calculateChangedBits = null;\n } else {\n {\n if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {\n error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);\n }\n }\n }\n\n var context = {\n $$typeof: REACT_CONTEXT_TYPE,\n _calculateChangedBits: calculateChangedBits,\n // As a workaround to support multiple concurrent renderers, we categorize\n // some renderers as primary and others as secondary. We only expect\n // there to be two concurrent renderers at most: React Native (primary) and\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\n // Secondary renderers store their context values on separate fields.\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n // Used to track how many concurrent renderers this context currently\n // supports within in a single renderer. Such as parallel server rendering.\n _threadCount: 0,\n // These are circular\n Provider: null,\n Consumer: null\n };\n context.Provider = {\n $$typeof: REACT_PROVIDER_TYPE,\n _context: context\n };\n var hasWarnedAboutUsingNestedContextConsumers = false;\n var hasWarnedAboutUsingConsumerProvider = false;\n\n {\n // A separate object, but proxies back to the original context object for\n // backwards compatibility. It has a different $$typeof, so we can properly\n // warn for the incorrect usage of Context as a Consumer.\n var Consumer = {\n $$typeof: REACT_CONTEXT_TYPE,\n _context: context,\n _calculateChangedBits: context._calculateChangedBits\n }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n\n Object.defineProperties(Consumer, {\n Provider: {\n get: function () {\n if (!hasWarnedAboutUsingConsumerProvider) {\n hasWarnedAboutUsingConsumerProvider = true;\n\n error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n }\n\n return context.Provider;\n },\n set: function (_Provider) {\n context.Provider = _Provider;\n }\n },\n _currentValue: {\n get: function () {\n return context._currentValue;\n },\n set: function (_currentValue) {\n context._currentValue = _currentValue;\n }\n },\n _currentValue2: {\n get: function () {\n return context._currentValue2;\n },\n set: function (_currentValue2) {\n context._currentValue2 = _currentValue2;\n }\n },\n _threadCount: {\n get: function () {\n return context._threadCount;\n },\n set: function (_threadCount) {\n context._threadCount = _threadCount;\n }\n },\n Consumer: {\n get: function () {\n if (!hasWarnedAboutUsingNestedContextConsumers) {\n hasWarnedAboutUsingNestedContextConsumers = true;\n\n error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n\n return context.Consumer;\n }\n }\n }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n\n context.Consumer = Consumer;\n }\n\n {\n context._currentRenderer = null;\n context._currentRenderer2 = null;\n }\n\n return context;\n}\n\nfunction lazy(ctor) {\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _ctor: ctor,\n // React uses these fields to store the result.\n _status: -1,\n _result: null\n };\n\n {\n // In production, this would just set it on the object.\n var defaultProps;\n var propTypes;\n Object.defineProperties(lazyType, {\n defaultProps: {\n configurable: true,\n get: function () {\n return defaultProps;\n },\n set: function (newDefaultProps) {\n error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n defaultProps = newDefaultProps; // Match production behavior more closely:\n\n Object.defineProperty(lazyType, 'defaultProps', {\n enumerable: true\n });\n }\n },\n propTypes: {\n configurable: true,\n get: function () {\n return propTypes;\n },\n set: function (newPropTypes) {\n error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n propTypes = newPropTypes; // Match production behavior more closely:\n\n Object.defineProperty(lazyType, 'propTypes', {\n enumerable: true\n });\n }\n }\n });\n }\n\n return lazyType;\n}\n\nfunction forwardRef(render) {\n {\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n } else if (typeof render !== 'function') {\n error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n } else {\n if (render.length !== 0 && render.length !== 2) {\n error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');\n }\n }\n\n if (render != null) {\n if (render.defaultProps != null || render.propTypes != null) {\n error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');\n }\n }\n }\n\n return {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: render\n };\n}\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction memo(type, compare) {\n {\n if (!isValidElementType(type)) {\n error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n }\n }\n\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: compare === undefined ? null : compare\n };\n}\n\nfunction resolveDispatcher() {\n var dispatcher = ReactCurrentDispatcher.current;\n\n if (!(dispatcher !== null)) {\n {\n throw Error( \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.\" );\n }\n }\n\n return dispatcher;\n}\n\nfunction useContext(Context, unstable_observedBits) {\n var dispatcher = resolveDispatcher();\n\n {\n if (unstable_observedBits !== undefined) {\n error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\\n\\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '');\n } // TODO: add a more generic warning for invalid values.\n\n\n if (Context._context !== undefined) {\n var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs\n // and nobody should be using this in existing code.\n\n if (realContext.Consumer === Context) {\n error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n } else if (realContext.Provider === Context) {\n error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n }\n }\n }\n\n return dispatcher.useContext(Context, unstable_observedBits);\n}\nfunction useState(initialState) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useState(initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useReducer(reducer, initialArg, init);\n}\nfunction useRef(initialValue) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useRef(initialValue);\n}\nfunction useEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useEffect(create, deps);\n}\nfunction useLayoutEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useLayoutEffect(create, deps);\n}\nfunction useCallback(callback, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useCallback(callback, deps);\n}\nfunction useMemo(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useMemo(create, deps);\n}\nfunction useImperativeHandle(ref, create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useImperativeHandle(ref, create, deps);\n}\nfunction useDebugValue(value, formatterFn) {\n {\n var dispatcher = resolveDispatcher();\n return dispatcher.useDebugValue(value, formatterFn);\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = getComponentName(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n}\n\nfunction getSourceInfoErrorAddendumForProps(elementProps) {\n if (elementProps !== null && elementProps !== undefined) {\n return getSourceInfoErrorAddendum(elementProps.__source);\n }\n\n return '';\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n {\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);\n }\n\n setCurrentlyValidatingElement(null);\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var name = getComponentName(type);\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n setCurrentlyValidatingElement(element);\n checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\n setCurrentlyValidatingElement(null);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true;\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n setCurrentlyValidatingElement(fragment);\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n break;\n }\n }\n\n if (fragment.ref !== null) {\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n }\n\n setCurrentlyValidatingElement(null);\n }\n}\nfunction createElementWithValidation(type, props, children) {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendumForProps(props);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n {\n error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n }\n\n var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n}\nvar didWarnAboutDeprecatedCreateFactory = false;\nfunction createFactoryWithValidation(type) {\n var validatedFactory = createElementWithValidation.bind(null, type);\n validatedFactory.type = type;\n\n {\n if (!didWarnAboutDeprecatedCreateFactory) {\n didWarnAboutDeprecatedCreateFactory = true;\n\n warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');\n } // Legacy hook: remove it\n\n\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n\n return validatedFactory;\n}\nfunction cloneElementWithValidation(element, props, children) {\n var newElement = cloneElement.apply(this, arguments);\n\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n\n validatePropTypes(newElement);\n return newElement;\n}\n\n{\n\n try {\n var frozenObject = Object.freeze({});\n var testMap = new Map([[frozenObject, null]]);\n var testSet = new Set([frozenObject]); // This is necessary for Rollup to not consider these unused.\n // https://github.com/rollup/rollup/issues/1771\n // TODO: we can remove these if Rollup fixes the bug.\n\n testMap.set(0, 0);\n testSet.add(0);\n } catch (e) {\n }\n}\n\nvar createElement$1 = createElementWithValidation ;\nvar cloneElement$1 = cloneElementWithValidation ;\nvar createFactory = createFactoryWithValidation ;\nvar Children = {\n map: mapChildren,\n forEach: forEachChildren,\n count: countChildren,\n toArray: toArray,\n only: onlyChild\n};\n\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;\nexports.cloneElement = cloneElement$1;\nexports.createContext = createContext;\nexports.createElement = createElement$1;\nexports.createFactory = createFactory;\nexports.createRef = createRef;\nexports.forwardRef = forwardRef;\nexports.isValidElement = isValidElement;\nexports.lazy = lazy;\nexports.memo = memo;\nexports.useCallback = useCallback;\nexports.useContext = useContext;\nexports.useDebugValue = useDebugValue;\nexports.useEffect = useEffect;\nexports.useImperativeHandle = useImperativeHandle;\nexports.useLayoutEffect = useLayoutEffect;\nexports.useMemo = useMemo;\nexports.useReducer = useReducer;\nexports.useRef = useRef;\nexports.useState = useState;\nexports.version = ReactVersion;\n })();\n}\n\n}).call(this,require('_process'))\n},{\"_process\":67,\"object-assign\":66,\"prop-types/checkPropTypes\":69}],75:[function(require,module,exports){\n/** @license React v16.13.1\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar D={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E={};function F(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}F.prototype.isReactComponent={};F.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(C(85));this.updater.enqueueSetState(this,a,b,\"setState\")};F.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction G(){}G.prototype=F.prototype;function H(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}var I=H.prototype=new G;I.constructor=H;l(I,F.prototype);I.isPureReactComponent=!0;var J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,c){var e,d={},g=null,k=null;if(null!=b)for(e in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)K.call(b,e)&&!L.hasOwnProperty(e)&&(d[e]=b[e]);var f=arguments.length-2;if(1===f)d.children=c;else if(1<f){for(var h=Array(f),m=0;m<f;m++)h[m]=arguments[m+2];d.children=h}if(a&&a.defaultProps)for(e in f=a.defaultProps,f)void 0===d[e]&&(d[e]=f[e]);return{$$typeof:p,type:a,key:g,ref:k,props:d,_owner:J.current}}\nfunction N(a,b){return{$$typeof:p,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===p}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g,Q=[];function R(a,b,c,e){if(Q.length){var d=Q.pop();d.result=a;d.keyPrefix=b;d.func=c;d.context=e;d.count=0;return d}return{result:a,keyPrefix:b,func:c,context:e,count:0}}\nfunction S(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>Q.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+U(d,k);g+=T(d,f,c,e)}else if(null===a||\"object\"!==typeof a?f=null:(f=B&&a[B]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=f.call(a),k=\n0;!(d=a.next()).done;)d=d.value,f=b+U(d,k++),g+=T(d,f,c,e);else if(\"object\"===d)throw c=\"\"+a,Error(C(31,\"[object Object]\"===c?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":c,\"\"));return g}function V(a,b,c){return null==a?0:T(a,\"\",b,c)}function U(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function W(a,b){a.func.call(a.context,b,a.count++)}\nfunction aa(a,b,c){var e=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?X(a,e,c,function(a){return a}):null!=a&&(O(a)&&(a=N(a,d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(P,\"$&/\")+\"/\")+c)),e.push(a))}function X(a,b,c,e,d){var g=\"\";null!=c&&(g=(\"\"+c).replace(P,\"$&/\")+\"/\");b=R(b,g,e,d);V(a,aa,b);S(b)}var Y={current:null};function Z(){var a=Y.current;if(null===a)throw Error(C(321));return a}\nvar ba={ReactCurrentDispatcher:Y,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:J,IsSomeRendererActing:{current:!1},assign:l};exports.Children={map:function(a,b,c){if(null==a)return a;var e=[];X(a,e,null,b,c);return e},forEach:function(a,b,c){if(null==a)return a;b=R(null,null,b,c);V(a,W,b);S(b)},count:function(a){return V(a,function(){return null},null)},toArray:function(a){var b=[];X(a,b,null,function(a){return a});return b},only:function(a){if(!O(a))throw Error(C(143));return a}};\nexports.Component=F;exports.Fragment=r;exports.Profiler=u;exports.PureComponent=H;exports.StrictMode=t;exports.Suspense=y;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ba;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(C(267,a));var e=l({},a.props),d=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=J.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)K.call(b,h)&&!L.hasOwnProperty(h)&&(e[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)e.children=c;else if(1<h){f=Array(h);for(var m=0;m<h;m++)f[m]=arguments[m+2];e.children=f}return{$$typeof:p,type:a.type,\nkey:d,ref:g,props:e,_owner:k}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:w,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:v,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:x,render:a}};exports.isValidElement=O;\nexports.lazy=function(a){return{$$typeof:A,_ctor:a,_status:-1,_result:null}};exports.memo=function(a,b){return{$$typeof:z,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return Z().useCallback(a,b)};exports.useContext=function(a,b){return Z().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return Z().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return Z().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return Z().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return Z().useMemo(a,b)};exports.useReducer=function(a,b,c){return Z().useReducer(a,b,c)};exports.useRef=function(a){return Z().useRef(a)};exports.useState=function(a){return Z().useState(a)};exports.version=\"16.13.1\";\n\n},{\"object-assign\":66}],76:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n\n}).call(this,require('_process'))\n},{\"./cjs/react.development.js\":74,\"./cjs/react.production.min.js\":75,\"_process\":67}],77:[function(require,module,exports){\n/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n\n},{}],78:[function(require,module,exports){\n/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n\n},{\"buffer\":8}],79:[function(require,module,exports){\n(function (process){\n/** @license React v0.19.1\n * scheduler-tracing.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar DEFAULT_THREAD_ID = 0; // Counters used to generate unique IDs.\n\nvar interactionIDCounter = 0;\nvar threadIDCounter = 0; // Set of currently traced interactions.\n// Interactions \"stack\"–\n// Meaning that newly traced interactions are appended to the previously active set.\n// When an interaction goes out of scope, the previous set (if any) is restored.\n\nexports.__interactionsRef = null; // Listener(s) to notify when interactions begin and end.\n\nexports.__subscriberRef = null;\n\n{\n exports.__interactionsRef = {\n current: new Set()\n };\n exports.__subscriberRef = {\n current: null\n };\n}\nfunction unstable_clear(callback) {\n\n var prevInteractions = exports.__interactionsRef.current;\n exports.__interactionsRef.current = new Set();\n\n try {\n return callback();\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n }\n}\nfunction unstable_getCurrent() {\n {\n return exports.__interactionsRef.current;\n }\n}\nfunction unstable_getThreadID() {\n return ++threadIDCounter;\n}\nfunction unstable_trace(name, timestamp, callback) {\n var threadID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_THREAD_ID;\n\n var interaction = {\n __count: 1,\n id: interactionIDCounter++,\n name: name,\n timestamp: timestamp\n };\n var prevInteractions = exports.__interactionsRef.current; // Traced interactions should stack/accumulate.\n // To do that, clone the current interactions.\n // The previous set will be restored upon completion.\n\n var interactions = new Set(prevInteractions);\n interactions.add(interaction);\n exports.__interactionsRef.current = interactions;\n var subscriber = exports.__subscriberRef.current;\n var returnValue;\n\n try {\n if (subscriber !== null) {\n subscriber.onInteractionTraced(interaction);\n }\n } finally {\n try {\n if (subscriber !== null) {\n subscriber.onWorkStarted(interactions, threadID);\n }\n } finally {\n try {\n returnValue = callback();\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkStopped(interactions, threadID);\n }\n } finally {\n interaction.__count--; // If no async work was scheduled for this interaction,\n // Notify subscribers that it's completed.\n\n if (subscriber !== null && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n }\n }\n }\n }\n\n return returnValue;\n}\nfunction unstable_wrap(callback) {\n var threadID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_THREAD_ID;\n\n var wrappedInteractions = exports.__interactionsRef.current;\n var subscriber = exports.__subscriberRef.current;\n\n if (subscriber !== null) {\n subscriber.onWorkScheduled(wrappedInteractions, threadID);\n } // Update the pending async work count for the current interactions.\n // Update after calling subscribers in case of error.\n\n\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count++;\n });\n var hasRun = false;\n\n function wrapped() {\n var prevInteractions = exports.__interactionsRef.current;\n exports.__interactionsRef.current = wrappedInteractions;\n subscriber = exports.__subscriberRef.current;\n\n try {\n var returnValue;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkStarted(wrappedInteractions, threadID);\n }\n } finally {\n try {\n returnValue = callback.apply(undefined, arguments);\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n\n if (subscriber !== null) {\n subscriber.onWorkStopped(wrappedInteractions, threadID);\n }\n }\n }\n\n return returnValue;\n } finally {\n if (!hasRun) {\n // We only expect a wrapped function to be executed once,\n // But in the event that it's executed more than once–\n // Only decrement the outstanding interaction counts once.\n hasRun = true; // Update pending async counts for all wrapped interactions.\n // If this was the last scheduled async work for any of them,\n // Mark them as completed.\n\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber !== null && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n });\n }\n }\n }\n\n wrapped.cancel = function cancel() {\n subscriber = exports.__subscriberRef.current;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkCanceled(wrappedInteractions, threadID);\n }\n } finally {\n // Update pending async counts for all wrapped interactions.\n // If this was the last scheduled async work for any of them,\n // Mark them as completed.\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n });\n }\n };\n\n return wrapped;\n}\n\nvar subscribers = null;\n\n{\n subscribers = new Set();\n}\n\nfunction unstable_subscribe(subscriber) {\n {\n subscribers.add(subscriber);\n\n if (subscribers.size === 1) {\n exports.__subscriberRef.current = {\n onInteractionScheduledWorkCompleted: onInteractionScheduledWorkCompleted,\n onInteractionTraced: onInteractionTraced,\n onWorkCanceled: onWorkCanceled,\n onWorkScheduled: onWorkScheduled,\n onWorkStarted: onWorkStarted,\n onWorkStopped: onWorkStopped\n };\n }\n }\n}\nfunction unstable_unsubscribe(subscriber) {\n {\n subscribers.delete(subscriber);\n\n if (subscribers.size === 0) {\n exports.__subscriberRef.current = null;\n }\n }\n}\n\nfunction onInteractionTraced(interaction) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onInteractionTraced(interaction);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onInteractionScheduledWorkCompleted(interaction) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkScheduled(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkScheduled(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkStarted(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkStarted(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkStopped(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkStopped(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkCanceled(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkCanceled(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nexports.unstable_clear = unstable_clear;\nexports.unstable_getCurrent = unstable_getCurrent;\nexports.unstable_getThreadID = unstable_getThreadID;\nexports.unstable_subscribe = unstable_subscribe;\nexports.unstable_trace = unstable_trace;\nexports.unstable_unsubscribe = unstable_unsubscribe;\nexports.unstable_wrap = unstable_wrap;\n })();\n}\n\n}).call(this,require('_process'))\n},{\"_process\":67}],80:[function(require,module,exports){\n/** @license React v0.19.1\n * scheduler-tracing.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=0;exports.__interactionsRef=null;exports.__subscriberRef=null;exports.unstable_clear=function(a){return a()};exports.unstable_getCurrent=function(){return null};exports.unstable_getThreadID=function(){return++b};exports.unstable_subscribe=function(){};exports.unstable_trace=function(a,d,c){return c()};exports.unstable_unsubscribe=function(){};exports.unstable_wrap=function(a){return a};\n\n},{}],81:[function(require,module,exports){\n(function (process){\n/** @license React v0.19.1\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar enableSchedulerDebugging = false;\nvar enableProfiling = true;\n\nvar requestHostCallback;\nvar requestHostTimeout;\nvar cancelHostTimeout;\nvar shouldYieldToHost;\nvar requestPaint;\n\nif ( // If Scheduler runs in a non-DOM environment, it falls back to a naive\n// implementation using setTimeout.\ntypeof window === 'undefined' || // Check if MessageChannel is supported, too.\ntypeof MessageChannel !== 'function') {\n // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore,\n // fallback to a naive implementation.\n var _callback = null;\n var _timeoutID = null;\n\n var _flushCallback = function () {\n if (_callback !== null) {\n try {\n var currentTime = exports.unstable_now();\n var hasRemainingTime = true;\n\n _callback(hasRemainingTime, currentTime);\n\n _callback = null;\n } catch (e) {\n setTimeout(_flushCallback, 0);\n throw e;\n }\n }\n };\n\n var initialTime = Date.now();\n\n exports.unstable_now = function () {\n return Date.now() - initialTime;\n };\n\n requestHostCallback = function (cb) {\n if (_callback !== null) {\n // Protect against re-entrancy.\n setTimeout(requestHostCallback, 0, cb);\n } else {\n _callback = cb;\n setTimeout(_flushCallback, 0);\n }\n };\n\n requestHostTimeout = function (cb, ms) {\n _timeoutID = setTimeout(cb, ms);\n };\n\n cancelHostTimeout = function () {\n clearTimeout(_timeoutID);\n };\n\n shouldYieldToHost = function () {\n return false;\n };\n\n requestPaint = exports.unstable_forceFrameRate = function () {};\n} else {\n // Capture local references to native APIs, in case a polyfill overrides them.\n var performance = window.performance;\n var _Date = window.Date;\n var _setTimeout = window.setTimeout;\n var _clearTimeout = window.clearTimeout;\n\n if (typeof console !== 'undefined') {\n // TODO: Scheduler no longer requires these methods to be polyfilled. But\n // maybe we want to continue warning if they don't exist, to preserve the\n // option to rely on it in the future?\n var requestAnimationFrame = window.requestAnimationFrame;\n var cancelAnimationFrame = window.cancelAnimationFrame; // TODO: Remove fb.me link\n\n if (typeof requestAnimationFrame !== 'function') {\n // Using console['error'] to evade Babel and ESLint\n console['error'](\"This browser doesn't support requestAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n\n if (typeof cancelAnimationFrame !== 'function') {\n // Using console['error'] to evade Babel and ESLint\n console['error'](\"This browser doesn't support cancelAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n }\n\n if (typeof performance === 'object' && typeof performance.now === 'function') {\n exports.unstable_now = function () {\n return performance.now();\n };\n } else {\n var _initialTime = _Date.now();\n\n exports.unstable_now = function () {\n return _Date.now() - _initialTime;\n };\n }\n\n var isMessageLoopRunning = false;\n var scheduledHostCallback = null;\n var taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n // thread, like user events. By default, it yields multiple times per frame.\n // It does not attempt to align with frame boundaries, since most tasks don't\n // need to be frame aligned; for those that do, use requestAnimationFrame.\n\n var yieldInterval = 5;\n var deadline = 0; // TODO: Make this configurable\n\n {\n // `isInputPending` is not available. Since we have no way of knowing if\n // there's pending input, always yield at the end of the frame.\n shouldYieldToHost = function () {\n return exports.unstable_now() >= deadline;\n }; // Since we yield every frame regardless, `requestPaint` has no effect.\n\n\n requestPaint = function () {};\n }\n\n exports.unstable_forceFrameRate = function (fps) {\n if (fps < 0 || fps > 125) {\n // Using console['error'] to evade Babel and ESLint\n console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing framerates higher than 125 fps is not unsupported');\n return;\n }\n\n if (fps > 0) {\n yieldInterval = Math.floor(1000 / fps);\n } else {\n // reset the framerate\n yieldInterval = 5;\n }\n };\n\n var performWorkUntilDeadline = function () {\n if (scheduledHostCallback !== null) {\n var currentTime = exports.unstable_now(); // Yield after `yieldInterval` ms, regardless of where we are in the vsync\n // cycle. This means there's always time remaining at the beginning of\n // the message event.\n\n deadline = currentTime + yieldInterval;\n var hasTimeRemaining = true;\n\n try {\n var hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);\n\n if (!hasMoreWork) {\n isMessageLoopRunning = false;\n scheduledHostCallback = null;\n } else {\n // If there's more work, schedule the next message event at the end\n // of the preceding one.\n port.postMessage(null);\n }\n } catch (error) {\n // If a scheduler task throws, exit the current browser task so the\n // error can be observed.\n port.postMessage(null);\n throw error;\n }\n } else {\n isMessageLoopRunning = false;\n } // Yielding to the browser will give it a chance to paint, so we can\n };\n\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n\n requestHostCallback = function (callback) {\n scheduledHostCallback = callback;\n\n if (!isMessageLoopRunning) {\n isMessageLoopRunning = true;\n port.postMessage(null);\n }\n };\n\n requestHostTimeout = function (callback, ms) {\n taskTimeoutID = _setTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n };\n\n cancelHostTimeout = function () {\n _clearTimeout(taskTimeoutID);\n\n taskTimeoutID = -1;\n };\n}\n\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n siftUp(heap, node, index);\n}\nfunction peek(heap) {\n var first = heap[0];\n return first === undefined ? null : first;\n}\nfunction pop(heap) {\n var first = heap[0];\n\n if (first !== undefined) {\n var last = heap.pop();\n\n if (last !== first) {\n heap[0] = last;\n siftDown(heap, last, 0);\n }\n\n return first;\n } else {\n return null;\n }\n}\n\nfunction siftUp(heap, node, i) {\n var index = i;\n\n while (true) {\n var parentIndex = index - 1 >>> 1;\n var parent = heap[parentIndex];\n\n if (parent !== undefined && compare(parent, node) > 0) {\n // The parent is larger. Swap positions.\n heap[parentIndex] = node;\n heap[index] = parent;\n index = parentIndex;\n } else {\n // The parent is smaller. Exit.\n return;\n }\n }\n}\n\nfunction siftDown(heap, node, i) {\n var index = i;\n var length = heap.length;\n\n while (index < length) {\n var leftIndex = (index + 1) * 2 - 1;\n var left = heap[leftIndex];\n var rightIndex = leftIndex + 1;\n var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n if (left !== undefined && compare(left, node) < 0) {\n if (right !== undefined && compare(right, left) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n heap[index] = left;\n heap[leftIndex] = node;\n index = leftIndex;\n }\n } else if (right !== undefined && compare(right, node) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n // Neither child is smaller. Exit.\n return;\n }\n }\n}\n\nfunction compare(a, b) {\n // Compare sort index first, then task id.\n var diff = a.sortIndex - b.sortIndex;\n return diff !== 0 ? diff : a.id - b.id;\n}\n\n// TODO: Use symbols?\nvar NoPriority = 0;\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\nvar runIdCounter = 0;\nvar mainThreadIdCounter = 0;\nvar profilingStateSize = 4;\nvar sharedProfilingBuffer = // $FlowFixMe Flow doesn't know about SharedArrayBuffer\ntypeof SharedArrayBuffer === 'function' ? new SharedArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : // $FlowFixMe Flow doesn't know about ArrayBuffer\ntypeof ArrayBuffer === 'function' ? new ArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : null // Don't crash the init path on IE9\n;\nvar profilingState = sharedProfilingBuffer !== null ? new Int32Array(sharedProfilingBuffer) : []; // We can't read this but it helps save bytes for null checks\n\nvar PRIORITY = 0;\nvar CURRENT_TASK_ID = 1;\nvar CURRENT_RUN_ID = 2;\nvar QUEUE_SIZE = 3;\n\n{\n profilingState[PRIORITY] = NoPriority; // This is maintained with a counter, because the size of the priority queue\n // array might include canceled tasks.\n\n profilingState[QUEUE_SIZE] = 0;\n profilingState[CURRENT_TASK_ID] = 0;\n} // Bytes per element is 4\n\n\nvar INITIAL_EVENT_LOG_SIZE = 131072;\nvar MAX_EVENT_LOG_SIZE = 524288; // Equivalent to 2 megabytes\n\nvar eventLogSize = 0;\nvar eventLogBuffer = null;\nvar eventLog = null;\nvar eventLogIndex = 0;\nvar TaskStartEvent = 1;\nvar TaskCompleteEvent = 2;\nvar TaskErrorEvent = 3;\nvar TaskCancelEvent = 4;\nvar TaskRunEvent = 5;\nvar TaskYieldEvent = 6;\nvar SchedulerSuspendEvent = 7;\nvar SchedulerResumeEvent = 8;\n\nfunction logEvent(entries) {\n if (eventLog !== null) {\n var offset = eventLogIndex;\n eventLogIndex += entries.length;\n\n if (eventLogIndex + 1 > eventLogSize) {\n eventLogSize *= 2;\n\n if (eventLogSize > MAX_EVENT_LOG_SIZE) {\n // Using console['error'] to evade Babel and ESLint\n console['error'](\"Scheduler Profiling: Event log exceeded maximum size. Don't \" + 'forget to call `stopLoggingProfilingEvents()`.');\n stopLoggingProfilingEvents();\n return;\n }\n\n var newEventLog = new Int32Array(eventLogSize * 4);\n newEventLog.set(eventLog);\n eventLogBuffer = newEventLog.buffer;\n eventLog = newEventLog;\n }\n\n eventLog.set(entries, offset);\n }\n}\n\nfunction startLoggingProfilingEvents() {\n eventLogSize = INITIAL_EVENT_LOG_SIZE;\n eventLogBuffer = new ArrayBuffer(eventLogSize * 4);\n eventLog = new Int32Array(eventLogBuffer);\n eventLogIndex = 0;\n}\nfunction stopLoggingProfilingEvents() {\n var buffer = eventLogBuffer;\n eventLogSize = 0;\n eventLogBuffer = null;\n eventLog = null;\n eventLogIndex = 0;\n return buffer;\n}\nfunction markTaskStart(task, ms) {\n {\n profilingState[QUEUE_SIZE]++;\n\n if (eventLog !== null) {\n // performance.now returns a float, representing milliseconds. When the\n // event is logged, it's coerced to an int. Convert to microseconds to\n // maintain extra degrees of precision.\n logEvent([TaskStartEvent, ms * 1000, task.id, task.priorityLevel]);\n }\n }\n}\nfunction markTaskCompleted(task, ms) {\n {\n profilingState[PRIORITY] = NoPriority;\n profilingState[CURRENT_TASK_ID] = 0;\n profilingState[QUEUE_SIZE]--;\n\n if (eventLog !== null) {\n logEvent([TaskCompleteEvent, ms * 1000, task.id]);\n }\n }\n}\nfunction markTaskCanceled(task, ms) {\n {\n profilingState[QUEUE_SIZE]--;\n\n if (eventLog !== null) {\n logEvent([TaskCancelEvent, ms * 1000, task.id]);\n }\n }\n}\nfunction markTaskErrored(task, ms) {\n {\n profilingState[PRIORITY] = NoPriority;\n profilingState[CURRENT_TASK_ID] = 0;\n profilingState[QUEUE_SIZE]--;\n\n if (eventLog !== null) {\n logEvent([TaskErrorEvent, ms * 1000, task.id]);\n }\n }\n}\nfunction markTaskRun(task, ms) {\n {\n runIdCounter++;\n profilingState[PRIORITY] = task.priorityLevel;\n profilingState[CURRENT_TASK_ID] = task.id;\n profilingState[CURRENT_RUN_ID] = runIdCounter;\n\n if (eventLog !== null) {\n logEvent([TaskRunEvent, ms * 1000, task.id, runIdCounter]);\n }\n }\n}\nfunction markTaskYield(task, ms) {\n {\n profilingState[PRIORITY] = NoPriority;\n profilingState[CURRENT_TASK_ID] = 0;\n profilingState[CURRENT_RUN_ID] = 0;\n\n if (eventLog !== null) {\n logEvent([TaskYieldEvent, ms * 1000, task.id, runIdCounter]);\n }\n }\n}\nfunction markSchedulerSuspended(ms) {\n {\n mainThreadIdCounter++;\n\n if (eventLog !== null) {\n logEvent([SchedulerSuspendEvent, ms * 1000, mainThreadIdCounter]);\n }\n }\n}\nfunction markSchedulerUnsuspended(ms) {\n {\n if (eventLog !== null) {\n logEvent([SchedulerResumeEvent, ms * 1000, mainThreadIdCounter]);\n }\n }\n}\n\n/* eslint-disable no-var */\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\n\nvar maxSigned31BitInt = 1073741823; // Times out immediately\n\nvar IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out\n\nvar USER_BLOCKING_PRIORITY = 250;\nvar NORMAL_PRIORITY_TIMEOUT = 5000;\nvar LOW_PRIORITY_TIMEOUT = 10000; // Never times out\n\nvar IDLE_PRIORITY = maxSigned31BitInt; // Tasks are stored on a min heap\n\nvar taskQueue = [];\nvar timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\nvar taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\nvar currentTask = null;\nvar currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrancy.\n\nvar isPerformingWork = false;\nvar isHostCallbackScheduled = false;\nvar isHostTimeoutScheduled = false;\n\nfunction advanceTimers(currentTime) {\n // Check for tasks that are no longer delayed and add them to the queue.\n var timer = peek(timerQueue);\n\n while (timer !== null) {\n if (timer.callback === null) {\n // Timer was cancelled.\n pop(timerQueue);\n } else if (timer.startTime <= currentTime) {\n // Timer fired. Transfer to the task queue.\n pop(timerQueue);\n timer.sortIndex = timer.expirationTime;\n push(taskQueue, timer);\n\n {\n markTaskStart(timer, currentTime);\n timer.isQueued = true;\n }\n } else {\n // Remaining timers are pending.\n return;\n }\n\n timer = peek(timerQueue);\n }\n}\n\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = false;\n advanceTimers(currentTime);\n\n if (!isHostCallbackScheduled) {\n if (peek(taskQueue) !== null) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n }\n }\n}\n\nfunction flushWork(hasTimeRemaining, initialTime) {\n {\n markSchedulerUnsuspended(initialTime);\n } // We'll need a host callback the next time work is scheduled.\n\n\n isHostCallbackScheduled = false;\n\n if (isHostTimeoutScheduled) {\n // We scheduled a timeout but it's no longer needed. Cancel it.\n isHostTimeoutScheduled = false;\n cancelHostTimeout();\n }\n\n isPerformingWork = true;\n var previousPriorityLevel = currentPriorityLevel;\n\n try {\n if (enableProfiling) {\n try {\n return workLoop(hasTimeRemaining, initialTime);\n } catch (error) {\n if (currentTask !== null) {\n var currentTime = exports.unstable_now();\n markTaskErrored(currentTask, currentTime);\n currentTask.isQueued = false;\n }\n\n throw error;\n }\n } else {\n // No catch in prod codepath.\n return workLoop(hasTimeRemaining, initialTime);\n }\n } finally {\n currentTask = null;\n currentPriorityLevel = previousPriorityLevel;\n isPerformingWork = false;\n\n {\n var _currentTime = exports.unstable_now();\n\n markSchedulerSuspended(_currentTime);\n }\n }\n}\n\nfunction workLoop(hasTimeRemaining, initialTime) {\n var currentTime = initialTime;\n advanceTimers(currentTime);\n currentTask = peek(taskQueue);\n\n while (currentTask !== null && !(enableSchedulerDebugging )) {\n if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n // This currentTask hasn't expired, and we've reached the deadline.\n break;\n }\n\n var callback = currentTask.callback;\n\n if (callback !== null) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n markTaskRun(currentTask, currentTime);\n var continuationCallback = callback(didUserCallbackTimeout);\n currentTime = exports.unstable_now();\n\n if (typeof continuationCallback === 'function') {\n currentTask.callback = continuationCallback;\n markTaskYield(currentTask, currentTime);\n } else {\n {\n markTaskCompleted(currentTask, currentTime);\n currentTask.isQueued = false;\n }\n\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue);\n }\n }\n\n advanceTimers(currentTime);\n } else {\n pop(taskQueue);\n }\n\n currentTask = peek(taskQueue);\n } // Return whether there's additional work\n\n\n if (currentTask !== null) {\n return true;\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n\n return false;\n }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n case LowPriority:\n case IdlePriority:\n break;\n\n default:\n priorityLevel = NormalPriority;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_next(eventHandler) {\n var priorityLevel;\n\n switch (currentPriorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n // Shift down to normal priority\n priorityLevel = NormalPriority;\n break;\n\n default:\n // Anything lower than normal priority should remain at the current level.\n priorityLevel = currentPriorityLevel;\n break;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_wrapCallback(callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n // This is a fork of runWithPriority, inlined for performance.\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n}\n\nfunction timeoutForPriorityLevel(priorityLevel) {\n switch (priorityLevel) {\n case ImmediatePriority:\n return IMMEDIATE_PRIORITY_TIMEOUT;\n\n case UserBlockingPriority:\n return USER_BLOCKING_PRIORITY;\n\n case IdlePriority:\n return IDLE_PRIORITY;\n\n case LowPriority:\n return LOW_PRIORITY_TIMEOUT;\n\n case NormalPriority:\n default:\n return NORMAL_PRIORITY_TIMEOUT;\n }\n}\n\nfunction unstable_scheduleCallback(priorityLevel, callback, options) {\n var currentTime = exports.unstable_now();\n var startTime;\n var timeout;\n\n if (typeof options === 'object' && options !== null) {\n var delay = options.delay;\n\n if (typeof delay === 'number' && delay > 0) {\n startTime = currentTime + delay;\n } else {\n startTime = currentTime;\n }\n\n timeout = typeof options.timeout === 'number' ? options.timeout : timeoutForPriorityLevel(priorityLevel);\n } else {\n timeout = timeoutForPriorityLevel(priorityLevel);\n startTime = currentTime;\n }\n\n var expirationTime = startTime + timeout;\n var newTask = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: startTime,\n expirationTime: expirationTime,\n sortIndex: -1\n };\n\n {\n newTask.isQueued = false;\n }\n\n if (startTime > currentTime) {\n // This is a delayed task.\n newTask.sortIndex = startTime;\n push(timerQueue, newTask);\n\n if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n // All tasks are delayed, and this is the task with the earliest delay.\n if (isHostTimeoutScheduled) {\n // Cancel an existing timeout.\n cancelHostTimeout();\n } else {\n isHostTimeoutScheduled = true;\n } // Schedule a timeout.\n\n\n requestHostTimeout(handleTimeout, startTime - currentTime);\n }\n } else {\n newTask.sortIndex = expirationTime;\n push(taskQueue, newTask);\n\n {\n markTaskStart(newTask, currentTime);\n newTask.isQueued = true;\n } // Schedule a host callback, if needed. If we're already performing work,\n // wait until the next time we yield.\n\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n }\n\n return newTask;\n}\n\nfunction unstable_pauseExecution() {\n}\n\nfunction unstable_continueExecution() {\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n}\n\nfunction unstable_getFirstCallbackNode() {\n return peek(taskQueue);\n}\n\nfunction unstable_cancelCallback(task) {\n {\n if (task.isQueued) {\n var currentTime = exports.unstable_now();\n markTaskCanceled(task, currentTime);\n task.isQueued = false;\n }\n } // Null out the callback to indicate the task has been canceled. (Can't\n // remove from the queue because you can't remove arbitrary nodes from an\n // array based heap, only the first one.)\n\n\n task.callback = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n return currentPriorityLevel;\n}\n\nfunction unstable_shouldYield() {\n var currentTime = exports.unstable_now();\n advanceTimers(currentTime);\n var firstTask = peek(taskQueue);\n return firstTask !== currentTask && currentTask !== null && firstTask !== null && firstTask.callback !== null && firstTask.startTime <= currentTime && firstTask.expirationTime < currentTask.expirationTime || shouldYieldToHost();\n}\n\nvar unstable_requestPaint = requestPaint;\nvar unstable_Profiling = {\n startLoggingProfilingEvents: startLoggingProfilingEvents,\n stopLoggingProfilingEvents: stopLoggingProfilingEvents,\n sharedProfilingBuffer: sharedProfilingBuffer\n} ;\n\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_Profiling = unstable_Profiling;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\nexports.unstable_next = unstable_next;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_requestPaint = unstable_requestPaint;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_shouldYield = unstable_shouldYield;\nexports.unstable_wrapCallback = unstable_wrapCallback;\n })();\n}\n\n}).call(this,require('_process'))\n},{\"_process\":67}],82:[function(require,module,exports){\n/** @license React v0.19.1\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var f,g,h,k,l;\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var p=null,q=null,t=function(){if(null!==p)try{var a=exports.unstable_now();p(!0,a);p=null}catch(b){throw setTimeout(t,0),b;}},u=Date.now();exports.unstable_now=function(){return Date.now()-u};f=function(a){null!==p?setTimeout(f,0,a):(p=a,setTimeout(t,0))};g=function(a,b){q=setTimeout(a,b)};h=function(){clearTimeout(q)};k=function(){return!1};l=exports.unstable_forceFrameRate=function(){}}else{var w=window.performance,x=window.Date,\ny=window.setTimeout,z=window.clearTimeout;if(\"undefined\"!==typeof console){var A=window.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\"function\"!==typeof A&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")}if(\"object\"===\ntypeof w&&\"function\"===typeof w.now)exports.unstable_now=function(){return w.now()};else{var B=x.now();exports.unstable_now=function(){return x.now()-B}}var C=!1,D=null,E=-1,F=5,G=0;k=function(){return exports.unstable_now()>=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):F=0<a?Math.floor(1E3/a):5};var H=new MessageChannel,I=H.port2;H.port1.onmessage=\nfunction(){if(null!==D){var a=exports.unstable_now();G=a+F;try{D(!0,a)?I.postMessage(null):(C=!1,D=null)}catch(b){throw I.postMessage(null),b;}}else C=!1};f=function(a){D=a;C||(C=!0,I.postMessage(null))};g=function(a,b){E=y(function(){a(exports.unstable_now())},b)};h=function(){z(E);E=-1}}function J(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<K(e,b))a[d]=b,a[c]=e,c=d;else break a}}function L(a){a=a[0];return void 0===a?null:a}\nfunction M(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0<e?d+e:d;c=\"number\"===typeof c.timeout?c.timeout:Y(a)}else c=Y(a),e=d;c=e+c;a={id:P++,callback:b,priorityLevel:a,startTime:e,expirationTime:c,sortIndex:-1};e>d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime<Q.expirationTime||k()};exports.unstable_wrapCallback=function(a){var b=R;return function(){var c=R;R=b;try{return a.apply(this,arguments)}finally{R=c}}};\n\n},{}],83:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n\n}).call(this,require('_process'))\n},{\"./cjs/scheduler.development.js\":81,\"./cjs/scheduler.production.min.js\":82,\"_process\":67}],84:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler-tracing.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler-tracing.development.js');\n}\n\n}).call(this,require('_process'))\n},{\"./cjs/scheduler-tracing.development.js\":79,\"./cjs/scheduler-tracing.production.min.js\":80,\"_process\":67}],85:[function(require,module,exports){\n(function (global){\n\"use strict\";\nvar g;\n\n\n\nif (typeof window !== \"undefined\")\n{\n\tg = window;\n}\nelse if (typeof global !== \"undefined\")\n{\n\tg = global;\n}\nelse if (typeof self !== \"undefined\")\n{\n\tg = self;\n}\nelse\n{\n\tg = this;\n}\n\n\n\nvar output =\n{\n\tshim: function(){},\n\tURL: g.URL,\n\tURLSearchParams: g.URLSearchParams\n};\n\n\n\nif (typeof define === \"function\" && define.amd)\n{\n\tdefine(function(){ return output });\n}\nelse if (typeof exports === \"object\")\n{\n\tmodule.exports = output;\n}\nelse\n{\n\tg.UniversalURL = output;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],86:[function(require,module,exports){\nmodule.exports = read\n\nvar MSB = 0x80\n , REST = 0x7F\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length\n\n do {\n if (counter >= l) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28\n ? (b & REST) << shift\n : (b & REST) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB)\n\n read.bytes = counter - offset\n\n return res\n}\n\n},{}],87:[function(require,module,exports){\nmodule.exports = encode\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB\n num /= 128\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n \n encode.bytes = offset - oldOffset + 1\n \n return out\n}\n\n},{}],88:[function(require,module,exports){\nmodule.exports = {\n encode: require('./encode.js')\n , decode: require('./decode.js')\n , encodingLength: require('./length.js')\n}\n\n},{\"./decode.js\":86,\"./encode.js\":87,\"./length.js\":89}],89:[function(require,module,exports){\n\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nmodule.exports = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n}\n\n},{}],90:[function(require,module,exports){\n(function (global){\n'use strict'\nmodule.exports = (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],91:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _objectDestructuringEmpty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectDestructuringEmpty\"));\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _profileHover = _interopRequireDefault(require(\"profile-hover\"));\n\n(function () {\n /*jslint node: true, browser: true*/\n 'use strict';\n\n var name = '3box-library'; // https://github.com/ensdomains/resolvers\n\n var BoxLibrary = function BoxLibrary(ipfsLoader) {\n this.ipfsLoader = ipfsLoader;\n };\n\n BoxLibrary.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n BoxLibrary.prototype.loadReact = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].React === undefined || _windowOrGlobal[\"default\"].React == null)) {\n _context.next = 12;\n break;\n }\n\n _context.prev = 1;\n _context.next = 4;\n return this.ipfsLoader.loadReactLibrary();\n\n case 4:\n if (!(_windowOrGlobal[\"default\"].React !== undefined && _windowOrGlobal[\"default\"].React !== null)) {\n _context.next = 6;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 6:\n _context.next = 11;\n break;\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context[\"catch\"](1);\n this.getLogger().error(_context.t0);\n\n case 11:\n throw new Error('Unavailable React library...');\n\n case 12:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[1, 8]]);\n }));\n BoxLibrary.prototype.loadThreeBox = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].Box === undefined || _windowOrGlobal[\"default\"].Box == null)) {\n _context2.next = 12;\n break;\n }\n\n _context2.prev = 1;\n _context2.next = 4;\n return this.ipfsLoader.loadThreeBoxLibrary();\n\n case 4:\n if (!(_windowOrGlobal[\"default\"].Box !== undefined && _windowOrGlobal[\"default\"].Box !== null)) {\n _context2.next = 6;\n break;\n }\n\n return _context2.abrupt(\"return\");\n\n case 6:\n _context2.next = 11;\n break;\n\n case 8:\n _context2.prev = 8;\n _context2.t0 = _context2[\"catch\"](1);\n this.getLogger().error(_context2.t0);\n\n case 11:\n throw new Error('Unavailable 3box library...');\n\n case 12:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this, [[1, 8]]);\n }));\n BoxLibrary.prototype.loadThreeBoxProfile = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].ProfileHover === undefined || _windowOrGlobal[\"default\"].ProfileHover == null)) {\n _context3.next = 12;\n break;\n }\n\n _context3.prev = 1;\n _context3.next = 4;\n return this.ipfsLoader.loadThreeBoxProfileLibrary();\n\n case 4:\n if (!(_windowOrGlobal[\"default\"].ProfileHover !== undefined && _windowOrGlobal[\"default\"].ProfileHover !== null)) {\n _context3.next = 6;\n break;\n }\n\n return _context3.abrupt(\"return\");\n\n case 6:\n _context3.next = 11;\n break;\n\n case 8:\n _context3.prev = 8;\n _context3.t0 = _context3[\"catch\"](1);\n this.getLogger().error(_context3.t0);\n\n case 11:\n throw new Error('Unavailable 3box profile hover library...');\n\n case 12:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this, [[1, 8]]);\n }));\n /*eslint no-empty-pattern: \"off\"*/\n\n BoxLibrary.prototype.load3BoxProfile = /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(provider, account) {\n var box, Example, appContainer;\n return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].Box === undefined || _windowOrGlobal[\"default\"].Box == null)) {\n _context4.next = 3;\n break;\n }\n\n _context4.next = 3;\n return this.loadThreeBox();\n\n case 3:\n _context4.next = 5;\n return _windowOrGlobal[\"default\"].Box.openBox(account, provider);\n\n case 5:\n box = _context4.sent;\n _context4.next = 8;\n return box.syncDone;\n\n case 8:\n Example = function Example(_ref5) {\n (0, _objectDestructuringEmpty2[\"default\"])(_ref5);\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n className: \"ethAddress\"\n }, /*#__PURE__*/_react[\"default\"].createElement(_profileHover[\"default\"], {\n address: account\n }));\n };\n\n appContainer = document.getElementById('reactApp');\n\n _reactDom[\"default\"].render( /*#__PURE__*/_react[\"default\"].createElement(Example, null), appContainer);\n\n case 11:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x, _x2) {\n return _ref4.apply(this, arguments);\n };\n }();\n\n module.exports = BoxLibrary;\n})();\n\n},{\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/helpers/objectDestructuringEmpty\":4,\"@babel/runtime/regenerator\":5,\"profile-hover\":68,\"react\":76,\"react-dom\":73,\"window-or-global\":90}],92:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _cids = _interopRequireDefault(require(\"cids\"));\n\nvar _contentHash = _interopRequireDefault(require(\"content-hash\"));\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\n(function () {\n /*jslint node: true, browser: true*/\n 'use strict';\n\n var name = 'ens-library'; // https://github.com/ensdomains/resolvers\n\n var EnsLibrary = function EnsLibrary(ipfsLoader) {\n this.ipfsLoader = ipfsLoader;\n this.network = {\n 1: 'Ethereum Main Network: \"Mainnet\", chainId: \"1\"',\n 3: 'Ethereum Test Network (PoW): \"Ropsten\", chainId: \"3\"',\n 4: 'Ethereum Test Network (PoA): \"Rinkeby\", chainId: \"4\"',\n 5: 'Ethereum Test Network (PoA): \"Goerli\", chainId: \"5\"',\n 42: 'Ethereum Test Network (PoA): \"Kovan\", chainId: \"42\"'\n };\n this.etherscan = {\n 1: 'https://etherscan.io',\n 3: 'https://ropsten.etherscan.io',\n 4: 'https://rinkeby.etherscan.io',\n 5: 'https://goerli.etherscan.io',\n 42: 'https://kovan.etherscan.io'\n }; // https://docs.ens.domains/ens-deployments\n // https://github.com/ensdomains/ui/blob/master/src/ens.js\n\n this.registry = {\n 1: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n 3: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n 4: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n 5: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'\n };\n };\n\n EnsLibrary.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n EnsLibrary.prototype.getEtherscanRegistry = function () {\n return this.etherscan;\n };\n\n EnsLibrary.prototype.getNetwork = function () {\n return this.network;\n };\n\n EnsLibrary.prototype.getENSRegistry = function () {\n return this.registry;\n };\n\n EnsLibrary.prototype.loadEthers = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context.next = 12;\n break;\n }\n\n _context.prev = 1;\n _context.next = 4;\n return this.ipfsLoader.loadEtherJsLibrary();\n\n case 4:\n if (!(_windowOrGlobal[\"default\"].ethers !== undefined && _windowOrGlobal[\"default\"].ethers !== null)) {\n _context.next = 6;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 6:\n _context.next = 11;\n break;\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context[\"catch\"](1);\n this.getLogger().error(_context.t0);\n\n case 11:\n throw new Error('Unavailable Ethereum library...');\n\n case 12:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[1, 8]]);\n })); // https://github.com/ensdomains/ui/blob/master/src/utils/contents.js\n\n EnsLibrary.prototype.decodeContenthash = function (content) {\n var decoded = null;\n var protocol = null;\n\n if (content.error) {\n throw new Error(content.error);\n }\n\n if (content) {\n var codec = _contentHash[\"default\"].getCodec(content);\n\n decoded = _contentHash[\"default\"].decode(content);\n\n if (codec === 'ipfs-ns') {\n protocol = 'ipfs';\n } else if (codec === 'swarm-ns') {\n protocol = 'bzz';\n } else if (codec === 'onion') {\n protocol = 'onion';\n } else if (codec === 'onion3') {\n protocol = 'onion3';\n }\n }\n\n return {\n decoded: decoded,\n protocol: protocol\n };\n }; // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1577.md\n\n\n EnsLibrary.prototype.encodeContenthash = function (content) {\n var type = null;\n var text = null;\n var encoded = null;\n content = content === undefined || content == null || content.trim() === '' ? null : content.trim();\n\n if (content == null) {\n return null;\n }\n\n var matched = content.match(/^(ipfs|bzz|onion|onion3):\\/\\/(.*)/) || content.match(/\\/(ipfs)\\/(.*)/);\n\n if (matched) {\n type = matched[1];\n text = matched[2];\n }\n\n if (type === 'ipfs') {\n if (text.length >= 4) {\n var cid = new _cids[\"default\"](text);\n\n if (cid.version !== 0) {\n throw new Error(\"ENS domain content should be Base58 (CidV0): \".concat(text));\n }\n\n encoded = '0x' + _contentHash[\"default\"].fromIpfs(text);\n }\n } else {\n throw new Error(\"Unsupported ENS domain protocol: \".concat(type));\n }\n\n return {\n encoded: encoded\n };\n };\n\n EnsLibrary.prototype.enableProvider = /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(provider) {\n var accounts;\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(provider === undefined || provider == null)) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Undefined Ethereum provider...');\n\n case 2:\n // Enable Provider\n accounts = null; // Handle connection, per EIP 1102\n\n if (!(typeof provider.send === 'function')) {\n _context2.next = 20;\n break;\n }\n\n _context2.prev = 4;\n _context2.next = 7;\n return provider.send('eth_requestAccounts');\n\n case 7:\n _context2.next = 14;\n break;\n\n case 9:\n _context2.prev = 9;\n _context2.t0 = _context2[\"catch\"](4);\n\n if (!(_context2.t0.code === 4001)) {\n _context2.next = 13;\n break;\n }\n\n throw new Error('User rejected request...');\n\n case 13:\n throw new Error(_context2.t0.message);\n\n case 14:\n _context2.next = 16;\n return provider.send('eth_accounts');\n\n case 16:\n accounts = _context2.sent;\n\n // https://medium.com/metamask/breaking-changes-to-the-metamask-inpage-provider-b4dde069dd0a\n // Metamask returns accounts.results rather than an array as described in their above communication\n if (accounts !== undefined && accounts !== null && typeof accounts.result !== 'undefined' && Array.isArray(accounts.result)) {\n accounts = accounts.result;\n } // Legacy\n\n\n _context2.next = 24;\n break;\n\n case 20:\n if (!(typeof provider.enable === 'function')) {\n _context2.next = 24;\n break;\n }\n\n _context2.next = 23;\n return provider.enable();\n\n case 23:\n accounts = _context2.sent;\n\n case 24:\n if (!(accounts === undefined || accounts == null || Array.isArray(accounts) === false || accounts.length === 0)) {\n _context2.next = 26;\n break;\n }\n\n throw new Error('Unable to retrieve an Ethereum account...');\n\n case 26:\n return _context2.abrupt(\"return\", accounts[0]);\n\n case 27:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, null, [[4, 9]]);\n }));\n\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getProvider = function () {\n // Retrieve an available Ethereum provider\n var provider = null;\n\n if (typeof _windowOrGlobal[\"default\"].ethereum !== 'undefined') {\n provider = _windowOrGlobal[\"default\"].ethereum;\n this.getLogger().info('Ethereum provider: \"window.ethereum\"...');\n }\n\n if (provider == null && _windowOrGlobal[\"default\"].web3 !== undefined && _windowOrGlobal[\"default\"].web3.currentProvider !== undefined) {\n provider = _windowOrGlobal[\"default\"].web3.currentProvider;\n this.getLogger().info('Ethereum provider: \"window.web3.currentProvider\"...');\n }\n\n if (provider == null) {\n throw new Error('Unable to retrieve an Ethereum provider...');\n } // https://docs.metamask.io/guide/ethereum-provider.html#methods-current-api\n\n\n if (provider.isMetaMask) {\n provider.autoRefreshOnNetworkChange = false;\n } // return provider\n\n\n return provider;\n };\n\n EnsLibrary.prototype.getEnabledWeb3Provider = /*#__PURE__*/function () {\n var _ref3 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(provider) {\n var account, web3, network;\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(provider === undefined || provider == null)) {\n _context3.next = 2;\n break;\n }\n\n throw new Error('Undefined Ethereum provider...');\n\n case 2:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context3.next = 5;\n break;\n }\n\n _context3.next = 5;\n return this.loadEthers();\n\n case 5:\n _context3.next = 7;\n return this.enableProvider(provider);\n\n case 7:\n account = _context3.sent;\n // Instantiate a Web3Provider\n web3 = new _windowOrGlobal[\"default\"].ethers.providers.Web3Provider(provider); // Retrieve current network\n\n _context3.next = 11;\n return web3.getNetwork();\n\n case 11:\n network = _context3.sent;\n return _context3.abrupt(\"return\", {\n web3: web3,\n chainId: network.chainId,\n account: account\n });\n\n case 13:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x2) {\n return _ref3.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getWeb3Provider = /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(provider) {\n var web3, network;\n return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (!(provider === undefined || provider == null)) {\n _context4.next = 2;\n break;\n }\n\n throw new Error('Undefined Ethereum provider...');\n\n case 2:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context4.next = 5;\n break;\n }\n\n _context4.next = 5;\n return this.loadEthers();\n\n case 5:\n // Instantiate an ethers Web3Provider\n web3 = new _windowOrGlobal[\"default\"].ethers.providers.Web3Provider(provider); // Retrieve the current network\n\n _context4.next = 8;\n return web3.getNetwork();\n\n case 8:\n network = _context4.sent;\n return _context4.abrupt(\"return\", {\n web3: web3,\n chainId: network.chainId\n });\n\n case 10:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x3) {\n return _ref4.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getRegistry = /*#__PURE__*/function () {\n var _ref5 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5(web3) {\n var network, registry;\n return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(web3 === undefined || web3 == null)) {\n _context5.next = 2;\n break;\n }\n\n throw new Error('Undefined Web3 provider...');\n\n case 2:\n _context5.next = 4;\n return web3.getNetwork();\n\n case 4:\n network = _context5.sent;\n // Retrieve an Ethereum ENS Registry address\n registry = null;\n\n try {\n registry = this.registry[network.chainId];\n } catch (error) {\n this.getLogger().error(error);\n }\n\n if (!(registry === undefined || registry == null)) {\n _context5.next = 9;\n break;\n }\n\n throw new Error(\"Unsupported Ethereum network: \".concat(network.chainId));\n\n case 9:\n return _context5.abrupt(\"return\", {\n chainId: network.chainId,\n registry: registry\n });\n\n case 10:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function (_x4) {\n return _ref5.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getResolver = /*#__PURE__*/function () {\n var _ref6 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6(web3, registry, node) {\n var abi, iface, data, result, decoded;\n return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(web3 === undefined || web3 == null)) {\n _context6.next = 2;\n break;\n }\n\n throw new Error('Undefined Web3 provider...');\n\n case 2:\n node = node === undefined || node == null || node.trim() === '' ? null : node.trim();\n\n if (!(node == null)) {\n _context6.next = 5;\n break;\n }\n\n throw new Error('Undefined ENS domain resolver...');\n\n case 5:\n registry = registry === undefined || registry == null || registry.trim() === '' ? null : registry.trim();\n\n if (!(registry == null)) {\n _context6.next = 8;\n break;\n }\n\n throw new Error('Undefined ENS registry address...');\n\n case 8:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context6.next = 11;\n break;\n }\n\n _context6.next = 11;\n return this.loadEthers();\n\n case 11:\n // Low level call\n abi = [{\n name: 'resolver',\n type: 'function',\n inputs: [{\n type: 'bytes32'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.resolver.encode([node]);\n _context6.next = 16;\n return web3.call({\n to: registry,\n data: data\n });\n\n case 16:\n result = _context6.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context6.next = 19;\n break;\n }\n\n return _context6.abrupt(\"return\", null);\n\n case 19:\n _context6.prev = 19;\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['address'], result);\n return _context6.abrupt(\"return\", decoded[0]);\n\n case 24:\n _context6.prev = 24;\n _context6.t0 = _context6[\"catch\"](19);\n this.getLogger().error(_context6.t0);\n\n case 27:\n return _context6.abrupt(\"return\", null);\n\n case 28:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6, this, [[19, 24]]);\n }));\n\n return function (_x5, _x6, _x7) {\n return _ref6.apply(this, arguments);\n };\n }(); // https://eips.ethereum.org/EIPS/eip-165\n\n\n EnsLibrary.prototype.checkEip165 = /*#__PURE__*/function () {\n var _ref7 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7(web3, address) {\n var abi, iface, data, result, decoded;\n return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (!(web3 === undefined || web3 == null)) {\n _context7.next = 2;\n break;\n }\n\n throw new Error('Undefined Web3 provider...');\n\n case 2:\n address = address === undefined || address == null || address.trim() === '' ? null : address.trim();\n\n if (!(address == null)) {\n _context7.next = 5;\n break;\n }\n\n throw new Error('Undefined Ethereum address...');\n\n case 5:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context7.next = 8;\n break;\n }\n\n _context7.next = 8;\n return this.loadEthers();\n\n case 8:\n // true when interfaceID is 0x01ffc9a7\n abi = [{\n name: 'supportsInterface',\n type: 'function',\n inputs: [{\n type: 'bytes4'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.supportsInterface.encode(['0x01ffc9a7']);\n _context7.next = 13;\n return web3.call({\n to: address,\n data: data\n });\n\n case 13:\n result = _context7.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context7.next = 16;\n break;\n }\n\n return _context7.abrupt(\"return\", false);\n\n case 16:\n _context7.prev = 16;\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['bool'], result);\n\n if (!(decoded[0] === false)) {\n _context7.next = 20;\n break;\n }\n\n return _context7.abrupt(\"return\", false);\n\n case 20:\n _context7.next = 26;\n break;\n\n case 22:\n _context7.prev = 22;\n _context7.t0 = _context7[\"catch\"](16);\n this.getLogger().error(_context7.t0);\n return _context7.abrupt(\"return\", false);\n\n case 26:\n // false when interfaceID is 0xffffffff\n data = iface.functions.supportsInterface.encode(['0xffffffff']);\n _context7.next = 29;\n return web3.call({\n to: address,\n data: data\n });\n\n case 29:\n result = _context7.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context7.next = 32;\n break;\n }\n\n return _context7.abrupt(\"return\", false);\n\n case 32:\n _context7.prev = 32;\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['bool'], result); // conform to spec\n\n if (!(decoded[0] === false)) {\n _context7.next = 36;\n break;\n }\n\n return _context7.abrupt(\"return\", true);\n\n case 36:\n _context7.next = 41;\n break;\n\n case 38:\n _context7.prev = 38;\n _context7.t1 = _context7[\"catch\"](32);\n this.getLogger().error(_context7.t1);\n\n case 41:\n return _context7.abrupt(\"return\", false);\n\n case 42:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, this, [[16, 22], [32, 38]]);\n }));\n\n return function (_x8, _x9) {\n return _ref7.apply(this, arguments);\n };\n }(); // https://eips.ethereum.org/EIPS/eip-1577\n\n\n EnsLibrary.prototype.checkEip1577 = /*#__PURE__*/function () {\n var _ref8 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee8(web3, address) {\n var abi, iface, data, result, decoded;\n return _regenerator[\"default\"].wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (!(web3 === undefined || web3 == null)) {\n _context8.next = 2;\n break;\n }\n\n throw new Error('Undefined Web3 provider...');\n\n case 2:\n address = address === undefined || address == null || address.trim() === '' ? null : address.trim();\n\n if (!(address == null)) {\n _context8.next = 5;\n break;\n }\n\n throw new Error('Undefined Ethereum address...');\n\n case 5:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context8.next = 8;\n break;\n }\n\n _context8.next = 8;\n return this.loadEthers();\n\n case 8:\n // contenthash, true when interfaceID is 0xbc1c58d1\n abi = [{\n name: 'supportsInterface',\n type: 'function',\n inputs: [{\n type: 'bytes4'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.supportsInterface.encode(['0xbc1c58d1']);\n _context8.next = 13;\n return web3.call({\n to: address,\n data: data\n });\n\n case 13:\n result = _context8.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context8.next = 16;\n break;\n }\n\n return _context8.abrupt(\"return\", false);\n\n case 16:\n _context8.prev = 16;\n // decode\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['bool'], result);\n\n if (!(decoded[0] === false)) {\n _context8.next = 20;\n break;\n }\n\n return _context8.abrupt(\"return\", false);\n\n case 20:\n _context8.next = 26;\n break;\n\n case 22:\n _context8.prev = 22;\n _context8.t0 = _context8[\"catch\"](16);\n this.getLogger().error(_context8.t0);\n return _context8.abrupt(\"return\", false);\n\n case 26:\n return _context8.abrupt(\"return\", true);\n\n case 27:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8, this, [[16, 22]]);\n }));\n\n return function (_x10, _x11) {\n return _ref8.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getContentHash = /*#__PURE__*/function () {\n var _ref9 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee9(domain, web3) {\n var _yield$this$getWeb3Pr, domainHash, _yield$this$getRegist, chainId, registry, resolver, eip165, eip1577, abi, iface, data, result, content, _this$decodeContentha, decoded, protocol;\n\n return _regenerator[\"default\"].wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context9.next = 3;\n break;\n }\n\n _context9.next = 3;\n return this.loadEthers();\n\n case 3:\n domain = domain === undefined || domain == null || domain.trim() === '' ? null : domain.trim();\n\n if (!(domain == null)) {\n _context9.next = 6;\n break;\n }\n\n throw new Error('Undefined ENS domain...');\n\n case 6:\n if (!(web3 === undefined)) {\n _context9.next = 11;\n break;\n }\n\n _context9.next = 9;\n return this.getWeb3Provider();\n\n case 9:\n _yield$this$getWeb3Pr = _context9.sent;\n web3 = _yield$this$getWeb3Pr.web3;\n\n case 11:\n // Resolve domain as namehash\n domainHash = _windowOrGlobal[\"default\"].ethers.utils.namehash(domain); // Fetch ens registry address\n\n _context9.next = 14;\n return this.getRegistry(web3);\n\n case 14:\n _yield$this$getRegist = _context9.sent;\n chainId = _yield$this$getRegist.chainId;\n registry = _yield$this$getRegist.registry;\n // Log\n this.getLogger().info(\"ENS registry: \\n \".concat(this.etherscan[chainId], \"/address/\").concat(registry)); // Fetch resolver address\n\n _context9.next = 20;\n return this.getResolver(web3, registry, domainHash);\n\n case 20:\n resolver = _context9.sent;\n\n if (!(resolver == null || /^0x0+$/.test(resolver) === true)) {\n _context9.next = 23;\n break;\n }\n\n throw new Error('Undefined ENS domain resolver...');\n\n case 23:\n // Log\n this.getLogger().info(\"ENS domain resolver:\\n \".concat(this.etherscan[chainId], \"/address/\").concat(resolver)); // Check if resolver is EIP165\n\n _context9.next = 26;\n return this.checkEip165(web3, resolver);\n\n case 26:\n eip165 = _context9.sent;\n\n if (!(eip165 === false)) {\n _context9.next = 29;\n break;\n }\n\n throw new Error('ENS domain resolver do not conform to EIP165...');\n\n case 29:\n _context9.next = 31;\n return this.checkEip1577(web3, resolver);\n\n case 31:\n eip1577 = _context9.sent;\n\n if (!(eip1577 === false)) {\n _context9.next = 34;\n break;\n }\n\n throw new Error('ENS domain resolver do not conform to EIP1577...');\n\n case 34:\n // Retrieve content hash\n this.getLogger().info('Processing ENS domain content...');\n abi = [{\n name: 'contenthash',\n type: 'function',\n inputs: [{\n type: 'bytes32'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.contenthash.encode([domainHash]);\n _context9.next = 40;\n return web3.call({\n to: resolver,\n data: data\n });\n\n case 40:\n result = _context9.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context9.next = 43;\n break;\n }\n\n return _context9.abrupt(\"return\", {\n content: null,\n protocol: null\n });\n\n case 43:\n // decode bytes result\n content = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['bytes'], result);\n\n if (!(content === undefined || content == null || Array.isArray(content) === false || content[0] === '0x')) {\n _context9.next = 46;\n break;\n }\n\n return _context9.abrupt(\"return\", {\n content: null,\n protocol: null\n });\n\n case 46:\n // Decode content hash\n _this$decodeContentha = this.decodeContenthash(content[0]), decoded = _this$decodeContentha.decoded, protocol = _this$decodeContentha.protocol;\n return _context9.abrupt(\"return\", {\n content: decoded,\n protocol: protocol\n });\n\n case 48:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, this);\n }));\n\n return function (_x12, _x13) {\n return _ref9.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.isOwner = /*#__PURE__*/function () {\n var _ref10 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee10(domain, web3, account) {\n var _yield$this$getEnable, domainHash, _yield$this$getRegist2, chainId, registry, abi, iface, data, result, decoded;\n\n return _regenerator[\"default\"].wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context10.next = 3;\n break;\n }\n\n _context10.next = 3;\n return this.loadEthers();\n\n case 3:\n domain = domain === undefined || domain == null || domain.trim() === '' ? null : domain.trim();\n\n if (!(domain == null)) {\n _context10.next = 6;\n break;\n }\n\n throw new Error('Undefined ENS domain...');\n\n case 6:\n if (!(web3 === undefined || account === undefined)) {\n _context10.next = 12;\n break;\n }\n\n _context10.next = 9;\n return this.getEnabledWeb3Provider();\n\n case 9:\n _yield$this$getEnable = _context10.sent;\n web3 = _yield$this$getEnable.web3;\n account = _yield$this$getEnable.account;\n\n case 12:\n // Resolve domain as namehash\n domainHash = _windowOrGlobal[\"default\"].ethers.utils.namehash(domain); // Fetch ens registry address\n\n _context10.next = 15;\n return this.getRegistry(web3);\n\n case 15:\n _yield$this$getRegist2 = _context10.sent;\n chainId = _yield$this$getRegist2.chainId;\n registry = _yield$this$getRegist2.registry;\n // Log\n this.getLogger().info(\"ENS registry: \\n \".concat(this.etherscan[chainId], \"/address/\").concat(registry));\n this.getLogger().info('Processing owner...');\n abi = [{\n name: 'owner',\n type: 'function',\n inputs: [{\n type: 'bytes32'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.owner.encode([domainHash]);\n _context10.next = 25;\n return web3.call({\n to: registry,\n data: data\n });\n\n case 25:\n result = _context10.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context10.next = 28;\n break;\n }\n\n return _context10.abrupt(\"return\", false);\n\n case 28:\n _context10.prev = 28;\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['address'], result);\n return _context10.abrupt(\"return\", decoded[0].toLowerCase() === account.toLowerCase());\n\n case 33:\n _context10.prev = 33;\n _context10.t0 = _context10[\"catch\"](28);\n this.getLogger().error(_context10.t0);\n\n case 36:\n return _context10.abrupt(\"return\", false);\n\n case 37:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, this, [[28, 33]]);\n }));\n\n return function (_x14, _x15, _x16) {\n return _ref10.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.setContentHash = /*#__PURE__*/function () {\n var _ref11 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee11(domain, cid, web3, account) {\n var _yield$this$getEnable2, domainHash, _yield$this$getRegist3, chainId, registry, resolver, eip165, eip1577, _this$encodeContentha, encoded, abi, iface, data, signer, tx;\n\n return _regenerator[\"default\"].wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n cid = cid === undefined || cid == null || cid.toString().trim() === '' ? null : cid.toString().trim();\n\n if (!(cid == null)) {\n _context11.next = 3;\n break;\n }\n\n throw new Error('Undefined IPFS identifier...');\n\n case 3:\n domain = domain === undefined || domain == null || domain.trim() === '' ? null : domain.trim();\n\n if (!(domain == null)) {\n _context11.next = 6;\n break;\n }\n\n throw new Error('Undefined ENS domain...');\n\n case 6:\n if (!(web3 === undefined || account === undefined)) {\n _context11.next = 12;\n break;\n }\n\n _context11.next = 9;\n return this.getEnabledWeb3Provider();\n\n case 9:\n _yield$this$getEnable2 = _context11.sent;\n web3 = _yield$this$getEnable2.web3;\n account = _yield$this$getEnable2.account;\n\n case 12:\n // Resolve domain as namehash\n domainHash = _windowOrGlobal[\"default\"].ethers.utils.namehash(domain); // Fetch ens registry address\n\n _context11.next = 15;\n return this.getRegistry(web3);\n\n case 15:\n _yield$this$getRegist3 = _context11.sent;\n chainId = _yield$this$getRegist3.chainId;\n registry = _yield$this$getRegist3.registry;\n this.getLogger().info(\"ENS registry:\\n \".concat(this.etherscan[chainId], \"/address/\").concat(registry));\n _context11.next = 21;\n return this.getResolver(web3, registry, domainHash);\n\n case 21:\n resolver = _context11.sent;\n\n if (!(resolver == null || /^0x0+$/.test(resolver) === true)) {\n _context11.next = 24;\n break;\n }\n\n throw new Error('Undefined ENS resolver...');\n\n case 24:\n this.getLogger().info(\"ENS domain resolver:\\n \".concat(this.etherscan[chainId], \"/address/\").concat(resolver)); // Check if resolver is EIP165\n\n _context11.next = 27;\n return this.checkEip165(web3, resolver);\n\n case 27:\n eip165 = _context11.sent;\n\n if (!(eip165 === false)) {\n _context11.next = 30;\n break;\n }\n\n throw new Error('ENS resolver do not conform to EIP165...');\n\n case 30:\n _context11.next = 32;\n return this.checkEip1577(web3, resolver);\n\n case 32:\n eip1577 = _context11.sent;\n\n if (!(eip1577 === false)) {\n _context11.next = 35;\n break;\n }\n\n throw new Error('ENS resolver do not conform to EIP1577...');\n\n case 35:\n // Encode cid\n _this$encodeContentha = this.encodeContenthash('ipfs://' + cid), encoded = _this$encodeContentha.encoded; // Set Contenthash\n\n this.getLogger().info('Processing ENS domain content...');\n abi = [{\n name: 'setContenthash',\n type: 'function',\n inputs: [{\n type: 'bytes32'\n }, {\n type: 'bytes'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.setContenthash.encode([domainHash, encoded]);\n signer = web3.getSigner();\n _context11.next = 43;\n return signer.sendTransaction({\n to: resolver,\n data: data\n });\n\n case 43:\n tx = _context11.sent;\n this.getLogger().info(\"Processing Transaction:\\n \".concat(this.etherscan[chainId], \"/tx/\").concat(tx.hash)); // Wait for transaction completion\n\n _context11.next = 47;\n return tx.wait();\n\n case 47:\n this.getLogger().info('Processed ENS domain content...');\n\n case 48:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11, this);\n }));\n\n return function (_x17, _x18, _x19, _x20) {\n return _ref11.apply(this, arguments);\n };\n }();\n\n module.exports = EnsLibrary;\n})();\n\n},{\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/regenerator\":5,\"cids\":10,\"content-hash\":35,\"window-or-global\":90}],93:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _cids = _interopRequireDefault(require(\"cids\"));\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\nvar _ensLibrary = _interopRequireDefault(require(\"./ens-library\"));\n\nvar _ipfsLibrary = _interopRequireDefault(require(\"./ipfs-library\"));\n\nvar _ipfsLoader = _interopRequireDefault(require(\"./ipfs-loader\"));\n\nvar _ipfsUrl = _interopRequireDefault(require(\"./ipfs-url\"));\n\nvar _boxLibrary = _interopRequireDefault(require(\"./box-library\"));\n\n/*\\\ntitle: $:/plugins/ipfs/ipfs-bundle.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Bundle\n\n\\*/\n(function () {\n /*jslint node: true, browser: true*/\n 'use strict';\n\n var cidAnalyser = 'https://cid.ipfs.io/#';\n var name = 'ipfs-bundle';\n\n var IpfsBundle = function IpfsBundle() {\n this.once = false;\n };\n\n IpfsBundle.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n IpfsBundle.prototype.init = function () {\n // Init once\n if (this.once) {\n return;\n }\n\n this.ipfsLoader = new _ipfsLoader[\"default\"](this);\n this.ensLibrary = new _ensLibrary[\"default\"](this.ipfsLoader);\n this.ipfsLibrary = new _ipfsLibrary[\"default\"](this);\n this.ipfsUrl = new _ipfsUrl[\"default\"]();\n this.boxLibrary = new _boxLibrary[\"default\"](this.ipfsLoader); // Init once\n\n this.once = true;\n };\n\n IpfsBundle.prototype.isJson = function (content) {\n return this.ipfsLoader.isJson(content);\n };\n\n IpfsBundle.prototype.loadToBase64 = /*#__PURE__*/function () {\n var _ref = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(url) {\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.ipfsLoader.loadToBase64(url);\n\n case 2:\n return _context.abrupt(\"return\", _context.sent);\n\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }();\n\n IpfsBundle.prototype.loadToUtf8 = /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(url) {\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return this.ipfsLoader.loadToUtf8(url);\n\n case 2:\n return _context2.abrupt(\"return\", _context2.sent);\n\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }();\n\n IpfsBundle.prototype.decodeCid = function (pathname) {\n // Check\n if (pathname === undefined || pathname == null || pathname.trim() === '' || pathname.trim() === '/') {\n return {\n cid: null,\n ipnsIdentifier: null,\n protocol: null\n };\n }\n\n var identifier = null;\n var protocol = null; // Parse\n\n var members = pathname.trim().split('/');\n\n for (var i = 0; i < members.length; i++) {\n // Ignore\n if (members[i].trim() === '') {\n continue;\n } // First non empty member\n\n\n if (protocol == null) {\n protocol = members[i];\n continue;\n } // Second non empty member\n\n\n if (identifier == null) {\n identifier = members[i];\n break;\n } // Nothing to process\n\n\n break;\n } // Check\n\n\n if (protocol == null || identifier == null) {\n return {\n cid: null,\n ipnsIdentifier: null,\n protocol: null\n };\n } // Check protocol\n\n\n if (protocol !== 'ipfs' && protocol !== 'ipns') {\n return {\n cid: null,\n ipnsIdentifier: null,\n protocol: null\n };\n } // Check\n\n\n var cid = null;\n var ipnsIdentifier = null;\n\n if (protocol === 'ipns') {\n ipnsIdentifier = identifier;\n } else if (this.isCid(identifier)) {\n cid = identifier;\n } // All good\n\n\n return {\n cid: cid,\n ipnsIdentifier: ipnsIdentifier,\n protocol: protocol\n };\n };\n\n IpfsBundle.prototype.isCid = function (cid) {\n try {\n var newCid = new _cids[\"default\"](cid);\n return _cids[\"default\"].isCID(newCid);\n } catch (error) {\n return false;\n }\n };\n\n IpfsBundle.prototype.cidV1ToCidV0 = function (cidv1) {\n var cidv0 = new _cids[\"default\"](cidv1);\n\n if (cidv0.codec !== 'dag-pb') {\n throw new Error(\"This \\\"cid\\\" is not \\\"dag-pb\\\" encoded: \".concat(cidAnalyser).concat(cidv0));\n }\n\n if (cidv0.version === 1) {\n cidv0 = cidv0.toV0(); // Log\n\n this.getLogger().info(\"Converted:\\n \\\"cidv1\\\" (Base32): \".concat(cidAnalyser).concat(cidv1, \" \\n to \\\"cidv0\\\" (Base58): \").concat(cidAnalyser).concat(cidv0));\n } else {\n // Log\n this.getLogger().info(\"\\\"cidv0\\\" (Base58):\\n \".concat(cidAnalyser).concat(cidv0));\n }\n\n return cidv0.toString();\n };\n\n IpfsBundle.prototype.cidV0ToCidV1 = function (cidv0) {\n var cidv1 = new _cids[\"default\"](cidv0);\n\n if (cidv1.codec !== 'dag-pb') {\n throw new Error(\"This \\\"cid\\\" is not \\\"dag-pb\\\" encoded: \".concat(cidAnalyser).concat(cidv1));\n }\n\n if (cidv1.version === 0) {\n cidv1 = cidv1.toV1();\n this.getLogger().info(\"Converted:\\n \\\"cidv0\\\" (Base58): \".concat(cidAnalyser).concat(cidv0, \" \\n to \\\"cidv1\\\" (Base32): \").concat(cidAnalyser).concat(cidv1));\n } else {\n // Log\n this.getLogger().info(\"\\\"cidv1\\\" (Base32):\\n \".concat(cidAnalyser).concat(cidv1));\n }\n\n return cidv1.toString();\n };\n\n IpfsBundle.prototype.Base64ToUint8Array = function (base64) {\n var raw = atob(base64);\n var ua = new Uint8Array(raw.length);\n\n for (var i = 0; i < raw.length; i++) {\n ua[i] = raw.charCodeAt(i);\n }\n\n return ua;\n };\n\n IpfsBundle.prototype.Uint8ArrayToBase64 = function (uint8) {\n var CHUNK_SIZE = 0x8000; //arbitrary number\n\n var index = 0;\n var length = uint8.length;\n var str = '';\n var slice;\n\n while (index < length) {\n slice = uint8.subarray(index, Math.min(index + CHUNK_SIZE, length));\n str += String.fromCharCode.apply(null, slice);\n index += CHUNK_SIZE;\n }\n\n return btoa(str);\n }; // String to uint array\n\n\n IpfsBundle.prototype.StringToUint8Array = function (string) {\n var escstr = encodeURIComponent(string);\n var binstr = escstr.replace(/%([0-9A-F]{2})/g, function (match, p1) {\n return String.fromCharCode('0x' + p1);\n });\n var ua = new Uint8Array(binstr.length);\n Array.prototype.forEach.call(binstr, function (ch, i) {\n ua[i] = ch.charCodeAt(0);\n });\n return ua;\n }; // http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n\n /*\n * utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>\n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free. You can redistribute it and/or modify it.\n */\n\n\n IpfsBundle.prototype.Utf8ArrayToStr = function (array) {\n var c, char2, char3;\n var out = '';\n var len = array.length;\n var i = 0;\n\n while (i < len) {\n c = array[i++];\n\n switch (c >> 4) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n // 0xxxxxxx\n out += String.fromCharCode(c);\n break;\n\n case 12:\n case 13:\n // 110x xxxx 10xx xxxx\n char2 = array[i++];\n out += String.fromCharCode((c & 0x1f) << 6 | char2 & 0x3f);\n break;\n\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2 = array[i++];\n char3 = array[i++];\n out += String.fromCharCode((c & 0x0f) << 12 | (char2 & 0x3f) << 6 | (char3 & 0x3f) << 0);\n break;\n }\n }\n\n return out;\n };\n\n module.exports = {\n IpfsBundle: IpfsBundle\n };\n})();\n\n},{\"./box-library\":91,\"./ens-library\":92,\"./ipfs-library\":94,\"./ipfs-loader\":95,\"./ipfs-url\":96,\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/regenerator\":5,\"cids\":10,\"window-or-global\":90}],94:[function(require,module,exports){\n(function (Buffer){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _asyncIterator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncIterator\"));\n\nvar _ipfsProvider = require(\"ipfs-provider\");\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\n(function () {\n /*jslint node: true, browser: true */\n 'use strict';\n\n var name = 'ipfs-library';\n var httpClient = _ipfsProvider.providers.httpClient,\n windowIpfs = _ipfsProvider.providers.windowIpfs;\n /*\n * https://github.com/ipfs/js-ipfs/tree/master/docs/core-api\n **/\n\n var IpfsLibrary = function IpfsLibrary(ipfsBundle) {\n this.ipfsBundle = ipfsBundle;\n this.ipfsLoader = ipfsBundle.ipfsLoader;\n };\n\n IpfsLibrary.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n IpfsLibrary.prototype.loadIpfsHttpClient = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n var self;\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n self = this;\n\n if (!(typeof _windowOrGlobal[\"default\"].IpfsHttpClient === 'undefined')) {\n _context.next = 13;\n break;\n }\n\n _context.prev = 2;\n _context.next = 5;\n return this.ipfsLoader.loadIpfsHttpLibrary();\n\n case 5:\n if (!(typeof _windowOrGlobal[\"default\"].IpfsHttpClient !== 'undefined')) {\n _context.next = 7;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 7:\n _context.next = 12;\n break;\n\n case 9:\n _context.prev = 9;\n _context.t0 = _context[\"catch\"](2);\n self.getLogger().error(_context.t0);\n\n case 12:\n throw new Error('Unavailable IPFS HTTP Client library...');\n\n case 13:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[2, 9]]);\n })); // Default\n\n IpfsLibrary.prototype.getDefaultIpfs = /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(apiUrl) {\n var _yield$this$getWindow, ipfs, provider, _yield$this$getHttpIp, _ipfs, _provider;\n\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.prev = 0;\n _context2.next = 3;\n return this.getWindowIpfs();\n\n case 3:\n _yield$this$getWindow = _context2.sent;\n ipfs = _yield$this$getWindow.ipfs;\n provider = _yield$this$getWindow.provider;\n\n if (!(ipfs !== null)) {\n _context2.next = 8;\n break;\n }\n\n return _context2.abrupt(\"return\", {\n ipfs: ipfs,\n provider: provider\n });\n\n case 8:\n _context2.next = 12;\n break;\n\n case 10:\n _context2.prev = 10;\n _context2.t0 = _context2[\"catch\"](0);\n\n case 12:\n apiUrl = apiUrl === undefined || apiUrl == null || apiUrl.toString().trim() === '' ? null : apiUrl;\n\n if (!(apiUrl == null)) {\n _context2.next = 15;\n break;\n }\n\n throw new Error('Undefined IPFS API URL...');\n\n case 15:\n _context2.prev = 15;\n _context2.next = 18;\n return this.getHttpIpfs(apiUrl);\n\n case 18:\n _yield$this$getHttpIp = _context2.sent;\n _ipfs = _yield$this$getHttpIp.ipfs;\n _provider = _yield$this$getHttpIp.provider;\n\n if (!(_ipfs !== null)) {\n _context2.next = 23;\n break;\n }\n\n return _context2.abrupt(\"return\", {\n ipfs: _ipfs,\n provider: _provider\n });\n\n case 23:\n _context2.next = 27;\n break;\n\n case 25:\n _context2.prev = 25;\n _context2.t1 = _context2[\"catch\"](15);\n\n case 27:\n throw new Error('Unable to retrieve IPFS Companion and IPFS API URL...');\n\n case 28:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this, [[0, 10], [15, 25]]);\n }));\n\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }(); // IPFS companion\n\n\n IpfsLibrary.prototype.getWindowIpfs = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\n var self, _yield$getIpfs, ipfs, provider;\n\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n self = this;\n _context3.prev = 1;\n this.getLogger().info('Processing connection to IPFS Companion...');\n _context3.next = 5;\n return (0, _ipfsProvider.getIpfs)({\n providers: [windowIpfs()]\n });\n\n case 5:\n _yield$getIpfs = _context3.sent;\n ipfs = _yield$getIpfs.ipfs;\n provider = _yield$getIpfs.provider;\n return _context3.abrupt(\"return\", {\n ipfs: ipfs,\n provider: provider\n });\n\n case 11:\n _context3.prev = 11;\n _context3.t0 = _context3[\"catch\"](1);\n self.getLogger().error(_context3.t0);\n\n case 14:\n throw new Error('Unreachable IPFS Companion...');\n\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this, [[1, 11]]);\n })); // ipfs-http-client\n\n IpfsLibrary.prototype.getHttpIpfs = /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(apiUrl) {\n var protocol, port, _yield$getIpfs2, ipfs, provider;\n\n return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n apiUrl = apiUrl === undefined || apiUrl == null || apiUrl.toString().trim() === '' ? null : apiUrl;\n\n if (!(apiUrl == null)) {\n _context4.next = 3;\n break;\n }\n\n throw new Error('Undefined IPFS API URL...');\n\n case 3:\n _context4.prev = 3;\n\n if (!(typeof _windowOrGlobal[\"default\"].IpfsHttpClient === 'undefined')) {\n _context4.next = 7;\n break;\n }\n\n _context4.next = 7;\n return this.loadIpfsHttpClient();\n\n case 7:\n this.getLogger().info(\"Processing connection to IPFS API URL:\\n \".concat(apiUrl));\n protocol = apiUrl.protocol.slice(0, -1);\n port = apiUrl.port;\n\n if (port === undefined || port == null || port.trim() === '') {\n port = 443;\n\n if (protocol === 'http') {\n port = 80;\n }\n }\n\n _context4.next = 13;\n return (0, _ipfsProvider.getIpfs)({\n providers: [httpClient({\n apiAddress: {\n protocol: protocol,\n host: apiUrl.hostname,\n port: port,\n timeout: '4m'\n }\n })]\n });\n\n case 13:\n _yield$getIpfs2 = _context4.sent;\n ipfs = _yield$getIpfs2.ipfs;\n provider = _yield$getIpfs2.provider;\n return _context4.abrupt(\"return\", {\n ipfs: ipfs,\n provider: \"\".concat(provider, \", \").concat(apiUrl)\n });\n\n case 19:\n _context4.prev = 19;\n _context4.t0 = _context4[\"catch\"](3);\n this.getLogger().error(_context4.t0);\n\n case 22:\n throw new Error('Unreachable IPFS API URL...');\n\n case 23:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this, [[3, 19]]);\n }));\n\n return function (_x2) {\n return _ref4.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.add = /*#__PURE__*/function () {\n var _ref5 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5(client, content) {\n var buffer, addSource, lastResult, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, added;\n\n return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context5.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n if (!(content === undefined || content == null)) {\n _context5.next = 4;\n break;\n }\n\n throw new Error('Undefined content...');\n\n case 4:\n if (!client.enable) {\n _context5.next = 8;\n break;\n }\n\n _context5.next = 7;\n return client.enable({\n commands: ['add']\n });\n\n case 7:\n client = _context5.sent;\n\n case 8:\n if (!(client !== undefined && client.add !== undefined)) {\n _context5.next = 51;\n break;\n }\n\n // Process\n buffer = Buffer.from(content);\n this.getLogger().info('Processing IPFS add...'); // 1 - https://github.com/ipfs/go-ipfs/issues/5683\n // default chunker: \"size-262144\"\n // chunker: \"rabin-262144-524288-1048576\"\n // 2 - TODO: small content generates a wrong cid when cidVersion: 1 is set:\n // Not a 'dag-pb' but a 'raw' multicodec instead\n // We generate a V0 and convert it to a V1\n // https://github.com/xmaysonnave/tiddlywiki-ipfs/issues/14\n\n _context5.next = 13;\n return client.add(buffer, {\n cidVersion: 0,\n hashAlg: 'sha2-256',\n chunker: 'rabin-262144-524288-1048576',\n pin: false\n });\n\n case 13:\n addSource = _context5.sent;\n // https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26\n lastResult = null;\n _iteratorNormalCompletion = true;\n _didIteratorError = false;\n _context5.prev = 17;\n _iterator = (0, _asyncIterator2[\"default\"])(addSource);\n\n case 19:\n _context5.next = 21;\n return _iterator.next();\n\n case 21:\n _step = _context5.sent;\n _iteratorNormalCompletion = _step.done;\n _context5.next = 25;\n return _step.value;\n\n case 25:\n _value = _context5.sent;\n\n if (_iteratorNormalCompletion) {\n _context5.next = 32;\n break;\n }\n\n added = _value;\n lastResult = added;\n\n case 29:\n _iteratorNormalCompletion = true;\n _context5.next = 19;\n break;\n\n case 32:\n _context5.next = 38;\n break;\n\n case 34:\n _context5.prev = 34;\n _context5.t0 = _context5[\"catch\"](17);\n _didIteratorError = true;\n _iteratorError = _context5.t0;\n\n case 38:\n _context5.prev = 38;\n _context5.prev = 39;\n\n if (!(!_iteratorNormalCompletion && _iterator[\"return\"] != null)) {\n _context5.next = 43;\n break;\n }\n\n _context5.next = 43;\n return _iterator[\"return\"]();\n\n case 43:\n _context5.prev = 43;\n\n if (!_didIteratorError) {\n _context5.next = 46;\n break;\n }\n\n throw _iteratorError;\n\n case 46:\n return _context5.finish(43);\n\n case 47:\n return _context5.finish(38);\n\n case 48:\n if (!(lastResult == null || lastResult.path === undefined || lastResult.path == null)) {\n _context5.next = 50;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 50:\n return _context5.abrupt(\"return\", {\n hash: this.ipfsBundle.cidV0ToCidV1(lastResult.path),\n size: lastResult.size\n });\n\n case 51:\n throw new Error('Undefined IPFS command add...');\n\n case 52:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this, [[17, 34, 38, 48], [39,, 43, 47]]);\n }));\n\n return function (_x3, _x4) {\n return _ref5.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.pin = /*#__PURE__*/function () {\n var _ref6 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6(client, cid) {\n var result;\n return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context6.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n cid = cid == null || cid === undefined || cid.trim() === '' ? null : cid.trim();\n\n if (!(cid == null)) {\n _context6.next = 5;\n break;\n }\n\n throw new Error('Undefined IPFS identifier...');\n\n case 5:\n if (!client.enable) {\n _context6.next = 9;\n break;\n }\n\n _context6.next = 8;\n return client.enable({\n commands: ['pin']\n });\n\n case 8:\n client = _context6.sent;\n\n case 9:\n if (!(client !== undefined && client.pin !== undefined && client.pin.add !== undefined)) {\n _context6.next = 15;\n break;\n }\n\n this.getLogger().info('Processing IPFS pin add...');\n _context6.next = 13;\n return client.pin.add(cid, {\n recursive: true\n });\n\n case 13:\n result = _context6.sent;\n return _context6.abrupt(\"return\", result);\n\n case 15:\n throw new Error('Undefined IPFS pin add...');\n\n case 16:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n return function (_x5, _x6) {\n return _ref6.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.unpin = /*#__PURE__*/function () {\n var _ref7 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7(client, cid) {\n var result;\n return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context7.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n cid = cid == null || cid === undefined || cid.trim() === '' ? null : cid.trim();\n\n if (!(cid == null)) {\n _context7.next = 5;\n break;\n }\n\n throw new Error('Undefined IPFS identifier...');\n\n case 5:\n if (!client.enable) {\n _context7.next = 9;\n break;\n }\n\n _context7.next = 8;\n return client.enable({\n commands: ['pin']\n });\n\n case 8:\n client = _context7.sent;\n\n case 9:\n if (!(client !== undefined && client.pin !== undefined && client.pin.rm !== undefined)) {\n _context7.next = 15;\n break;\n }\n\n this.getLogger().info('Processing IPFS pin rm...');\n _context7.next = 13;\n return client.pin.rm(cid, {\n recursive: true\n });\n\n case 13:\n result = _context7.sent;\n return _context7.abrupt(\"return\", result);\n\n case 15:\n throw new Error('Undefined IPFS pin rm');\n\n case 16:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function (_x7, _x8) {\n return _ref7.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.publish = /*#__PURE__*/function () {\n var _ref8 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee8(client, ipnsName, cid) {\n var result;\n return _regenerator[\"default\"].wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context8.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n cid = cid == null || cid === undefined || cid.trim() === '' ? null : cid.trim();\n\n if (!(cid == null)) {\n _context8.next = 5;\n break;\n }\n\n throw new Error('Undefined IPFS identifier...');\n\n case 5:\n ipnsName = ipnsName == null || ipnsName === undefined || ipnsName.trim() === '' ? null : ipnsName.trim();\n\n if (!(ipnsName == null)) {\n _context8.next = 8;\n break;\n }\n\n throw new Error('Undefined IPNS name...');\n\n case 8:\n if (!client.enable) {\n _context8.next = 12;\n break;\n }\n\n _context8.next = 11;\n return client.enable({\n commands: ['name']\n });\n\n case 11:\n client = _context8.sent;\n\n case 12:\n if (!(client !== undefined && client.name !== undefined && client.name.publish !== undefined)) {\n _context8.next = 20;\n break;\n }\n\n this.getLogger().info('Processing IPNS name publish...');\n _context8.next = 16;\n return client.name.publish(cid, {\n resolve: true,\n key: ipnsName,\n allowOffline: false\n });\n\n case 16:\n result = _context8.sent;\n\n if (!(result === undefined || result == null)) {\n _context8.next = 19;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 19:\n return _context8.abrupt(\"return\", {\n name: result.name,\n value: result.value\n });\n\n case 20:\n throw new Error('Undefined IPNS name publish...');\n\n case 21:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function (_x9, _x10, _x11) {\n return _ref8.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.resolve = /*#__PURE__*/function () {\n var _ref9 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee9(client, id) {\n var resolvedSource, lastResult, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, _value2, resolved;\n\n return _regenerator[\"default\"].wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context9.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n id = id == null || id === undefined || id.trim() === '' ? null : id.trim();\n\n if (!(id == null)) {\n _context9.next = 5;\n break;\n }\n\n throw new Error('Undefined IPNS key...');\n\n case 5:\n if (!client.enable) {\n _context9.next = 9;\n break;\n }\n\n _context9.next = 8;\n return client.enable({\n commands: ['name']\n });\n\n case 8:\n client = _context9.sent;\n\n case 9:\n if (!(client !== undefined && client.name !== undefined && client.name.resolve !== undefined)) {\n _context9.next = 51;\n break;\n }\n\n this.getLogger().info('Processing IPNS name resolve...');\n _context9.next = 13;\n return client.name.resolve(id, {\n nocache: false,\n recursive: true\n });\n\n case 13:\n resolvedSource = _context9.sent;\n // https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26\n lastResult = null;\n _iteratorNormalCompletion2 = true;\n _didIteratorError2 = false;\n _context9.prev = 17;\n _iterator2 = (0, _asyncIterator2[\"default\"])(resolvedSource);\n\n case 19:\n _context9.next = 21;\n return _iterator2.next();\n\n case 21:\n _step2 = _context9.sent;\n _iteratorNormalCompletion2 = _step2.done;\n _context9.next = 25;\n return _step2.value;\n\n case 25:\n _value2 = _context9.sent;\n\n if (_iteratorNormalCompletion2) {\n _context9.next = 32;\n break;\n }\n\n resolved = _value2;\n lastResult = resolved;\n\n case 29:\n _iteratorNormalCompletion2 = true;\n _context9.next = 19;\n break;\n\n case 32:\n _context9.next = 38;\n break;\n\n case 34:\n _context9.prev = 34;\n _context9.t0 = _context9[\"catch\"](17);\n _didIteratorError2 = true;\n _iteratorError2 = _context9.t0;\n\n case 38:\n _context9.prev = 38;\n _context9.prev = 39;\n\n if (!(!_iteratorNormalCompletion2 && _iterator2[\"return\"] != null)) {\n _context9.next = 43;\n break;\n }\n\n _context9.next = 43;\n return _iterator2[\"return\"]();\n\n case 43:\n _context9.prev = 43;\n\n if (!_didIteratorError2) {\n _context9.next = 46;\n break;\n }\n\n throw _iteratorError2;\n\n case 46:\n return _context9.finish(43);\n\n case 47:\n return _context9.finish(38);\n\n case 48:\n if (!(lastResult == null || lastResult === undefined)) {\n _context9.next = 50;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 50:\n return _context9.abrupt(\"return\", lastResult);\n\n case 51:\n throw new Error('Undefined IPNS name resolve...');\n\n case 52:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, this, [[17, 34, 38, 48], [39,, 43, 47]]);\n }));\n\n return function (_x12, _x13) {\n return _ref9.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.getKeys = /*#__PURE__*/function () {\n var _ref10 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee10(client) {\n var result;\n return _regenerator[\"default\"].wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context10.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n if (!client.enable) {\n _context10.next = 6;\n break;\n }\n\n _context10.next = 5;\n return client.enable({\n commands: ['key']\n });\n\n case 5:\n client = _context10.sent;\n\n case 6:\n if (!(client !== undefined && client.key !== undefined && client.key.list !== undefined)) {\n _context10.next = 14;\n break;\n }\n\n this.getLogger().info('Processing IPNS key list...');\n _context10.next = 10;\n return client.key.list();\n\n case 10:\n result = _context10.sent;\n\n if (!(result === undefined || result == null || Array.isArray(result) === false)) {\n _context10.next = 13;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 13:\n return _context10.abrupt(\"return\", result);\n\n case 14:\n throw new Error('Undefined IPNS key list...');\n\n case 15:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, this);\n }));\n\n return function (_x14) {\n return _ref10.apply(this, arguments);\n };\n }(); // Only rsa is supported yet...\n // https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/KEY.md#keygen\n // https://github.com/libp2p/js-libp2p-crypto/issues/145\n\n\n IpfsLibrary.prototype.genKey = /*#__PURE__*/function () {\n var _ref11 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee11(client, ipnsName) {\n var key;\n return _regenerator[\"default\"].wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context11.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n ipnsName = ipnsName == null || ipnsName === undefined || ipnsName.trim() === '' ? null : ipnsName.trim();\n\n if (!(ipnsName == null)) {\n _context11.next = 5;\n break;\n }\n\n throw new Error('Undefined IPNS name...');\n\n case 5:\n if (!client.enable) {\n _context11.next = 9;\n break;\n }\n\n _context11.next = 8;\n return client.enable({\n commands: ['key']\n });\n\n case 8:\n client = _context11.sent;\n\n case 9:\n if (!(client !== undefined && client.key !== undefined && client.key.gen !== undefined)) {\n _context11.next = 17;\n break;\n }\n\n this.getLogger().info('Processing IPNS key gen...');\n _context11.next = 13;\n return client.key.gen(ipnsName, {\n type: 'rsa',\n size: 2048\n });\n\n case 13:\n key = _context11.sent;\n\n if (!(key === undefined || key == null || key.id === undefined || key.id == null)) {\n _context11.next = 16;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 16:\n return _context11.abrupt(\"return\", key.id);\n\n case 17:\n throw new Error('Undefined IPNS key gen...');\n\n case 18:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11, this);\n }));\n\n return function (_x15, _x16) {\n return _ref11.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.rmKey = /*#__PURE__*/function () {\n var _ref12 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee12(client, ipnsName) {\n var key;\n return _regenerator[\"default\"].wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context12.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n ipnsName = ipnsName == null || ipnsName === undefined || ipnsName.trim() === '' ? null : ipnsName.trim();\n\n if (!(ipnsName == null)) {\n _context12.next = 5;\n break;\n }\n\n throw new Error('Undefined IPNS name...');\n\n case 5:\n if (!client.enable) {\n _context12.next = 9;\n break;\n }\n\n _context12.next = 8;\n return client.enable({\n commands: ['key']\n });\n\n case 8:\n client = _context12.sent;\n\n case 9:\n if (!(client !== undefined && client.key !== undefined && client.key.rm !== undefined)) {\n _context12.next = 17;\n break;\n }\n\n this.getLogger().info('Processing IPNS key rm...');\n _context12.next = 13;\n return client.key.rm(ipnsName);\n\n case 13:\n key = _context12.sent;\n\n if (!(key === undefined || key == null || key.id === undefined || key.id == null)) {\n _context12.next = 16;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 16:\n return _context12.abrupt(\"return\", key.id);\n\n case 17:\n throw new Error('Undefined IPNS key rm...');\n\n case 18:\n case \"end\":\n return _context12.stop();\n }\n }\n }, _callee12, this);\n }));\n\n return function (_x17, _x18) {\n return _ref12.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.renameKey = /*#__PURE__*/function () {\n var _ref13 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee13(client, oldIpnsName, newIpnsName) {\n var key, id, was, now, overwrite;\n return _regenerator[\"default\"].wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context13.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n oldIpnsName = oldIpnsName == null || oldIpnsName === undefined || oldIpnsName.trim() === '' ? null : oldIpnsName.trim();\n\n if (!(oldIpnsName == null)) {\n _context13.next = 5;\n break;\n }\n\n throw new Error('Undefined Old IPNS name...');\n\n case 5:\n newIpnsName = newIpnsName == null || newIpnsName === undefined || newIpnsName.trim() === '' ? null : newIpnsName.trim();\n\n if (!(newIpnsName == null)) {\n _context13.next = 8;\n break;\n }\n\n throw new Error('Undefined New IPNS name...');\n\n case 8:\n if (!client.enable) {\n _context13.next = 12;\n break;\n }\n\n _context13.next = 11;\n return client.enable({\n commands: ['key']\n });\n\n case 11:\n client = _context13.sent;\n\n case 12:\n if (!(client !== undefined && client.key !== undefined && client.key.rename !== undefined)) {\n _context13.next = 28;\n break;\n }\n\n this.getLogger().info('Processing IPNS key rename...');\n _context13.next = 16;\n return client.key.rename(oldIpnsName, newIpnsName);\n\n case 16:\n key = _context13.sent;\n\n if (!(key === undefined || key == null)) {\n _context13.next = 19;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 19:\n id = null;\n\n if (key.id !== undefined && key.id !== null) {\n id = key.id;\n }\n\n was = null;\n\n if (key.was !== undefined && key.was !== null) {\n was = key.was;\n }\n\n now = null;\n\n if (key.now !== undefined && key.now !== null) {\n now = key.now;\n }\n\n overwrite = null;\n\n if (key.overwrite !== undefined && key.overwrite !== null) {\n overwrite = key.overwrite;\n }\n\n return _context13.abrupt(\"return\", {\n id: id,\n was: was,\n now: now,\n overwrite: overwrite\n });\n\n case 28:\n throw new Error('Undefined IPNS key rename...');\n\n case 29:\n case \"end\":\n return _context13.stop();\n }\n }\n }, _callee13, this);\n }));\n\n return function (_x19, _x20, _x21) {\n return _ref13.apply(this, arguments);\n };\n }();\n\n module.exports = IpfsLibrary;\n})();\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"@babel/runtime/helpers/asyncIterator\":1,\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/regenerator\":5,\"buffer\":8,\"ipfs-provider\":41,\"window-or-global\":90}],95:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\n(function () {\n /*jslint node: true, browser: true */\n 'use strict';\n\n var name = 'ipfs-loader';\n var eruda = 'https://cdn.jsdelivr.net/npm/eruda@2.3.3/eruda.min.js';\n var erudaSri = 'sha384-O4NQOgwNPEet1/xZmB7hYYb/vMdpWyVJcqL+47zpRWuXtRlhwnEoNM/w3/C3HCoP';\n var ethers = 'https://cdn.jsdelivr.net/npm/ethers@4.0.47/dist/ethers.min.js';\n var ethersSri = 'sha384-Gqf9kLa8S94/ZNsQCadoW0KeT6tg+fapxds7gOiSL72KeOtfgTOmHvJENrQljse5';\n var ipfsHttpClient = 'https://cdn.jsdelivr.net/npm/ipfs-http-client@44.1.1/dist/index.min.js';\n var ipfsHttpClientSri = 'sha384-NvfAKWfwAGQtt53C6QkNMM2whGsF9BeeXkfOWkFV3qmyh1VLVmfxxUrvLcgw0ZYr';\n var react = 'https://cdn.jsdelivr.net/npm/react@16.13.1/index.min.js';\n var reactSri = 'sha384-tJZghk8WS6CmqUSDnhTaMhgcW1ugVL+tICSVl9SKvnxyMxeSPC2i5yL8lNMggV+4';\n var threeBox = 'https://cdn.jsdelivr.net/npm/3box@1.19.0/dist/3box.min.js';\n var threeBoxSri = 'sha384-tbBobUw5fP4CqNpLpF3UHPGHmaCFjUPlgcZP1Oq7Uo+QspWkAx1bT6jXsq87y5vG';\n var threeBoxProfile = 'https://cdn.jsdelivr.net/npm/profile-hover@1.1.2/dist/reactBundle.min.js';\n var threeBoxProfileSri = 'sha384-Rta8n7/RH5Fw3LzGDoGIu0Sskn/laKq9RKpWz2MzxPh/XVxPOd2HInosBPq1vukJ';\n\n var IpfsLoader = function IpfsLoader(ipfsBundle) {\n this.ipfsBundle = ipfsBundle;\n };\n\n IpfsLoader.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n }; // https://www.srihash.org/\n // https://github.com/liriliri/eruda\n\n\n IpfsLoader.prototype.loadErudaLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].eruda === 'undefined')) {\n _context.next = 4;\n break;\n }\n\n _context.next = 3;\n return this.loadLibrary('ErudaLibrary', eruda, erudaSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].eruda !== 'undefined') {\n this.getLogger().info(\"Loaded ErudaLibrary:\\n \".concat(eruda));\n }\n\n case 4:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n })); // https://www.srihash.org/\n // https://github.com/ethers-io/ethers.js/\n\n IpfsLoader.prototype.loadEtherJsLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].ethers === 'undefined')) {\n _context2.next = 4;\n break;\n }\n\n _context2.next = 3;\n return this.loadLibrary('EtherJsLibrary', ethers, ethersSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].ethers !== 'undefined') {\n this.getLogger().info(\"Loaded EtherJsLibrary:\\n \".concat(ethers));\n }\n\n case 4:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n })); // https://www.srihash.org/\n // https://github.com/ipfs/js-ipfs-http-client\n\n IpfsLoader.prototype.loadIpfsHttpLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].IpfsHttpClient === 'undefined')) {\n _context3.next = 4;\n break;\n }\n\n _context3.next = 3;\n return this.loadLibrary('IpfsHttpLibrary', ipfsHttpClient, ipfsHttpClientSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].IpfsHttpClient !== 'undefined') {\n this.getLogger().info(\"Loaded IpfsHttpLibrary:\\n \".concat(ipfsHttpClient));\n }\n\n case 4:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n })); // https://www.srihash.org/\n\n IpfsLoader.prototype.loadReactLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4() {\n return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].React === 'undefined')) {\n _context4.next = 4;\n break;\n }\n\n _context4.next = 3;\n return this.loadLibrary('ReactLibrary', react, reactSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].React !== 'undefined') {\n this.getLogger().info(\"Loaded React:\\n \".concat(react));\n }\n\n case 4:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n })); // https://www.srihash.org/\n // https://github.com/3box\n\n IpfsLoader.prototype.loadThreeBoxLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5() {\n return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].Box === 'undefined')) {\n _context5.next = 4;\n break;\n }\n\n _context5.next = 3;\n return this.loadLibrary('ThreeBoxLibrary', threeBox, threeBoxSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].Box !== 'undefined') {\n this.getLogger().info(\"Loaded ThreeBoxLibrary:\\n \".concat(threeBox));\n }\n\n case 4:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this);\n })); // https://www.srihash.org/\n // https://github.com/3box\n\n IpfsLoader.prototype.loadThreeBoxProfileLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6() {\n return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].ProfileHover === 'undefined')) {\n _context6.next = 4;\n break;\n }\n\n _context6.next = 3;\n return this.loadLibrary('ThreeBoxProfileLibrary', threeBoxProfile, threeBoxProfileSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].ProfileHover !== 'undefined') {\n this.getLogger().info(\"Loaded ThreeBoxProfileLibrary:\\n \".concat(threeBoxProfile));\n }\n\n case 4:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n /*eslint no-new: \"off\", no-new-func: \"off\"*/\n\n IpfsLoader.prototype.supportDynamicImport = function () {\n try {\n new Function('import(\"\")');\n return true;\n } catch (error) {\n return false;\n }\n }; // https://observablehq.com/@bryangingechen/dynamic-import-polyfill\n\n\n IpfsLoader.prototype.loadLibrary = function (id, url, sri, asModule) {\n // Dynamic import\n // if (this.supportDynamicImport()) {\n // try {\n // return new Function(`return import(\"${url}\")`)();\n // } catch (error) {\n // // Ignore\n // }\n // }\n var self = this;\n return new Promise(function (resolve, reject) {\n // Process\n var script = _windowOrGlobal[\"default\"].document.createElement('script'); // Functions\n\n\n var cleanup = function cleanup() {\n try {\n delete _windowOrGlobal[\"default\"][id];\n script.onerror = null;\n script.onload = null;\n script.remove();\n URL.revokeObjectURL(script.src);\n script.src = '';\n } catch (error) {\n self.getLogger().error(error);\n }\n };\n\n script.onload = function () {\n resolve(_windowOrGlobal[\"default\"][id]);\n cleanup();\n };\n\n script.onerror = function () {\n reject(new Error(\"Failed to load: \".concat(url)));\n cleanup();\n }; // Attributes\n\n\n if (asModule) {\n script.type = 'module';\n } else {\n script.type = 'text/javascript';\n }\n\n script.id = id;\n script.async = false;\n script.defer = 'defer';\n\n if (sri) {\n script.integrity = sri;\n }\n\n script.crossOrigin = 'anonymous'; // URL\n\n script.src = url; // Load\n\n _windowOrGlobal[\"default\"].document.head.appendChild(script);\n });\n };\n\n IpfsLoader.prototype.isJson = function (content) {\n if (content !== undefined && content !== null && typeof content === 'string') {\n try {\n JSON.parse(content);\n return true;\n } catch (error) {// Ignore\n }\n }\n\n return false;\n };\n\n IpfsLoader.prototype.httpGetToUint8Array = function (url) {\n var self = this;\n var xhr = new XMLHttpRequest();\n return new Promise(function (resolve, reject) {\n xhr.responseType = 'arraybuffer';\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4 && xhr.status !== 0) {\n if (xhr.status >= 300) {\n reject(new Error($tw.language.getString('NetworkError/XMLHttpRequest')));\n return;\n }\n\n try {\n var array = new Uint8Array(this.response);\n self.getLogger().info(\"[\".concat(xhr.status, \"] Loaded:\\n \").concat(url));\n resolve(array);\n } catch (error) {\n reject(error);\n }\n }\n };\n\n xhr.onerror = function () {\n reject(new Error($tw.language.getString('NetworkError/XMLHttpRequest')));\n };\n\n try {\n xhr.open('get', url, true);\n xhr.send();\n } catch (error) {\n reject(error);\n }\n });\n };\n /*\n * Load to Base64\n */\n\n\n IpfsLoader.prototype.loadToBase64 = /*#__PURE__*/function () {\n var _ref7 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7(url) {\n var array, decrypted, data;\n return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n _context7.next = 2;\n return this.httpGetToUint8Array(url);\n\n case 2:\n array = _context7.sent;\n\n if (!(array.length === 0)) {\n _context7.next = 5;\n break;\n }\n\n return _context7.abrupt(\"return\", {\n data: '',\n decrypted: false\n });\n\n case 5:\n if (!this.isUtf8ArrayEncrypted(array)) {\n _context7.next = 10;\n break;\n }\n\n _context7.next = 8;\n return this.decryptUint8ArrayToBase64(array);\n\n case 8:\n decrypted = _context7.sent;\n return _context7.abrupt(\"return\", {\n data: decrypted,\n decrypted: true\n });\n\n case 10:\n data = this.ipfsBundle.Uint8ArrayToBase64(array);\n return _context7.abrupt(\"return\", {\n data: data,\n decrypted: false\n });\n\n case 12:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function (_x) {\n return _ref7.apply(this, arguments);\n };\n }();\n /*\n * Load to UTF-8\n */\n\n\n IpfsLoader.prototype.loadToUtf8 = /*#__PURE__*/function () {\n var _ref8 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee8(url) {\n var array;\n return _regenerator[\"default\"].wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n _context8.next = 2;\n return this.httpGetToUint8Array(url);\n\n case 2:\n array = _context8.sent;\n\n if (!(array.length === 0)) {\n _context8.next = 5;\n break;\n }\n\n return _context8.abrupt(\"return\", {\n data: '',\n decrypted: false\n });\n\n case 5:\n if (!this.isUtf8ArrayEncrypted(array)) {\n _context8.next = 10;\n break;\n }\n\n _context8.next = 8;\n return this.decryptUint8ArrayToUtf8(array);\n\n case 8:\n _context8.t0 = _context8.sent;\n return _context8.abrupt(\"return\", {\n data: _context8.t0,\n decrypted: true\n });\n\n case 10:\n return _context8.abrupt(\"return\", {\n data: this.ipfsBundle.Utf8ArrayToStr(array),\n decrypted: false\n });\n\n case 11:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function (_x2) {\n return _ref8.apply(this, arguments);\n };\n }();\n /*\n * Decrypt Uint8 Array to Base64 String\n */\n\n\n IpfsLoader.prototype.decryptUint8ArrayToBase64 = /*#__PURE__*/function () {\n var _ref9 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee9(array) {\n var data;\n return _regenerator[\"default\"].wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n data = this.ipfsBundle.Utf8ArrayToStr(array);\n\n if (!($tw.crypto.hasPassword() === false)) {\n _context9.next = 7;\n break;\n }\n\n _context9.next = 4;\n return this.decryptFromPasswordPrompt(data);\n\n case 4:\n data = _context9.sent;\n _context9.next = 8;\n break;\n\n case 7:\n data = $tw.crypto.decrypt(data, $tw.crypto.currentPassword);\n\n case 8:\n return _context9.abrupt(\"return\", btoa(data));\n\n case 9:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, this);\n }));\n\n return function (_x3) {\n return _ref9.apply(this, arguments);\n };\n }();\n /*\n * Decrypt Uint8 Array to UTF-8 String\n */\n\n\n IpfsLoader.prototype.decryptUint8ArrayToUtf8 = /*#__PURE__*/function () {\n var _ref10 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee10(array) {\n var data;\n return _regenerator[\"default\"].wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n data = this.ipfsBundle.Utf8ArrayToStr(array);\n\n if (!($tw.crypto.hasPassword() === false)) {\n _context10.next = 7;\n break;\n }\n\n _context10.next = 4;\n return this.decryptFromPasswordPrompt(data);\n\n case 4:\n data = _context10.sent;\n _context10.next = 8;\n break;\n\n case 7:\n data = $tw.crypto.decrypt(data, $tw.crypto.currentPassword);\n\n case 8:\n return _context10.abrupt(\"return\", data);\n\n case 9:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, this);\n }));\n\n return function (_x4) {\n return _ref10.apply(this, arguments);\n };\n }();\n\n IpfsLoader.prototype.decryptFromPasswordPrompt = function (encrypted) {\n return new Promise(function (resolve, reject) {\n $tw.passwordPrompt.createPrompt({\n serviceName: 'Enter a password to decrypt the imported content!!',\n noUserName: true,\n canCancel: true,\n submitText: 'Decrypt',\n callback: function callback(data) {\n if (!data) {\n return false;\n } // Decrypt\n\n\n try {\n var content = $tw.crypto.decrypt(encrypted, data.password);\n resolve(content);\n return true;\n } catch (error) {\n reject(error);\n }\n\n return false;\n }\n });\n });\n };\n\n IpfsLoader.prototype.isUtf8ArrayEncrypted = function (content) {\n // Check\n if (content instanceof Uint8Array === false || content.length === 0) {\n return false;\n } // Process\n\n\n var standford = this.ipfsBundle.StringToUint8Array('{\"iv\":\"');\n var encrypted = false;\n\n for (var i = 0; i < content.length && i < standford.length; i++) {\n if (content[i] === standford[i]) {\n encrypted = true;\n } else {\n encrypted = false;\n break;\n }\n }\n\n return encrypted;\n };\n\n module.exports = IpfsLoader;\n})();\n\n},{\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/regenerator\":5,\"window-or-global\":90}],96:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\nvar _universalUrl = require(\"universal-url\");\n\n(function () {\n /*jslint node: true, browser: true */\n 'use strict';\n\n var name = 'ipfs-url';\n\n var IpfsUrl = function IpfsUrl() {};\n\n IpfsUrl.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n IpfsUrl.prototype.getIpfsDefaultApiUrl = function () {\n return new _universalUrl.URL(this.getIpfsDefaultApi());\n };\n\n IpfsUrl.prototype.getIpfsDefaultGatewayUrl = function () {\n return new _universalUrl.URL(this.getIpfsDefaultGateway());\n };\n\n IpfsUrl.prototype.getIpfsApiUrl = function () {\n try {\n return this.getUrl($tw.utils.getIpfsSaverApiUrl());\n } catch (error) {\n return this.getIpfsDefaultApiUrl();\n }\n };\n\n IpfsUrl.prototype.getIpfsGatewayUrl = function () {\n try {\n return this.getUrl($tw.utils.getIpfsSaverGatewayUrl());\n } catch (error) {\n return this.getIpfsDefaultGatewayUrl();\n }\n };\n\n IpfsUrl.prototype.getIpfsDefaultApi = function () {\n return 'https://ipfs.infura.io:5001';\n };\n\n IpfsUrl.prototype.getIpfsDefaultGateway = function () {\n return 'https://ipfs.infura.io';\n };\n /**\n * url.href;\n * url.origin\n * url.protocol;\n * url.username;\n * url.password;\n * url.host;\n * url.hostname;\n * url.port;\n * url.pathname;\n * url.search;\n * url.hash;\n * https://jsdom.github.io/whatwg-url/\n * https://github.com/stevenvachon/universal-url\n * https://github.com/stevenvachon/universal-url-lite\n * https://url.spec.whatwg.org/\n */\n\n\n IpfsUrl.prototype.getDocumentUrl = function () {\n try {\n return new _universalUrl.URL(_windowOrGlobal[\"default\"].location.href);\n } catch (error) {\n this.getLogger().error(error);\n }\n\n throw new Error('Invalid current HTML Document URL...');\n };\n\n IpfsUrl.prototype.getUrl = function (url, base) {\n try {\n return new _universalUrl.URL(url, base);\n } catch (error) {// Ignore\n }\n\n throw new Error('Invalid URL...');\n };\n\n IpfsUrl.prototype.getIpfsBaseUrl = function () {\n var base = this.getIpfsGatewayUrl();\n\n try {\n if ($tw.utils.getIpfsUrlPolicy() === 'origin') {\n base = this.getDocumentUrl();\n\n if (base.protocol === 'file:') {\n return this.getUrl(base.toString());\n }\n }\n } catch (error) {\n base = this.getIpfsGatewayUrl();\n }\n\n return this.getUrl(\"\".concat(base.protocol, \"//\").concat(base.host));\n };\n\n IpfsUrl.prototype.normalizeUrl = function (value, base) {\n value = value === undefined || value == null || value.toString().trim() === '' ? null : value.toString().trim();\n\n if (value == null) {\n return null;\n } // Parse\n\n\n var text = false;\n var url = null; // Text or ENS\n\n try {\n url = this.getUrl(value);\n } catch (error) {\n if (value.startsWith('/') === false && value.startsWith('./') === false && value.startsWith('../') === false) {\n text = true;\n\n try {\n url = this.getUrl(\"https://\".concat(value));\n\n if (url.hostname.endsWith('.eth') === false && url.hostname.endsWith('.eth.link') === false) {\n url = null;\n } else {\n text = false;\n }\n } catch (error) {// ignore\n }\n }\n }\n\n if (text) {\n return null;\n } // Invalid URL, try to parse with a Base URL\n\n\n if (url == null) {\n url = this.getUrl(value, base !== undefined && base !== null ? base : this.getIpfsBaseUrl());\n } // Remove .link from .eth.link\n\n\n if (url.hostname.endsWith('.eth.link')) {\n url.hostname = url.hostname.substring(0, url.hostname.indexOf('.link'));\n }\n\n return url;\n };\n\n module.exports = IpfsUrl;\n})();\n\n},{\"@babel/runtime/helpers/interopRequireDefault\":3,\"universal-url\":85,\"window-or-global\":90}]},{},[93])(93)\n});\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ipfs-controller.js": {
"title": "$:/plugins/ipfs/ipfs-controller.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-controller.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Controller\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const EnsWrapper = require('$:/plugins/ipfs/ens-wrapper.js').EnsWrapper\n const IpfsBundle = require('$:/plugins/ipfs/ipfs-bundle.js').IpfsBundle\n const IpfsWrapper = require('$:/plugins/ipfs/ipfs-wrapper.js').IpfsWrapper\n\n const ipfsKeyword = 'ipfs'\n const ipnsKeyword = 'ipns'\n\n const name = 'ipfs-controller'\n\n var IpfsController = function () {\n this.ipfsBundle = new IpfsBundle()\n this.ipfsBundle.init()\n this.ensWrapper = new EnsWrapper(this.ipfsBundle)\n this.ipfsUrl = this.ipfsBundle.ipfsUrl\n this.ipfsWrapper = new IpfsWrapper(this.ipfsBundle)\n this.ipfsClients = new Map()\n this.pin = []\n this.unpin = []\n }\n\n IpfsController.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsController.prototype.isCid = function (cid) {\n return this.ipfsBundle.isCid(cid)\n }\n\n IpfsController.prototype.load3BoxProfile = async function () {\n return await this.ensWrapper.load3BoxProfile()\n }\n\n IpfsController.prototype.loadToBase64 = async function (url) {\n return await this.ipfsBundle.loadToBase64(url)\n }\n\n IpfsController.prototype.loadToUtf8 = async function (url) {\n return await this.ipfsBundle.loadToUtf8(url)\n }\n\n IpfsController.prototype.Base64ToUint8Array = function (base64) {\n return this.ipfsBundle.Base64ToUint8Array(base64)\n }\n\n IpfsController.prototype.Uint8ArrayToBase64 = function (uint8) {\n return this.ipfsBundle.Uint8ArrayToBase64(uint8)\n }\n\n IpfsController.prototype.StringToUint8Array = function (string) {\n return this.ipfsBundle.StringToUint8Array(string)\n }\n\n IpfsController.prototype.Utf8ArrayToStr = function (array) {\n return this.ipfsBundle.Utf8ArrayToStr(array)\n }\n\n IpfsController.prototype.requestToPin = function (cid, ipnsKey, value) {\n const self = this\n return new Promise((resolve, reject) => {\n if (ipnsKey !== undefined && ipnsKey !== null) {\n self\n .resolveUrl(true, true, value)\n .then(data => {\n const { cid, resolvedUrl } = data\n if (resolvedUrl !== null && cid !== null) {\n resolve(self.addToPin(cid, resolvedUrl))\n } else {\n resolve(false)\n }\n })\n .catch(error => {\n reject(error)\n })\n } else if (cid !== undefined && cid !== null) {\n const normalizedUrl = self.normalizeUrl(`/${ipfsKeyword}/${cid}`)\n resolve(self.addToPin(cid, normalizedUrl))\n } else {\n resolve(false)\n }\n })\n }\n\n IpfsController.prototype.addToPin = function (cid, normalizedUrl) {\n if (cid !== undefined && cid !== null) {\n var index = this.unpin.indexOf(cid)\n if (index !== -1) {\n this.unpin.splice(index, 1)\n this.getLogger().info(`Cancel request to Unpin:\\n ${normalizedUrl}`)\n return false\n }\n if (this.pin.indexOf(cid) === -1) {\n this.pin.push(cid)\n this.getLogger().info(`Request to Pin:\\n ${normalizedUrl}`)\n return true\n }\n }\n return false\n }\n\n IpfsController.prototype.requestToUnpin = function (cid, ipnsKey, value) {\n const self = this\n return new Promise((resolve, reject) => {\n if ($tw.utils.getIpfsUnpin() === false) {\n resolve(false)\n }\n if (ipnsKey !== undefined && ipnsKey !== null) {\n self\n .resolveUrl(true, true, value)\n .then(data => {\n const { cid, resolvedUrl } = data\n if (resolvedUrl !== null && cid !== null) {\n resolve(self.addToUnpin(cid, resolvedUrl))\n } else {\n resolve(false)\n }\n })\n .catch(error => {\n reject(error)\n })\n } else if (cid !== undefined && cid !== null) {\n const normalizedUrl = self.normalizeUrl(`/${ipfsKeyword}/${cid}`)\n resolve(self.addToUnpin(cid, normalizedUrl))\n } else {\n resolve(false)\n }\n })\n }\n\n IpfsController.prototype.addToUnpin = function (cid, normalizedUrl) {\n if (cid !== undefined && cid !== null) {\n // Discard\n var index = this.pin.indexOf(cid)\n if (index !== -1) {\n this.pin.splice(index, 1)\n this.getLogger().info(`Cancel request to Pin:\\n ${normalizedUrl}`)\n return false\n }\n // Add to unpin\n if (this.unpin.indexOf(cid) === -1) {\n this.unpin.push(cid)\n this.getLogger().info(`Request to unpin:\\n ${normalizedUrl}`)\n return true\n }\n }\n return false\n }\n\n IpfsController.prototype.removeFromPinUnpin = function (cid, normalizedUrl) {\n if (cid !== undefined && cid !== null) {\n var index = this.pin.indexOf(cid)\n if (index !== -1) {\n this.pin.splice(index, 1)\n this.getLogger().info(`Cancel request to Pin:\\n ${normalizedUrl}`)\n }\n var index = this.unpin.indexOf(cid)\n if (index !== -1) {\n this.unpin.splice(index, 1)\n this.getLogger().info(`Cancel request to Unpin:\\n ${normalizedUrl}`)\n }\n }\n }\n\n IpfsController.prototype.pinToIpfs = async function (cid) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.pinToIpfs(ipfs, cid)\n }\n\n IpfsController.prototype.unpinFromIpfs = async function (cid) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.unpinFromIpfs(ipfs, cid)\n }\n\n IpfsController.prototype.addToIpfs = async function (content) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.addToIpfs(ipfs, content)\n }\n\n IpfsController.prototype.generateIpnsKey = async function (ipnsName) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.generateIpnsKey(ipfs, ipnsName)\n }\n\n IpfsController.prototype.removeIpnsKey = async function (ipnsName) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.removeIpnsKey(ipfs, ipnsName)\n }\n\n IpfsController.prototype.renameIpnsName = async function (\n oldIpnsName,\n newIpnsName\n ) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.renameIpnsName(ipfs, oldIpnsName, newIpnsName)\n }\n\n IpfsController.prototype.decodeCid = function (pathname) {\n return this.ipfsBundle.decodeCid(pathname)\n }\n\n IpfsController.prototype.getIpnsIdentifiers = async function (\n identifier,\n ipnsName\n ) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.getIpnsIdentifiers(ipfs, identifier, ipnsName)\n }\n\n IpfsController.prototype.resolveIpnsKey = async function (ipnsKey) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.resolveIpnsKey(ipfs, ipnsKey)\n }\n\n IpfsController.prototype.publishIpnsName = async function (\n cid,\n ipnsKey,\n ipnsName\n ) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.publishIpnsName(cid, ipfs, ipnsKey, ipnsName)\n }\n\n IpfsController.prototype.getIpfsBaseUrl = function () {\n return this.ipfsUrl.getIpfsBaseUrl()\n }\n\n IpfsController.prototype.normalizeUrl = function (value, base) {\n return this.ipfsUrl.normalizeUrl(value, base)\n }\n\n IpfsController.prototype.getDocumentUrl = function () {\n return this.ipfsUrl.getDocumentUrl()\n }\n\n IpfsController.prototype.getIpfsDefaultApi = function () {\n return this.ipfsUrl.getIpfsDefaultApi()\n }\n\n IpfsController.prototype.getIpfsDefaultGateway = function () {\n return this.ipfsUrl.getIpfsDefaultGateway()\n }\n\n IpfsController.prototype.getIpfsApiUrl = function () {\n return this.ipfsUrl.getIpfsApiUrl()\n }\n\n IpfsController.prototype.getIpfsGatewayUrl = function () {\n return this.ipfsUrl.getIpfsGatewayUrl()\n }\n\n IpfsController.prototype.resolveUrl = async function (\n resolveIpns,\n resolveEns,\n value,\n base\n ) {\n var cid = null\n var ipnsKey = null\n var ipnsName = null\n var normalizedUrl = null\n var resolvedUrl = null\n value =\n value === undefined || value == null || value.toString().trim() === ''\n ? null\n : value.toString().trim()\n if (value == null) {\n return {\n cid: null,\n ipnsKey: null,\n ipnsName: null,\n normalizedUrl: null,\n resolvedUrl: null\n }\n }\n try {\n normalizedUrl = this.normalizeUrl(value, base)\n } catch (error) {\n // Ignore\n }\n if (normalizedUrl == null) {\n return {\n cid: null,\n ipnsKey: null,\n ipnsName: null,\n normalizedUrl: null,\n resolvedUrl: null\n }\n }\n var { cid, ipnsIdentifier, protocol } = this.decodeCid(\n normalizedUrl.pathname\n )\n if (\n protocol !== null &&\n protocol === ipnsKeyword &&\n ipnsIdentifier !== null\n ) {\n var { ipnsKey, ipnsName, normalizedUrl } = await this.getIpnsIdentifiers(\n ipnsIdentifier\n )\n if (resolveIpns) {\n this.getLogger().info(`Resolving IPNS key:\\n ${normalizedUrl}`)\n $tw.utils.alert(name, 'Resolving an IPNS key...')\n try {\n cid = await this.resolveIpnsKey(ipnsKey)\n if (cid !== null) {\n resolvedUrl = this.normalizeUrl(`/${ipfsKeyword}/${cid}`, base)\n this.getLogger().info(\n `Successfully resolved IPNS key:\\n ${normalizedUrl}`\n )\n $tw.utils.alert(name, 'Successfully resolved an IPNS key...')\n }\n } catch (error) {\n // Unable to resolve the key\n // It usually happen when the key is not initialized\n cid = null\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n }\n } else if (resolveEns && normalizedUrl.hostname.endsWith('.eth')) {\n var { content: cid, resolvedUrl } = await this.resolveEns(\n normalizedUrl.hostname\n )\n } else {\n resolvedUrl = normalizedUrl\n }\n return {\n cid: cid,\n ipnsKey: ipnsKey,\n ipnsName: ipnsName,\n normalizedUrl: normalizedUrl,\n resolvedUrl: resolvedUrl\n }\n }\n\n IpfsController.prototype.getUrl = function (url, base) {\n return this.ipfsUrl.getUrl(\n url,\n base !== undefined && base !== null ? base : this.getIpfsBaseUrl()\n )\n }\n\n IpfsController.prototype.isJson = function (content) {\n return this.ipfsBundle.isJson(content)\n }\n\n IpfsController.prototype.getIpfsClient = async function () {\n // Provider\n const ipfsProvider = $tw.utils.getIpfsProvider()\n // IPFS companion\n if (ipfsProvider === 'window') {\n const client = await this.ipfsWrapper.getWindowIpfsClient()\n return {\n ipfs: client.ipfs,\n provider: client.provider\n }\n }\n // Default, try IPFS companion\n if (ipfsProvider === 'default') {\n try {\n const client = await this.ipfsWrapper.getWindowIpfsClient()\n return {\n ipfs: client.ipfs,\n provider: client.provider\n }\n } catch (error) {\n // Ignore, fallback to HTTP\n }\n }\n // Current API URL\n const url = this.getIpfsApiUrl()\n // Check\n if (url === undefined || url == null || url.toString().trim() === '') {\n throw new Error('Undefined IPFS API URL...')\n }\n // HTTP Client\n const client = this.ipfsClients.get(url.toString())\n if (client !== undefined) {\n // Log\n this.getLogger().info(`Reuse IPFS provider: \"${client.provider}\"`)\n // Done\n return {\n ipfs: client.ipfs,\n provider: client.provider\n }\n }\n // Build a new HTTP client\n const policy = await this.ipfsWrapper.getHttpIpfsClient(url)\n const ipfs = policy.ipfs\n const provider = policy.provider\n // Store\n this.ipfsClients.set(url.toString(), { ipfs, provider })\n // Log\n this.getLogger().info(`New IPFS provider: \"${policy.provider}\"`)\n // Done\n return {\n ipfs: ipfs,\n provider: provider\n }\n }\n\n IpfsController.prototype.resolveEns = async function (ensDomain) {\n const { web3 } = await this.getWeb3Provider()\n const { content, protocol } = await this.ensWrapper.getContentHash(\n ensDomain,\n web3\n )\n if (content !== null && protocol !== null) {\n const url = this.normalizeUrl(`/${protocol}/${content}`)\n this.getLogger().info(\n `Successfully fetched ENS domain content: \"${ensDomain}\"\\n ${url}`\n )\n return {\n content: content,\n protocol: protocol,\n resolvedUrl: url\n }\n }\n return {\n content: null,\n protocol: null,\n resolvedUrl: null\n }\n }\n\n IpfsController.prototype.setEns = async function (ensDomain, cid) {\n const { web3, account } = await this.getEnabledWeb3Provider()\n const { cidV0 } = await this.ensWrapper.setContentHash(\n ensDomain,\n cid,\n web3,\n account\n )\n if (cidV0 !== null) {\n const url = this.normalizeUrl(`/ipfs/${cidV0}`)\n this.getLogger().info(\n `Successfully set ENS domain content:\\n ${url} \\n to: \"${ensDomain}\"`\n )\n return true\n }\n return false\n }\n\n IpfsController.prototype.getEthereumProvider = async function () {\n return await this.ensWrapper.getEthereumProvider()\n }\n\n IpfsController.prototype.getEnabledWeb3Provider = async function () {\n return await this.ensWrapper.getEnabledWeb3Provider()\n }\n\n IpfsController.prototype.getWeb3Provider = async function () {\n return await this.ensWrapper.getWeb3Provider()\n }\n\n IpfsController.prototype.getChainId = function () {\n return this.ensWrapper.getChainId()\n }\n\n exports.IpfsController = IpfsController\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ipfs-default.js": {
"title": "$:/plugins/ipfs/ipfs-default.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-default.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: utils\n\nIPFS Default\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n * Retrieve ipfs saver export protocol with default value if applicable\n */\n exports.getIpfsExport = function () {\n var output = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/export')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n output = text\n }\n }\n if (output == null) {\n output = $tw.utils.getIpfsDefaultExport()\n }\n return output\n }\n\n /*\n * Default Export\n */\n exports.getIpfsDefaultExport = function () {\n return 'json'\n }\n\n /*\n * Retrieve ipfs saver protocol with default value if applicable\n */\n exports.getIpfsProtocol = function () {\n var protocol = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/protocol')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n protocol = text\n }\n }\n if (protocol == null) {\n protocol = $tw.utils.getIpfsDefaultProtocol()\n }\n return protocol\n }\n\n /*\n * Default Protocol\n */\n exports.getIpfsDefaultProtocol = function () {\n return 'ipfs'\n }\n\n /*\n * Retrieve ipfs saver api url with default value if applicable\n */\n exports.getIpfsSaverApiUrl = function () {\n var api = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/api')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n api = text\n }\n }\n if (api !== null) {\n tiddler = $tw.wiki.getTiddler(api)\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n api = text\n }\n }\n }\n if (api == null) {\n api = $tw.ipfs.getIpfsDefaultApi()\n }\n return api\n }\n\n /*\n * Retrieve ipfs saver gateway url with default value if applicable\n */\n exports.getIpfsSaverGatewayUrl = function () {\n var gateway = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/gateway')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n gateway = text\n }\n }\n if (gateway !== null) {\n tiddler = $tw.wiki.getTiddler(gateway)\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n gateway = text\n }\n }\n }\n if (gateway == null) {\n gateway = $tw.ipfs.getIpfsDefaultGateway()\n }\n return gateway\n }\n\n /*\n * Retrieve ipfs saver ens domain with default value if applicable\n */\n exports.getIpfsEnsDomain = function () {\n var ensDomain = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ens/domain')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n ensDomain = text\n }\n }\n return ensDomain\n }\n\n /*\n * Retrieve ipfs saver ipns name with default value if applicable\n */\n exports.getIpfsIpnsName = function () {\n var ipnsName = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/name')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n ipnsName = text\n }\n }\n return ipnsName\n }\n\n /*\n * Retrieve ipfs saver ipns key with default value if applicable\n */\n exports.getIpfsIpnsKey = function () {\n var ipnsKey = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n ipnsKey = text\n }\n }\n return ipnsKey\n }\n\n /*\n * Retrieve ipfs saver verbose with default value if applicable\n */\n exports.getIpfsVerbose = function () {\n var verbose = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/verbose')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n verbose = text\n }\n }\n if (verbose == null) {\n verbose = true // default, see ipfs-saver.tid\n } else {\n verbose = verbose === 'yes'\n }\n return verbose\n }\n\n /*\n * Retrieve ipfs saver unpin with default value if applicable\n */\n exports.getIpfsUnpin = function () {\n var unpin = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/unpin')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n unpin = text\n }\n }\n if (unpin == null) {\n unpin = false // default, see ipfs-saver.tid\n } else {\n unpin = unpin === 'yes'\n }\n return unpin\n }\n\n /*\n * Retrieve ipfs saver url policy with default value if applicable\n */\n exports.getIpfsUrlPolicy = function () {\n var policy = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/policy')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n policy = text\n }\n }\n if (policy == null) {\n policy = $tw.utils.getIpfsDefaultPolicy()\n }\n return policy\n }\n\n /*\n * Default Policy\n */\n exports.getIpfsDefaultPolicy = function () {\n return 'gateway'\n }\n\n /*\n * Retrieve ipfs saver provider with default value if applicable\n */\n exports.getIpfsProvider = function () {\n var provider = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/provider')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n provider = text\n }\n }\n if (provider == null) {\n provider = $tw.utils.getIpfsDefaultProvider()\n }\n return provider\n }\n\n /*\n * Default Provider\n */\n exports.getIpfsDefaultProvider = function () {\n return 'http'\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "utils"
},
"$:/plugins/ipfs/ipfs-import.js": {
"title": "$:/plugins/ipfs/ipfs-import.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-import.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Import\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-import'\n\n const local = '<a href=\"'\n const remote = '<a rel=\"noopener noreferrer\" target=\"_blank\" href=\"'\n\n const alertFailed = function (\n strings,\n msg,\n key,\n field,\n parentField,\n parentUrl,\n parentTitle\n ) {\n var space = strings[1]\n var endH1 = strings[2]\n var endL1 = strings[3]\n var from = strings[4]\n var endH2 = strings[5]\n var endL2 = strings[6]\n if (\n parentUrl.hostname === $tw.ipfs.getIpfsBaseUrl().hostname &&\n parentUrl.pathname === $tw.ipfs.getIpfsBaseUrl().pathname\n ) {\n return `${msg}${space}${remote}${key}${endH1}${field}${endL1}${parentField}${from}${local}${parentUrl}${endH2}${parentTitle}${endL2}`\n } else {\n return `${msg}${space}${remote}${key}${endH1}${field}${endL1}${parentField}${from}${remote}${parentUrl}${endH2}${parentTitle}${endL2}`\n }\n }\n\n const alertFieldFailed = function (strings, msg, field, url, title) {\n var failed = strings[1]\n var from = strings[2]\n var endH = strings[3]\n var endL = strings[4]\n if (\n url.hostname === $tw.ipfs.getIpfsBaseUrl().hostname &&\n url.pathname === $tw.ipfs.getIpfsBaseUrl().pathname\n ) {\n return `${msg}${failed}${field}${from}${local}${url}${endH}${title}${endL}`\n } else {\n return `${msg}${failed}${field}${from}${remote}${url}${endH}${title}${endL}`\n }\n }\n\n const alertConditionFailed = function (\n strings,\n msg,\n condition,\n key,\n title,\n parentUrl\n ) {\n var space = strings[1]\n var from = strings[2]\n var endH1 = strings[3]\n var endL1 = strings[4]\n var endH2 = strings[5]\n var endL2 = strings[6]\n if (\n parentUrl.hostname === $tw.ipfs.getIpfsBaseUrl().hostname &&\n parentUrl.pathname === $tw.ipfs.getIpfsBaseUrl().pathname\n ) {\n return `${msg}${space}${condition}${from}${remote}${key}${endH1}${title}${endL1}${local}${parentUrl}${endH2}${title}${endL2}`\n } else {\n return `${msg}${space}${condition}${from}${remote}${key}${endH1}${title}${endL1}${remote}${parentUrl}${endH2}${title}${endL2}`\n }\n }\n\n var IpfsImport = function () {}\n\n IpfsImport.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsImport.prototype.removeTiddlers = function (keys, title) {\n var removed = 0\n for (var key of this.loaded.keys()) {\n if (keys.indexOf(key) !== -1) {\n continue\n }\n const { imported, resolvedKey } = this.loaded.get(key)\n if (imported.delete(title)) {\n const msg = 'Remove:'\n const field = ''\n this.getLogger().info(`${msg} ${field}\"${title}\"\\n ${resolvedKey}`)\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} ${field}${resolvedKey}\">${title}</a>`\n )\n removed += 1\n }\n }\n return removed\n }\n\n IpfsImport.prototype.getKey = async function (base, value) {\n var cid = null\n var ipnsKey = null\n var key = null\n var normalizedUrl = null\n var resolvedUrl = null\n value =\n value === undefined || value == null || value.trim() === ''\n ? null\n : value.trim()\n if (value == null) {\n return {\n key: null,\n isIpfs: false,\n resolvedUrl: null\n }\n }\n var {\n cid,\n ipnsKey,\n normalizedUrl,\n resolvedUrl\n } = await $tw.ipfs.resolveUrl(false, true, value, base)\n if (normalizedUrl == null && resolvedUrl == null) {\n throw new Error(`Failed to resolve value: \"${value}\"`)\n }\n if (cid !== null) {\n key = `/ipfs/${cid}`\n } else if (ipnsKey !== null) {\n key = `/ipns/${ipnsKey}`\n } else if (normalizedUrl.hostname.endsWith('.eth')) {\n key = normalizedUrl.hostname\n } else {\n key = normalizedUrl.toString()\n }\n return {\n key: key,\n resolvedUrl: resolvedUrl\n }\n }\n\n IpfsImport.prototype.isIpfs = async function (key) {\n key =\n key === undefined || key == null || key.trim() === '' ? null : key.trim()\n if (key == null) {\n return false\n }\n const { cid, ipnsIdentifier } = $tw.ipfs.decodeCid(key)\n if (cid !== null || ipnsIdentifier !== null) {\n return true\n } else if (key.endsWith('.eth')) {\n return true\n }\n return false\n }\n\n IpfsImport.prototype.import = async function (\n canonicalUri,\n importUri,\n tiddler\n ) {\n const self = this\n var loadedAdded = 0\n var loadedRemoved = 0\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n importUri =\n importUri === undefined || importUri == null || importUri.trim() === ''\n ? null\n : importUri.trim()\n this.host = tiddler\n const { type, info } = $tw.utils.getContentType(\n tiddler.fields.title,\n tiddler.fields.type\n )\n this.loaded = new Map()\n this.notLoaded = []\n this.isEmpty = []\n this.resolved = new Map()\n this.notResolved = []\n this.added = []\n this.updated = []\n this.merged = new Map()\n try {\n // Load and prepare imported tiddlers to be processed\n const url = $tw.ipfs.getIpfsBaseUrl()\n url.hash = tiddler.fields.title\n if (canonicalUri !== null || importUri !== null) {\n this.getLogger().info('*** Begin Import ***')\n this.rootUri = importUri !== null ? importUri : canonicalUri\n if (this.rootUri !== null) {\n const {\n loaded: importLoaded,\n removed: importRemoved\n } = await this.load(\n url,\n tiddler.fields.title,\n '_import_uri',\n importUri,\n true\n )\n loadedAdded += importLoaded\n loadedRemoved += importRemoved\n }\n if (canonicalUri !== null) {\n var load = true\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n load = false\n }\n const {\n loaded: canonicalLoaded,\n removed: canonicalRemoved\n } = await this.load(\n url,\n tiddler.fields.title,\n '_canonical_uri',\n canonicalUri,\n load\n )\n loadedAdded += canonicalLoaded\n loadedRemoved += canonicalRemoved\n }\n const { processed, removed: processedRemoved } = this.processImported()\n this.importTiddlers()\n this.getLogger().info(`*** Loaded: ${this.loaded.size} Resource(s) ***`)\n this.getLogger().info(\n `*** Loaded: ${this.isEmpty.length} Empty Resource(s) ***`\n )\n this.getLogger().info(\n `*** Failed to Load: ${this.notLoaded.length} Resource(s) ***`\n )\n this.getLogger().info(\n `*** Failed to Resolve: ${this.notResolved.length} URL(s) ***`\n )\n this.getLogger().info(\n `*** Loaded: ${loadedAdded}, Removed: ${loadedRemoved} Tiddler(s) ***`\n )\n this.getLogger().info(\n `*** Processed: ${processed}, Removed: ${processedRemoved} Tiddler(s) ***`\n )\n this.getLogger().info(\n `*** Added: ${this.added.length}, Updated: ${this.updated.length} Tiddler(s) ***`\n )\n }\n // Update Wiki\n var reportAdded = ''\n var reportUpdated = ''\n for (var [title, merged] of this.merged.entries()) {\n $tw.wiki.addTiddler(merged)\n if (\n this.host !== null &&\n this.merged.get(this.host.fields.title) === undefined\n ) {\n if (this.added.indexOf(title) !== -1) {\n reportAdded = `${reportAdded}[[${title}]]`\n } else {\n reportUpdated = `${reportUpdated}[[${title}]]`\n }\n }\n }\n // Process deleted\n var deleted = 0\n var reportDeleted = ''\n $tw.wiki.forEachTiddler({ includeSystem: true }, function (\n title,\n tiddler\n ) {\n var value = tiddler.getFieldString('_canonical_uri')\n if (\n value !== undefined &&\n value !== null &&\n value === self.rootUri &&\n self.merged.get(title) === undefined\n ) {\n if (\n self.host !== null &&\n self.merged.get(self.host.fields.title) === undefined &&\n self.host.fields.title !== title\n ) {\n $tw.wiki.deleteTiddler(title)\n reportDeleted = `${reportDeleted}[[${title}]]`\n deleted += 1\n }\n return\n }\n var value = tiddler.getFieldString('_import_uri')\n if (\n value !== undefined &&\n value !== null &&\n value === self.rootUri &&\n self.merged.get(title) === undefined\n ) {\n if (\n self.host !== null &&\n self.merged.get(self.host.fields.title) === undefined &&\n self.host.fields.title !== title\n ) {\n $tw.wiki.deleteTiddler(title)\n reportDeleted = `${reportDeleted}[[${title}]]`\n deleted += 1\n }\n }\n })\n if (this.merged.size > 0) {\n $tw.utils.alert(\n name,\n 'Successfully Imported, Added: ' +\n this.added.length +\n ', Deleted: ' +\n deleted +\n ', Updated: ' +\n this.updated.length\n )\n }\n if (\n this.host !== null &&\n this.merged.get(this.host.fields.title) === undefined\n ) {\n var updatedTiddler = new $tw.Tiddler(this.host)\n if (this.merged.size === 0) {\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n fields: [\n {\n key: 'type',\n value: 'text/vnd.tiddlywiki'\n },\n {\n key: 'text',\n value: \"''No Tiddlers have been Imported''\"\n }\n ]\n })\n } else {\n const reportAddedMsg = `<p align='left'>''Added: ${this.added.length}''</p>`\n const reportDeletedMsg = `<p align='left'>''Deleted: ${deleted}''</p>`\n const reportImportedMsg =\n \"<p align='center'>''Successfully Imported''</p>\"\n const reportUpdatedMsg = `<p align='left'>''Updated: ${this.updated.length}''</p>`\n var value = `${reportImportedMsg}`\n if (reportAdded.trim() !== '') {\n value = `${value}\\n\\n${reportAddedMsg}\\n\\n{{{${reportAdded}}}}`\n }\n if (reportDeleted.trim() !== '') {\n value = `${value}\\n\\n${reportDeletedMsg}\\n\\n{{{${reportDeleted}}}}`\n }\n if (reportUpdated.trim() !== '') {\n value = `${value}\\n\\n${reportUpdatedMsg}\\n\\n{{{${reportUpdated}}}}`\n }\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n fields: [\n {\n key: 'type',\n value: 'text/vnd.tiddlywiki'\n },\n {\n key: 'text',\n value: value\n }\n ]\n })\n }\n $tw.wiki.addTiddler(updatedTiddler)\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n this.getLogger().info('*** End Import ***')\n this.host = null\n this.loaded = null\n this.isEmpty = null\n this.notLoaded = null\n this.resolved = null\n this.notResolved = null\n this.added = null\n this.updated = null\n this.merged = null\n }\n\n IpfsImport.prototype.load = async function (\n parentUrl,\n parentTitle,\n field,\n url,\n load\n ) {\n var loaded = 0\n var removed = 0\n var key = null\n var resolvedUrl = null\n if (\n url !== null &&\n this.notResolved.indexOf(url) === -1 &&\n this.resolved.get(url) === undefined\n ) {\n try {\n var { key, resolvedUrl } = await this.getKey(parentUrl, url)\n this.resolved.set(url, key)\n } catch (error) {\n const msg = 'Failed to Resolve:'\n this.notResolved.push(url)\n this.getLogger().error(error)\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${parentUrl}\">${parentTitle}</a>`\n )\n }\n }\n if (\n load &&\n key !== null &&\n resolvedUrl !== null &&\n this.notLoaded.indexOf(key) === -1 &&\n this.loaded.get(key) === undefined\n ) {\n const {\n loaded: loadedAdded,\n removed: loadedRemoved\n } = await this.loadResource(\n parentUrl,\n parentTitle,\n field,\n url,\n key,\n resolvedUrl\n )\n loaded = loadedAdded\n removed = loadedRemoved\n }\n return {\n loaded: loaded,\n removed: removed\n }\n }\n\n IpfsImport.prototype.loadResource = async function (\n parentUrl,\n parentTitle,\n parentField,\n uri,\n key,\n resolvedKey\n ) {\n var loaded = 0\n var removed = 0\n var content = null\n var imported = new Map()\n var tiddlers = null\n try {\n // Load\n content = await $tw.ipfs.loadToUtf8(resolvedKey.toString())\n if ($tw.ipfs.isJson(content.data)) {\n tiddlers = $tw.wiki.deserializeTiddlers(\n '.json',\n content.data,\n $tw.wiki.getCreationFields()\n )\n } else {\n tiddlers = $tw.wiki.deserializeTiddlers(\n '.tid',\n content.data,\n $tw.wiki.getCreationFields()\n )\n }\n // Loaded\n if (tiddlers !== undefined && tiddlers !== null) {\n this.loaded.set(key, { imported, resolvedKey, uri })\n for (var i in tiddlers) {\n const tiddler = tiddlers[i]\n var title = tiddler.title\n if (title === undefined || title == null || title.trim() === '') {\n const msg = 'Ignore Unknown:'\n const field = 'Title'\n this.getLogger().info(\n `${msg} \"${field}\"\\n ${resolvedKey} \\n from \"${parentField}\", \"${parentTitle}\"\\n ${parentUrl}`\n )\n $tw.utils.alert(\n name,\n alertFailed`${msg} ${resolvedKey}\">${field}</a>, from \"${parentField}\", ${parentUrl}\">${parentTitle}</a>`\n )\n removed += 1\n continue\n }\n if (imported.get(title) !== undefined) {\n const msg = 'Ignore Duplicate:'\n this.getLogger().info(\n `${msg} \"${title}\"\\n ${resolvedKey} \\n from \"${parentField}\", \"${parentTitle}\"\\n ${parentUrl}`\n )\n $tw.utils.alert(\n name,\n alertFailed`${msg} ${resolvedKey}\">${title}</a>, from \"${parentField}\", ${parentUrl}\">${parentTitle}</a>`\n )\n removed += 1\n continue\n }\n var type = tiddler.type\n if (type === undefined || type == null) {\n type = 'text/vnd.tiddlywiki'\n }\n var info = $tw.config.contentTypeInfo[type]\n if (info === undefined || info == null) {\n const msg = 'Unknown:'\n const field = 'Content-Type'\n this.getLogger().info(\n `${msg} \"${field}\": \"${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\": ${resolvedKey}\">${title}</a>`\n )\n // Default\n type = 'text/vnd.tiddlywiki'\n info = $tw.config.contentTypeInfo[type]\n }\n tiddler.type = type\n // Next\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n tiddler._canonical_uri = canonicalUri\n var importUri = tiddler._import_uri\n importUri =\n importUri === undefined ||\n importUri == null ||\n importUri.trim() === ''\n ? null\n : importUri.trim()\n tiddler._import_uri = importUri\n if (canonicalUri !== null || importUri !== null) {\n if (importUri !== null) {\n const {\n loaded: loadedAdded,\n removed: loadedRemoved\n } = await this.load(\n resolvedKey,\n title,\n '_import_uri',\n importUri,\n true\n )\n loaded += loadedAdded\n removed += loadedRemoved\n }\n if (canonicalUri !== null) {\n var load = true\n if (\n info.encoding === 'base64' ||\n tiddler.type === 'image/svg+xml'\n ) {\n load = false\n }\n const {\n loaded: loadedAdded,\n removed: loadedRemoved\n } = await this.load(\n resolvedKey,\n title,\n 'canonical_uri',\n canonicalUri,\n load\n )\n loaded += loadedAdded\n removed += loadedRemoved\n }\n }\n imported.set(title, tiddler)\n loaded += 1\n }\n }\n if (imported.size === 0) {\n this.isEmpty.push(key)\n const msg = 'Empty:'\n const field = 'Resource'\n this.getLogger().info(\n `${msg} \"${field}\"\\n ${resolvedKey} \\n from \"${parentField}\", \"${parentTitle}\"\\n ${parentUrl}`\n )\n $tw.utils.alert(\n name,\n alertFailed`${msg} ${resolvedKey}\">${field}</a> from \"${parentField}\", ${parentUrl}\">${parentTitle}</a>`\n )\n }\n } catch (error) {\n this.notLoaded.push(key)\n const msg = 'Failed to Load:'\n const field = 'Resource'\n this.getLogger().info(\n `${msg} \"${field}\"\\n ${resolvedKey} \\n from \"${parentField}\", \"${parentTitle}\"\\n ${parentUrl}`\n )\n this.getLogger().error(error)\n $tw.utils.alert(\n name,\n alertFailed`${msg} ${resolvedKey}\">${field}</a> from \"${parentField}\", ${parentUrl}\">${parentTitle}</a>`\n )\n }\n return {\n loaded: loaded,\n removed: removed\n }\n }\n\n IpfsImport.prototype.processImported = function () {\n var processed = 0\n var removed = 0\n var processedTitles = []\n for (var key of this.loaded.keys()) {\n const { imported, resolvedKey } = this.loaded.get(key)\n for (var title of imported.keys()) {\n if (processedTitles.indexOf(title) !== -1) {\n continue\n }\n const keys = []\n const tiddler = imported.get(title)\n var type = tiddler.type\n var info = $tw.config.contentTypeInfo[type]\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var importUri = tiddler._import_uri\n importUri =\n importUri === undefined ||\n importUri == null ||\n importUri.trim() === ''\n ? null\n : importUri.trim()\n if (canonicalUri == null && importUri == null) {\n keys.push(key)\n } else if (canonicalUri == null && importUri !== null) {\n const msg = 'Missing:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from ${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a>`\n )\n } else {\n var canonicalKey = null\n if (\n canonicalUri !== null &&\n this.notResolved.indexOf(canonicalUri) === -1\n ) {\n canonicalKey = this.resolved.get(canonicalUri)\n }\n if (canonicalKey !== undefined && canonicalKey !== null) {\n if (key === canonicalKey) {\n const msg = 'Cycle Graph:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from ${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a>`\n )\n } else if (\n this.processCanonicalKey(\n keys,\n resolvedKey,\n title,\n canonicalKey,\n type,\n info\n )\n ) {\n var importKey = null\n if (\n importUri !== null &&\n this.notResolved.indexOf(importUri) === -1\n ) {\n importKey = this.resolved.get(importUri)\n }\n if (importKey === undefined || importKey == null) {\n keys.push(key)\n } else {\n if (canonicalKey === importKey) {\n const msg = 'Matching:'\n const field = '\"_canonical_uri\" and \"_import_uri\"'\n this.getLogger().info(\n `${msg} ${field} from \"${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} ${field} from ${resolvedKey}\">${title}</a>`\n )\n } else if (key === importKey) {\n const msg = 'Cycle Graph:'\n const field = '_import_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a>`\n )\n } else {\n keys.push(key)\n this.processImportKey(\n keys,\n resolvedKey,\n title,\n canonicalKey,\n importKey\n )\n }\n }\n }\n }\n }\n processed += keys.length\n removed += this.removeTiddlers(keys, title)\n processedTitles.push(title)\n }\n }\n return {\n processed: processed,\n removed: removed\n }\n }\n\n IpfsImport.prototype.processCanonicalKey = function (\n keys,\n parentResolvedKey,\n title,\n canonicalKey,\n type,\n info\n ) {\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n keys.push(canonicalKey)\n return true\n }\n if (this.notLoaded.indexOf(canonicalKey) !== -1) {\n return false\n }\n const { imported, resolvedKey } = this.loaded.get(canonicalKey)\n if (imported === undefined) {\n return false\n }\n const tiddler = imported.get(title)\n if (tiddler === undefined) {\n return false\n }\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri == null ||\n canonicalUri === undefined ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n const msg = 'Inconsistency:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${resolvedKey} \\n and ${parentResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertConditionFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a> and ${parentResolvedKey}\">${title}</a>`\n )\n return false\n }\n var importUri = tiddler._import_uri\n importUri =\n importUri == null || importUri === undefined || importUri.trim() === ''\n ? null\n : importUri.trim()\n if (importUri !== null) {\n const msg = 'Inconsistency:'\n const field = '_import_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${resolvedKey} \\n and ${parentResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertConditionFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a> and ${parentResolvedKey}\">${title}</a>`\n )\n return false\n }\n keys.push(canonicalKey)\n return true\n }\n\n IpfsImport.prototype.processImportKey = function (\n keys,\n parentResolvedKey,\n title,\n canonicalKey,\n importKey\n ) {\n if (this.notLoaded.indexOf(importKey) !== -1) {\n return\n }\n const { imported, resolvedKey: importResolvedKey } = this.loaded.get(\n importKey\n )\n if (imported === undefined) {\n return\n }\n const tiddler = imported.get(title)\n if (tiddler === undefined) {\n return\n }\n var targetCanonicalUri = tiddler._canonical_uri\n targetCanonicalUri =\n targetCanonicalUri == null ||\n targetCanonicalUri === undefined ||\n targetCanonicalUri.trim() === ''\n ? null\n : targetCanonicalUri.trim()\n var targetCanonicalKey = null\n if (\n targetCanonicalUri !== null &&\n this.notResolved.indexOf(targetCanonicalUri) === -1\n ) {\n targetCanonicalKey = this.resolved.get(targetCanonicalUri)\n }\n if (\n targetCanonicalKey !== undefined &&\n targetCanonicalKey !== null &&\n canonicalKey !== targetCanonicalKey\n ) {\n const msg = 'Inconsistency:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${importResolvedKey} \\n and ${parentResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertConditionFailed`${msg} \"${field}\" from ${importResolvedKey}\">${title}</a> and ${parentResolvedKey}\">${title}</a>`\n )\n return\n }\n var nextImportUri = tiddler._import_uri\n nextImportUri =\n nextImportUri == null ||\n nextImportUri === undefined ||\n nextImportUri.trim() === ''\n ? null\n : nextImportUri.trim()\n if (targetCanonicalUri == null && nextImportUri !== null) {\n const msg = 'Missing:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${importResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${importResolvedKey}\">${title}</a>`\n )\n return\n }\n if (nextImportUri == null) {\n keys.push(importKey)\n } else {\n var nextImportKey = null\n if (\n nextImportUri !== null &&\n this.notResolved.indexOf(nextImportUri) === -1\n ) {\n nextImportKey = this.resolved.get(nextImportUri)\n }\n if (nextImportKey !== undefined && nextImportKey !== null) {\n if (canonicalKey === nextImportKey) {\n const msg = 'Matching:'\n const field = '\"_canonical_uri\" and \"_import_uri\"'\n this.getLogger().info(\n `${msg} ${field} from \"${title}\"\\n ${importResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} ${field} from ${importResolvedKey}\">${title}</a>`\n )\n } else if (keys.indexOf(nextImportKey) !== -1) {\n const msg = 'Cycle Graph:'\n const field = '_import_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${importResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${importResolvedKey}\">${title}</a>`\n )\n } else {\n keys.push(importKey)\n this.processImportKey(\n keys,\n importResolvedKey,\n title,\n canonicalKey,\n nextImportKey\n )\n }\n }\n }\n }\n\n IpfsImport.prototype.importTiddlers = function () {\n var processedTitles = []\n for (var key of this.loaded.keys()) {\n const { imported, uri } = this.loaded.get(key)\n for (var title of imported.keys()) {\n if (processedTitles.indexOf(title) !== -1) {\n continue\n }\n const tiddler = imported.get(title)\n var type = tiddler.type\n var info = $tw.config.contentTypeInfo[type]\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var importUri = tiddler._import_uri\n importUri =\n importUri === undefined ||\n importUri == null ||\n importUri.trim() === ''\n ? null\n : importUri.trim()\n var exist = null\n if (importUri !== null) {\n exist = this.importTiddler(title, importUri)\n }\n if (\n exist == null &&\n canonicalUri !== null &&\n info.encoding !== 'base64' &&\n type !== 'image/svg+xml'\n ) {\n this.importTiddler(title, canonicalUri)\n }\n exist = this.mergeTiddler(title, uri)\n if (exist !== null) {\n const merged = this.merged.get(title)\n var type = merged.type\n var info = $tw.config.contentTypeInfo[type]\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n merged._import_uri = this.rootUri\n } else {\n var canonicalUri = merged._canonical_uri\n if (canonicalUri === undefined || canonicalUri == null) {\n if (uri !== this.rootUri) {\n merged._canonical_uri = this.resolved.get(uri)\n merged._import_uri = this.rootUri\n } else {\n merged._canonical_uri = this.rootUri\n }\n } else {\n merged._canonical_uri = this.resolved.get(merged._canonical_uri)\n if (canonicalUri !== this.rootUri) {\n merged._import_uri = this.rootUri\n }\n }\n }\n if (exist) {\n this.updated.push(title)\n } else {\n this.added.push(title)\n }\n processedTitles.push(title)\n }\n }\n }\n }\n\n IpfsImport.prototype.importTiddler = function (title, uri) {\n const key = this.resolved.get(uri)\n if (key === undefined) {\n return null\n }\n const { imported } = this.loaded.get(key)\n if (imported === undefined) {\n return null\n }\n const tiddler = imported.get(title)\n if (tiddler === undefined) {\n return null\n }\n var type = tiddler.type\n var info = $tw.config.contentTypeInfo[type]\n var importUri = tiddler._import_uri\n importUri =\n importUri == null || importUri === undefined || importUri.trim() === ''\n ? null\n : importUri.trim()\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri == null ||\n canonicalUri === undefined ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var exist = null\n if (importUri !== null) {\n exist = this.importTiddler(title, importUri)\n }\n if (\n exist == null &&\n canonicalUri !== null &&\n info.encoding !== 'base64' &&\n type !== 'image/svg+xml'\n ) {\n this.importTiddler(title, canonicalUri)\n }\n return this.mergeTiddler(title, uri)\n }\n\n IpfsImport.prototype.mergeTiddler = function (title, uri) {\n var merged = null\n var currentTiddler = null\n const key = this.resolved.get(uri)\n if (key === undefined) {\n return null\n }\n const { imported } = this.loaded.get(key)\n if (imported === undefined) {\n return null\n }\n const tiddler = imported.get(title)\n if (tiddler === undefined) {\n return null\n }\n // Retrieve target host Tiddler\n if (this.host !== null && this.host.fields.title === title) {\n currentTiddler = this.host\n } else {\n currentTiddler = $tw.wiki.getTiddler(title)\n }\n // Retrieve or prepare merged content\n merged = this.merged.get(title)\n if (merged === undefined) {\n merged = {}\n this.merged.set(title, merged)\n }\n // Tags\n var tags = tiddler.tags !== undefined ? tiddler.tags : ''\n // Fields\n var hasModified = false\n for (var field in tiddler) {\n // Discard\n if (field === 'tags') {\n continue\n }\n if (field === 'modified') {\n hasModified = true\n }\n // Unknown from leaf to top, we keep the top modified field\n if (\n merged[field] === undefined ||\n merged[field] == null ||\n field === '_canonical_uri' ||\n field === '_import_uri' ||\n field === 'modified'\n ) {\n merged[field] = tiddler[field]\n }\n }\n if (hasModified === false) {\n merged.modified = new Date()\n }\n // Merge current Tiddler Tags\n if (currentTiddler !== undefined && currentTiddler !== null) {\n const currentTags = (currentTiddler.fields.tags || []).slice(0)\n for (var i = 0; i < currentTags.length; i++) {\n const currentTag = currentTags[i]\n if (tags.includes(currentTag) === false) {\n tags = `${tags} [[${currentTag}]]`\n }\n }\n }\n // Merge merged Tags\n if (merged.tags !== undefined && merged.tags !== null) {\n const mergedTags = $tw.utils.parseStringArray(merged.tags, false)\n for (var i = 0; i < mergedTags.length; i++) {\n const mergedTag = mergedTags[i]\n if (tags.includes(mergedTag) === false) {\n tags = `${tags} [[${mergedTag}]]`\n }\n }\n }\n // IPFS tag\n if (this.isIpfs(key) && tags.includes('$:/isIpfs') === false) {\n tags = `${tags} $:/isIpfs`\n }\n // Imported tag\n if (tags.includes('$:/isImported') === false) {\n tags = `${tags} $:/isImported`\n }\n // Processed tags\n merged.tags = tags\n if (currentTiddler !== undefined && currentTiddler !== null) {\n return true\n }\n return false\n }\n\n exports.IpfsImport = IpfsImport\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/macro/ipfs-info-saver.js": {
"title": "$:/plugins/ipfs/macro/ipfs-info-saver.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/macro/ipfs-info-saver.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: macro\n\nIPFS info saver\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n * Information about this macro\n */\n exports.name = 'ipfs-info-saver'\n\n exports.params = [{ name: 'tiddler' }]\n\n /*\n * Run the macro\n */\n exports.run = function (tiddler) {\n return $tw.saverHandler.getSaver(tiddler).module.info.name\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "macro"
},
"$:/plugins/ipfs/modules/widgets/ipfs-link.js": {
"title": "$:/plugins/ipfs/modules/widgets/ipfs-link.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/widgets/ipfs-link.js\ntype: application/javascript\nmodule-type: widget\n\nIPFS link widget\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n var Widget = require('$:/core/modules/widgets/widget.js').widget\n\n const name = 'ipfs-link'\n\n var IpfsLinkWidget = function (parseTreeNode, options) {\n this.initialise(parseTreeNode, options)\n }\n\n /*\n * Inherit from the base widget class\n */\n IpfsLinkWidget.prototype = new Widget()\n\n IpfsLinkWidget.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n /*\n * Render this widget into the DOM\n */\n IpfsLinkWidget.prototype.render = function (parent, nextSibling) {\n var self = this\n // Save the parent dom node\n this.parentDomNode = parent\n // Compute our attributes\n this.computeAttributes()\n // Execute our logic\n this.execute()\n // Tiddler link\n var value = this.url !== undefined ? this.url : this.value\n var tiddler = $tw.wiki.getTiddler(value)\n if (tiddler !== undefined && tiddler !== null) {\n this.renderTiddlerLink(parent, nextSibling)\n } else {\n this.renderText(parent, nextSibling)\n $tw.ipfs\n .resolveUrl(false, false, value)\n .then(data => {\n var { normalizedUrl } = data\n if (normalizedUrl !== null) {\n self.removeChildDomNodes()\n self.renderExternalLink(parent, nextSibling, normalizedUrl)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n }\n }\n\n /*\n * Render this widget into the DOM\n */\n IpfsLinkWidget.prototype.renderExternalLink = function (\n parent,\n nextSibling,\n url\n ) {\n // Sanitise the specified tag\n var tag = this.linkTag\n if ($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n tag = 'a'\n }\n // Create our element\n var namespace = this.getVariable('namespace', {\n defaultValue: 'http://www.w3.org/1999/xhtml'\n })\n var domNode = this.document.createElementNS(namespace, tag)\n domNode.setAttribute('href', url)\n // Add a click event handler\n $tw.utils.addEventListeners(domNode, [\n {\n name: 'click',\n handlerObject: this,\n handlerMethod: 'handleExternalClickEvent'\n }\n ])\n // Assign classes\n var classes = []\n if (this.classes) {\n classes.push(this.classes)\n }\n if (classes.length > 0) {\n domNode.setAttribute('class', classes.join(' '))\n }\n if (this['aria-label']) {\n domNode.setAttribute('aria-label', this['aria-label'])\n }\n // Insert the URL into the DOM and render any children\n parent.insertBefore(domNode, nextSibling)\n // Process\n this.renderChildren(domNode, null)\n this.domNodes.push(domNode)\n }\n\n /*\n * Render this widget into the DOM\n */\n IpfsLinkWidget.prototype.renderTiddlerLink = function (parent, nextSibling) {\n // self\n var self = this\n // Sanitise the specified tag\n var tag = this.linkTag\n if ($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n tag = 'a'\n }\n var value = this.url !== undefined ? this.url : this.value\n var isMissing = !this.wiki.tiddlerExists(value)\n var isShadow = this.wiki.isShadowTiddler(value)\n // Create our element\n var namespace = this.getVariable('namespace', {\n defaultValue: 'http://www.w3.org/1999/xhtml'\n })\n var domNode = this.document.createElementNS(namespace, tag)\n // Assign classes\n var classes = []\n if (this.overrideClasses === undefined) {\n classes.push('tc-tiddlylink')\n if (isShadow) {\n classes.push('tc-tiddlylink-shadow')\n }\n if (isMissing && !isShadow) {\n classes.push('tc-tiddlylink-missing')\n } else {\n if (!isMissing) {\n classes.push('tc-tiddlylink-resolves')\n }\n }\n if (this.linkClasses) {\n classes.push(this.linkClasses)\n }\n } else if (this.overrideClasses !== '') {\n classes.push(this.overrideClasses)\n }\n if (classes.length > 0) {\n domNode.setAttribute('class', classes.join(' '))\n }\n // Set an href\n var wikilinkTransformFilter = this.getVariable('tv-filter-export-link')\n var wikiLinkText\n if (wikilinkTransformFilter) {\n // Use the filter to construct the href\n wikiLinkText = this.wiki.filterTiddlers(\n wikilinkTransformFilter,\n this,\n function (iterator) {\n iterator(self.wiki.getTiddler(value), value)\n }\n )[0]\n } else {\n // Expand the tv-wikilink-template variable to construct the href\n var wikiLinkTemplateMacro = this.getVariable('tv-wikilink-template')\n var wikiLinkTemplate = wikiLinkTemplateMacro\n ? wikiLinkTemplateMacro.trim()\n : '#$uri_encoded$'\n wikiLinkText = $tw.utils.replaceString(\n wikiLinkTemplate,\n '$uri_encoded$',\n encodeURIComponent(value)\n )\n wikiLinkText = $tw.utils.replaceString(\n wikiLinkText,\n '$uri_doubleencoded$',\n encodeURIComponent(encodeURIComponent(value))\n )\n }\n // Override with the value of tv-get-export-link if defined\n wikiLinkText = this.getVariable('tv-get-export-link', {\n params: [{ name: 'to', value: value }],\n defaultValue: wikiLinkText\n })\n if (tag === 'a') {\n var namespaceHref =\n namespace === 'http://www.w3.org/2000/svg'\n ? 'http://www.w3.org/1999/xlink'\n : undefined\n domNode.setAttributeNS(namespaceHref, 'href', wikiLinkText)\n }\n // Set the tabindex\n if (this.tabIndex) {\n domNode.setAttribute('tabindex', this.tabIndex)\n }\n // Set the tooltip\n // HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n var tooltipWikiText =\n this.tooltip || this.getVariable('tv-wikilink-tooltip')\n if (tooltipWikiText) {\n var tooltipText = this.wiki.renderText(\n 'text/plain',\n 'text/vnd.tiddlywiki',\n tooltipWikiText,\n {\n parseAsInline: true,\n variables: {\n currentTiddler: value\n },\n parentWidget: this\n }\n )\n domNode.setAttribute('title', tooltipText)\n }\n if (this['aria-label']) {\n domNode.setAttribute('aria-label', this['aria-label'])\n }\n // Add a click event handler\n $tw.utils.addEventListeners(domNode, [\n {\n name: 'click',\n handlerObject: this,\n handlerMethod: 'handleTiddlerClickEvent'\n }\n ])\n // Make the link draggable if required\n if (this.draggable === 'yes') {\n $tw.utils.makeDraggable({\n domNode: domNode,\n dragTiddlerFn: function () {\n return value\n },\n widget: this\n })\n }\n // Insert the link into the DOM and render any children\n parent.insertBefore(domNode, nextSibling)\n // Process\n this.renderChildren(domNode, null)\n this.domNodes.push(domNode)\n }\n\n /*\n * Render this widget into the DOM\n */\n IpfsLinkWidget.prototype.renderText = function (parent, nextSibling) {\n const domNode = this.document.createElement('span')\n // Insert the text into the DOM and render any children\n parent.insertBefore(domNode, nextSibling)\n // Process\n this.renderChildren(domNode, null)\n this.domNodes.push(domNode)\n }\n\n IpfsLinkWidget.prototype.handleExternalClickEvent = function (event) {\n const self = this\n const value = this.url !== undefined ? this.url : this.value\n $tw.ipfs\n .resolveUrl(true, true, value)\n .then(data => {\n const { resolvedUrl } = data\n if (resolvedUrl !== null) {\n window.open(resolvedUrl.toString(), '_blank', 'noopener,noreferrer')\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n event.preventDefault()\n event.stopPropagation()\n return false\n }\n\n IpfsLinkWidget.prototype.handleTiddlerClickEvent = function (event) {\n // Send the click on its way as a navigate event\n const bounds = this.domNodes[0].getBoundingClientRect()\n const value = this.url !== undefined ? this.url : this.value\n this.dispatchEvent({\n type: 'tm-navigate',\n navigateTo: value,\n navigateFromTitle: this.getVariable('storyTiddler'),\n navigateFromNode: this,\n navigateFromClientRect: {\n top: bounds.top,\n left: bounds.left,\n width: bounds.width,\n right: bounds.right,\n bottom: bounds.bottom,\n height: bounds.height\n },\n navigateSuppressNavigation:\n event.metaKey || event.ctrlKey || event.button === 1,\n metaKey: event.metaKey,\n ctrlKey: event.ctrlKey,\n altKey: event.altKey,\n shiftKey: event.shiftKey\n })\n if (this.domNodes[0].hasAttribute('href')) {\n event.preventDefault()\n }\n event.stopPropagation()\n return false\n }\n\n /*\n * Compute the internal state of the widget\n */\n IpfsLinkWidget.prototype.execute = function () {\n // Pick up our attributes\n this.url = undefined\n this.tiddler =\n this.getAttribute('tiddler') !== undefined\n ? this.getAttribute('tiddler')\n : this.getVariable('currentTiddler')\n const tiddler = $tw.wiki.getTiddler(this.tiddler)\n this.field = this.getAttribute('field')\n this.value =\n this.getAttribute('value') !== undefined\n ? this.getAttribute('value')\n : tiddler.getFieldString(this.field) !== ''\n ? tiddler.getFieldString(this.field)\n : this.tiddler\n if (\n this.getAttribute('value') !== undefined &&\n tiddler.getFieldString(this.getAttribute('value')) !== ''\n ) {\n this.url = tiddler.getFieldString(this.getAttribute('value'))\n }\n this.tooltip = this.getAttribute('tooltip')\n this['aria-label'] = this.getAttribute('aria-label')\n this.linkClasses = this.getAttribute('class') || 'tc-ipfs-link-external'\n this.overrideClasses = this.getAttribute('overrideClass')\n this.tabIndex = this.getAttribute('tabindex')\n this.draggable = this.getAttribute('draggable', 'yes')\n this.linkTag = this.getAttribute('tag', 'a')\n var templateTree\n if (this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n templateTree = this.parseTreeNode.children\n } else {\n templateTree = [{ type: 'text', text: this.value }]\n }\n this.makeChildWidgets(templateTree)\n }\n\n /*\n * Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n */\n IpfsLinkWidget.prototype.refresh = function (changedTiddlers) {\n const changedAttributes = this.computeAttributes()\n const tiddler = $tw.wiki.getTiddler(this.tiddler)\n var value = null\n if (this.field !== undefined && this.field !== null) {\n value = tiddler.getFieldString(this.field)\n }\n if (\n changedAttributes.field ||\n changedTiddlers[this.field] ||\n changedAttributes.value ||\n changedTiddlers[this.value] ||\n changedAttributes.tooltip ||\n changedAttributes['aria-label'] ||\n changedTiddlers['$:/ipfs/saver/gateway'] ||\n changedTiddlers['$:/ipfs/saver/policy'] ||\n (value !== null && value !== this.value)\n ) {\n this.refreshSelf()\n return true\n }\n return this.refreshChildren(changedTiddlers)\n }\n\n exports.ipfslink = IpfsLinkWidget\n})()\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ipfs/macro/ipfs-plugin-version.js": {
"title": "$:/plugins/ipfs/macro/ipfs-plugin-version.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/macro/ipfs-plugin-version.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: macro\n\nIPFS plugin version\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n * Information about this macro\n */\n exports.name = 'ipfs-plugin-version'\n\n exports.params = []\n\n /*\n * Run the macro\n */\n exports.run = function () {\n return $tw.wiki.getTiddler('$:/plugins/ipfs').fields.version\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "macro"
},
"$:/plugins/ipfs/ipfs-saver.js": {
"title": "$:/plugins/ipfs/ipfs-saver.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-saver.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: saver\n\nIPFS Saver\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const log = require('$:/plugins/ipfs/loglevel/loglevel.js')\n\n const EnsAction = require('$:/plugins/ipfs/ens-action.js').EnsAction\n const IpfsAction = require('$:/plugins/ipfs/ipfs-action.js').IpfsAction\n const IpfsController = require('$:/plugins/ipfs/ipfs-controller.js')\n .IpfsController\n const IpfsTiddler = require('$:/plugins/ipfs/ipfs-tiddler.js').IpfsTiddler\n\n const ensKeyword = 'ens'\n const ipfsKeyword = 'ipfs'\n const ipnsKeyword = 'ipns'\n\n const name = 'ipfs-saver'\n\n /*\n * Select the appropriate saver module and set it up\n */\n var IpfsSaver = function (wiki) {\n this.wiki = wiki\n this.apiUrl = null\n this.ipfsProvider = null\n // Loglevel\n if (window.log === undefined || window.log == null) {\n // Init\n window.log = log.noConflict()\n if ($tw.utils.getIpfsVerbose()) {\n log.setLevel('info', false)\n } else {\n log.setLevel('warn', false)\n }\n }\n // Controller\n $tw.ipfs = new IpfsController()\n // Listener\n this.ensAction = new EnsAction()\n this.ipfsAction = new IpfsAction()\n this.ipfsTiddler = new IpfsTiddler()\n // Init\n this.ensAction.init()\n this.ipfsAction.init()\n this.ipfsTiddler.init()\n // Logger\n const logger = window.log.getLogger(name)\n // Log\n logger.info('ipfs-saver is starting up...')\n // Log url policy\n const base = $tw.ipfs.getIpfsBaseUrl()\n if ($tw.utils.getIpfsUrlPolicy() === 'origin') {\n logger.info(`Origin base URL: ${base}`)\n } else {\n logger.info(`Gateway base URL: ${base}`)\n }\n }\n\n IpfsSaver.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsSaver.prototype.save = async function (text, method, callback, options) {\n if ($tw.saverHandler.isDirty() === false) {\n return false\n }\n try {\n var cid = null\n var ipnsCid = null\n var ipnsKey = null\n var ipnsName = null\n var ensDomain = null\n var ensCid = null\n var options = options || {}\n const wiki = $tw.ipfs.getDocumentUrl()\n const base = $tw.ipfs.getIpfsBaseUrl()\n const nextWiki = $tw.ipfs.getUrl(wiki)\n nextWiki.protocol = base.protocol\n nextWiki.host = base.host\n nextWiki.port = base.port\n try {\n var { cid, ipnsKey } = await $tw.ipfs.resolveUrl(false, true, wiki)\n if (cid != null) {\n await $tw.ipfs.requestToUnpin(cid)\n }\n } catch (error) {\n this.getLogger().error(error)\n callback(error.message)\n return true\n }\n // IPNS\n if (ipnsKey !== null || $tw.utils.getIpfsProtocol() === ipnsKeyword) {\n // Resolve current IPNS\n if (ipnsKey !== null) {\n try {\n var { cid: ipnsCid, ipnsName } = await $tw.ipfs.resolveUrl(\n true,\n false,\n wiki\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n } else {\n // Default IPNS\n ipnsKey = $tw.utils.getIpfsIpnsKey()\n ipnsKey =\n ipnsKey === undefined || ipnsKey == null || ipnsKey.trim() === ''\n ? null\n : ipnsKey.trim()\n ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsKey == null && ipnsName == null) {\n callback(null, 'Unknown default IPNS identifiers...')\n return true\n }\n this.getLogger().info('Processing default IPNS identifiers...')\n var identifier = ipnsKey\n if (identifier == null) {\n identifier = ipnsName\n }\n try {\n var { cid: ipnsCid, ipnsKey, ipnsName } = await $tw.ipfs.resolveUrl(\n true,\n false,\n `/${ipnsKeyword}/${identifier}`\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n }\n if (ipnsCid != null) {\n await $tw.ipfs.requestToUnpin(ipnsCid)\n }\n }\n // ENS\n if ($tw.utils.getIpfsProtocol() === ensKeyword) {\n ensDomain = $tw.utils.getIpfsEnsDomain()\n if (ensDomain == null) {\n callback(null, 'Undefined ENS domain...')\n return true\n }\n var { cid: ensCid } = await $tw.ipfs.resolveUrl(false, true, ensDomain)\n if (ensCid != null) {\n await $tw.ipfs.requestToUnpin(ensCid)\n }\n }\n // Upload current document\n this.getLogger().info(`Uploading wiki: ${text.length} bytes`)\n // Add\n const { added } = await $tw.ipfs.addToIpfs(text)\n // Default next\n nextWiki.pathname = `/${ipfsKeyword}/${added}`\n // Pin\n try {\n await $tw.ipfs.pinToIpfs(added)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n }\n // Publish to IPNS\n if (ipnsKey !== null && ipnsName !== null) {\n $tw.utils.alert(name, `Publishing IPNS name: ${ipnsName}`)\n try {\n await $tw.ipfs.publishIpnsName(added, ipnsKey, ipnsName)\n nextWiki.pathname = `/${ipnsKeyword}/${ipnsKey}`\n $tw.utils.alert(name, `Successfully Published IPNS name: ${ipnsName}`)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n $tw.ipfs.requestToPin(ipnsCid)\n }\n }\n // Publish to ENS\n if ($tw.utils.getIpfsProtocol() === ensKeyword) {\n try {\n $tw.utils.alert(name, `Publishing to ENS: ${ensDomain}`)\n await $tw.ipfs.setEns(ensDomain, added)\n // const chainId = $tw.ipfs.getChainId()\n // if (chainId !== null && chainId === 1) {\n // nextWiki.protocol = 'https:'\n // nextWiki.host = ensDomain\n // } else {\n const { resolvedUrl } = await $tw.ipfs.resolveEns(ensDomain)\n nextWiki.protocol = resolvedUrl.protocol\n nextWiki.host = resolvedUrl.host\n nextWiki.pathname = resolvedUrl.pathname\n // }\n $tw.utils.alert(name, `Successfully published to ENS: ${ensDomain}`)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n $tw.ipfs.requestToPin(ensCid)\n }\n }\n $tw.ipfs.pin = []\n // Unpin\n if ($tw.utils.getIpfsUnpin()) {\n for (var i in $tw.ipfs.unpin) {\n try {\n const unpin = $tw.ipfs.unpin[i]\n await $tw.ipfs.unpinFromIpfs(unpin)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n }\n }\n }\n $tw.ipfs.unpin = []\n // Pin\n for (var i in $tw.ipfs.pin) {\n try {\n const pin = $tw.ipfs.pin[i]\n await $tw.ipfs.pinToIpfs(pin)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n }\n }\n callback(null)\n if (nextWiki.host !== wiki.host || nextWiki.pathname !== wiki.pathname) {\n window.location.assign(nextWiki.toString())\n }\n } catch (error) {\n this.getLogger().error(error)\n callback(error.message)\n return true\n }\n callback(null)\n return true\n }\n\n /*\n * Information about this saver\n */\n IpfsSaver.prototype.info = {\n name: 'Ipfs',\n priority: 3100,\n capabilities: ['save']\n }\n\n /*\n * Static method that returns true if this saver is capable of working\n */\n exports.canSave = function (wiki) {\n return true\n }\n\n /*\n * Create an instance of this saver\n */\n exports.create = function (wiki) {\n return new IpfsSaver(wiki)\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "saver"
},
"$:/plugins/ipfs/operator/ipfs-savers.js": {
"title": "$:/plugins/ipfs/operator/ipfs-savers.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/operator/ipfs-savers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nThis Filter operator return savers title\n\n\\*/\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n Export our filter function\n */\n exports.savers = function (source, operator, options) {\n var results = []\n for (var i in $tw.saverHandler.savers) {\n results.push($tw.saverHandler.savers[i].title)\n }\n return results\n }\n})()\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/plugins/ipfs/ipfs-startup.js": {
"title": "$:/plugins/ipfs/ipfs-startup.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-startup.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: startup\n\nStartup initialisation\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n exports.platforms = ['browser']\n exports.after = ['startup']\n exports.synchronous = true\n\n exports.startup = function () {\n // Logger name\n const name = 'ipfs-startup'\n // Missing Media Types\n $tw.utils.registerFileType('application/gzip', 'base64', '.gz')\n $tw.utils.registerFileType('audio/mpeg', 'base64', '.mp2')\n $tw.utils.registerFileType('image/jpg', 'base64', ['.jpg', '.jpeg'], {\n flags: ['image']\n })\n $tw.utils.registerFileType('video/quicktime', 'base64', ['.mov', '.qt'])\n // Log\n const logger = window.log.getLogger(name)\n logger.info('ipfs-startup is starting up...')\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "startup"
},
"$:/plugins/ipfs/ipfs-tiddler.js": {
"title": "$:/plugins/ipfs/ipfs-tiddler.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-tiddler.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Tiddler\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const IpfsImport = require('$:/plugins/ipfs/ipfs-import.js').IpfsImport\n\n const name = 'ipfs-tiddler'\n\n /*\n * https://tiddlywiki.com/#TiddlerFields\n * $:/core/modules/server/routes/get-tiddler.js\n * TODO: expose it as Tiddler ??\n */\n const reservedFields = [\n 'bag',\n 'caption',\n 'class',\n 'color',\n 'description',\n 'created',\n 'creator',\n 'fields',\n 'footer',\n 'hide-body',\n 'icon',\n '_is_skinny',\n 'library',\n 'list',\n 'list-after',\n 'list-before',\n 'modified',\n 'modifier',\n 'name',\n 'plugin-priority',\n 'plugin-type',\n 'permissions',\n 'recipe',\n 'revision',\n // \"source\",\n 'subtitle',\n 'tags',\n 'text',\n // \"url\",\n 'throttle.refresh',\n 'toc-link',\n 'title',\n 'type'\n ]\n\n var IpfsTiddler = function () {\n this.once = false\n }\n\n IpfsTiddler.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsTiddler.prototype.init = function () {\n // Init once\n if (this.once) {\n return\n }\n const self = this\n // Wiki\n $tw.wiki.addEventListener('change', function (changes) {\n return self.handleChangeEvent(changes)\n })\n // Hook\n $tw.hooks.addHook('th-deleting-tiddler', async function (tiddler) {\n return await self.handleDeleteTiddler(tiddler)\n })\n $tw.hooks.addHook('th-importing-tiddler', function (tiddler) {\n return self.handleFileImport(tiddler)\n })\n $tw.hooks.addHook('th-saving-tiddler', async function (tiddler) {\n return await self.handleSaveTiddler(tiddler)\n })\n // Widget\n $tw.rootWidget.addEventListener('tm-ipfs-pin', function (event) {\n return self.handleIpfsPin(event)\n })\n $tw.rootWidget.addEventListener('tm-refresh-tiddler', function (event) {\n return self.handleRefreshTiddler(event)\n })\n $tw.rootWidget.addEventListener('tm-ipfs-unpin', function (event) {\n return self.handleIpfsUnpin(event)\n })\n // Init once\n this.once = true\n }\n\n IpfsTiddler.prototype.handleChangeEvent = function (changes) {\n // Gateway preference\n const gateway = changes['$:/ipfs/saver/gateway']\n if (gateway !== undefined && gateway.modified) {\n const base = $tw.ipfs.getIpfsBaseUrl()\n if ($tw.utils.getIpfsUrlPolicy() === 'gateway') {\n this.getLogger().info(`Gateway Relative URL:\\n ${base}`)\n }\n }\n // Policy preference\n const policy = changes['$:/ipfs/saver/policy']\n if (policy !== undefined && policy.modified) {\n const base = $tw.ipfs.getIpfsBaseUrl()\n if ($tw.utils.getIpfsUrlPolicy() === 'origin') {\n this.getLogger().info(`Origin base URL: ${base}`)\n } else {\n this.getLogger().info(`Gateway base URL: ${base}`)\n }\n }\n // Unpin preference\n const unpin = changes['$:/ipfs/saver/unpin']\n if (unpin !== undefined && unpin.modified) {\n if ($tw.utils.getIpfsUnpin()) {\n this.getLogger().info('Unpin previous IPFS content...')\n } else {\n this.getLogger().info('Do not unpin previous IPFS content...')\n }\n }\n // Verbose preference\n const verbose = changes['$:/ipfs/saver/verbose']\n if (verbose !== undefined && verbose.modified) {\n if ($tw.utils.getIpfsVerbose()) {\n this.updateLoggers('info')\n } else {\n this.updateLoggers('warn')\n }\n }\n }\n\n IpfsTiddler.prototype.handleIpfsPin = function (event) {\n const title = event.tiddlerTitle\n const tiddler = $tw.wiki.getTiddler(title)\n if (event.param !== undefined && event.param !== null) {\n // Tiddler\n for (var field in tiddler.fields) {\n if (reservedFields.indexOf(field) !== -1) {\n continue\n }\n var value = tiddler.getFieldString(field)\n value =\n value === undefined || value == null || value.trim() === ''\n ? null\n : value.trim()\n if (value !== null) {\n this.ipfsPin(value, field)\n }\n }\n return true\n }\n // Wiki\n this.ipfsPin($tw.ipfs.getDocumentUrl().toString(), 'Wiki')\n return true\n }\n\n IpfsTiddler.prototype.ipfsPin = function (value, field) {\n const self = this\n $tw.ipfs\n .resolveUrl(true, true, value)\n .then(data => {\n const { cid, resolvedUrl } = data\n if (resolvedUrl !== null && cid !== null) {\n self.getLogger().info(`Pinning: \"${field}\"\\n ${resolvedUrl}`)\n $tw.ipfs\n .pinToIpfs(cid)\n .then(data => {\n if (data) {\n $tw.ipfs.removeFromPinUnpin(cid, resolvedUrl)\n $tw.utils.alert(\n name,\n `Successfully Pinned : <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"${resolvedUrl}\">${field}</a>`\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n\n IpfsTiddler.prototype.handleIpfsUnpin = async function (event) {\n const title = event.tiddlerTitle\n const tiddler = $tw.wiki.getTiddler(title)\n const { type, info } = $tw.utils.getContentType(title, tiddler.fields.type)\n if (event.param !== undefined && event.param !== null) {\n // Tiddler\n for (var field in tiddler.fields) {\n if (reservedFields.indexOf(field) !== -1) {\n continue\n }\n var value = tiddler.getFieldString(field)\n value =\n value === undefined || value == null || value.trim() === ''\n ? null\n : value.trim()\n if (value !== null) {\n if (info.encoding !== 'base64' && type !== 'image/svg+xml') {\n if (field === '_canonical_uri' || field === '_import_uri') {\n continue\n }\n }\n this.ipfsUnpin(value, field)\n }\n }\n return true\n }\n // Wiki\n this.ipfsUnpin($tw.ipfs.getDocumentUrl().toString(), 'Wiki')\n return true\n }\n\n IpfsTiddler.prototype.ipfsUnpin = function (value, field) {\n value =\n value === undefined || value == null || value.trim() === ''\n ? null\n : value.trim()\n if (value == null) {\n return\n }\n field =\n field === undefined || field == null || field.trim() === ''\n ? null\n : field.trim()\n if (field == null) {\n return\n }\n const self = this\n $tw.ipfs\n .resolveUrl(true, true, value)\n .then(data => {\n const { cid, resolvedUrl } = data\n if (resolvedUrl !== null && cid !== null) {\n self.getLogger().info(`Unpinning: \"${field}\\n ${resolvedUrl}`)\n if ($tw.utils.getIpfsUnpin()) {\n $tw.ipfs\n .unpinFromIpfs(cid)\n .then(data => {\n if (data !== undefined && data !== null) {\n $tw.ipfs.removeFromPinUnpin(cid, resolvedUrl)\n $tw.utils.alert(\n name,\n `Successfully Unpinned : <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"${resolvedUrl}\">${field}</a>`\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n\n IpfsTiddler.prototype.updateLoggers = function (level) {\n window.log.setLevel(level, false)\n const loggers = window.log.getLoggers()\n for (var property in loggers) {\n if (Object.prototype.hasOwnProperty.call(loggers, property)) {\n const logger = window.log.getLogger(property)\n logger.setLevel(level, false)\n }\n }\n }\n\n IpfsTiddler.prototype.handleDeleteTiddler = async function (tiddler) {\n try {\n const { type, info } = $tw.utils.getContentType(\n tiddler.fields.title,\n tiddler.fields.type\n )\n // Process\n var field = null\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n field = '_canonical_uri'\n } else {\n field = '_export_uri'\n }\n // Value\n var url = null\n const value = tiddler.getFieldString(field)\n if (value !== undefined && value !== null && value !== '') {\n // URL or not\n try {\n url = $tw.ipfs.normalizeUrl(value)\n } catch (error) {\n // Ignore\n }\n // Process\n if (url !== undefined && url !== null) {\n const { cid } = $tw.ipfs.decodeCid(url.pathname)\n // Request to unpin\n if ($tw.utils.getIpfsUnpin() && cid !== null) {\n $tw.ipfs.requestToUnpin(cid)\n }\n }\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n return tiddler\n }\n\n IpfsTiddler.prototype.handleFileImport = function (tiddler) {\n // Update tiddler\n const addition = $tw.wiki.getModificationFields()\n addition.title = tiddler.fields.title\n addition.tags = (tiddler.fields.tags || []).slice(0)\n // Add isAttachment tag\n if (addition.tags.indexOf('$:/isAttachment') === -1) {\n $tw.utils.pushTop(addition.tags, '$:/isAttachment')\n }\n // Add isEmbedded tag\n if (addition.tags.indexOf('$:/isEmbedded') === -1) {\n $tw.utils.pushTop(addition.tags, '$:/isEmbedded')\n }\n return new $tw.Tiddler(tiddler, addition)\n }\n\n IpfsTiddler.prototype.handleRefreshTiddler = function (event) {\n const self = this\n const title = event.tiddlerTitle\n const tiddler = $tw.wiki.getTiddler(title)\n const { type, info } = $tw.utils.getContentType(title, tiddler.fields.type)\n var canonicalUri = tiddler.getFieldString('_canonical_uri')\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var importUri = tiddler.getFieldString('_import_uri')\n importUri =\n importUri === undefined || importUri == null || importUri.trim() === ''\n ? null\n : importUri.trim()\n // Reload Attachment\n if (\n (info.encoding === 'base64' || type === 'image/svg+xml') &&\n canonicalUri !== null &&\n importUri == null\n ) {\n const updatedTiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: '' }]\n })\n $tw.wiki.addTiddler(updatedTiddler)\n return true\n }\n // Async Import\n if (canonicalUri !== null || importUri !== null) {\n var ipfsImport = new IpfsImport()\n ipfsImport.import(canonicalUri, importUri, tiddler).catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n } else {\n $tw.wiki.clearCache(title)\n const changedTiddler = $tw.utils.getChangedTiddler(title)\n $tw.rootWidget.refresh(changedTiddler)\n }\n return true\n }\n\n IpfsTiddler.prototype.handleSaveTiddler = async function (tiddler) {\n // Previous tiddler\n const oldTiddler = $tw.wiki.getTiddler(tiddler.fields.title)\n const { type, info } = $tw.utils.getContentType(\n tiddler.fields.title,\n tiddler.fields.type\n )\n // Prepare\n var updatedTiddler = new $tw.Tiddler(tiddler)\n // Process deleted fields\n if (oldTiddler !== undefined && oldTiddler !== null) {\n for (var field in oldTiddler.fields) {\n // Not a reserved keyword\n if (reservedFields.indexOf(field) !== -1) {\n continue\n }\n // Updated\n const discard = tiddler.fields[field]\n if (\n discard !== undefined &&\n discard !== null &&\n tiddler.getFieldString(field) !== undefined\n ) {\n continue\n }\n // Process\n var oldCid = null\n var oldIpnsKey = null\n var oldNormalizedUrl = null\n var oldResolvedUrl = null\n var oldValue = oldTiddler.getFieldString(field)\n try {\n var {\n cid: oldCid,\n ipnsKey: oldIpnsKey,\n normalizedUrl: oldNormalizedUrl,\n resolvedUrl: oldResolvedUrl\n } = await $tw.ipfs.resolveUrl(false, true, oldValue)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return tiddler\n }\n oldResolvedUrl =\n oldResolvedUrl === undefined ||\n oldResolvedUrl == null ||\n oldResolvedUrl.toString().trim() === ''\n ? null\n : oldResolvedUrl.toString().trim()\n if (oldResolvedUrl !== null && field === '_canonical_uri') {\n var content = tiddler.getFieldString('text')\n // Attachment\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n // Embed\n try {\n if (info.encoding === 'base64') {\n content = await $tw.ipfs.loadToBase64(oldResolvedUrl)\n } else {\n content = await $tw.ipfs.loadToUtf8(oldResolvedUrl)\n }\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n addTags: ['$:/isAttachment', '$:/isEmbedded'],\n fields: [{ key: 'text', value: content.data }]\n })\n this.getLogger().info(\n `Embed attachment: ${content.data.length} bytes\\n ${oldResolvedUrl}`\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return tiddler\n }\n }\n }\n $tw.ipfs.requestToUnpin(oldCid, oldIpnsKey, oldNormalizedUrl)\n }\n }\n var canonicalUri = null\n var exportUri = null\n var importUri = null\n var canonicalCid = null\n var exportCid = null\n var importCid = null\n // Process new and updated fields\n for (var field in tiddler.fields) {\n // Not a reserved keyword\n if (reservedFields.indexOf(field) !== -1) {\n continue\n }\n // Process\n var cid = null\n var ipnsKey = null\n var normalizedUrl = null\n var resolvedUrl = null\n var value = tiddler.getFieldString(field)\n try {\n var {\n cid,\n ipnsKey,\n normalizedUrl,\n resolvedUrl\n } = await $tw.ipfs.resolveUrl(false, true, value)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return tiddler\n }\n // Store\n resolvedUrl =\n resolvedUrl === undefined ||\n resolvedUrl == null ||\n resolvedUrl.toString().trim() === ''\n ? null\n : resolvedUrl.toString().trim()\n if (field === '_canonical_uri') {\n canonicalUri = resolvedUrl\n canonicalCid = cid\n }\n if (field === '_import_uri') {\n importUri = resolvedUrl\n importCid = cid\n }\n if (field === '_export_uri') {\n exportUri = resolvedUrl\n exportCid = cid\n }\n // Previous values if any\n var oldValue = null\n if (oldTiddler !== undefined && oldTiddler !== null) {\n oldValue = oldTiddler.getFieldString(field)\n }\n // Process new or updated\n if (value === oldValue) {\n continue\n }\n var oldCid = null\n var oldIpnsKey = null\n var oldNormalizedUrl = null\n try {\n var {\n cid: oldCid,\n ipnsKey: oldIpnsKey,\n normalizedUrl: oldNormalizedUrl\n } = await $tw.ipfs.resolveUrl(false, true, oldValue)\n } catch (error) {\n // We cannot resolve the previous value\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n // Process _canonical_uri\n if (field === '_canonical_uri') {\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n fields: [{ key: 'text', value: '' }]\n })\n }\n $tw.ipfs.requestToPin(cid, ipnsKey, normalizedUrl)\n $tw.ipfs.requestToUnpin(oldCid, oldIpnsKey, oldNormalizedUrl)\n }\n // Tag management\n var addTags = []\n var removeTags = []\n if (canonicalUri == null && exportUri == null && importUri == null) {\n removeTags.push('$:/isExported', '$:/isImported', '$:/isIpfs')\n }\n if (canonicalCid == null && exportCid == null && importCid == null) {\n if (removeTags.indexOf('$:/isIpfs') === -1) {\n removeTags.push('$:/isIpfs')\n }\n } else {\n addTags.push('$:/isIpfs')\n }\n if (canonicalUri !== null) {\n // Attachment\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n if (addTags.indexOf('$:/isAttachment') === -1) {\n addTags.push('$:/isAttachment')\n }\n if (removeTags.indexOf('$:/isEmbedded') === -1) {\n removeTags.push('$:/isEmbedded')\n }\n if (importUri !== null) {\n if (addTags.indexOf('$:/isImported') === -1) {\n addTags.push('$:/isImported')\n }\n } else {\n if (removeTags.indexOf('$:/isImported') === -1) {\n removeTags.push('$:/isImported')\n }\n }\n // Others\n } else {\n if (removeTags.indexOf('$:/isAttachment') === -1) {\n removeTags.push('$:/isAttachment')\n }\n if (removeTags.indexOf('$:/isEmbedded') === -1) {\n removeTags.push('$:/isEmbedded')\n }\n if (addTags.indexOf('$:/isImported') === -1) {\n addTags.push('$:/isImported')\n }\n }\n } else {\n // Attachment\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n if (addTags.indexOf('$:/isAttachment') === -1) {\n addTags.push('$:/isAttachment')\n }\n if (addTags.indexOf('$:/isEmbedded') === -1) {\n addTags.push('$:/isEmbedded')\n }\n // Others\n } else {\n if (removeTags.indexOf('$:/isAttachment') === -1) {\n removeTags.push('$:/isAttachment')\n }\n if (removeTags.indexOf('$:/isEmbedded') === -1) {\n removeTags.push('$:/isEmbedded')\n }\n }\n if (importUri !== null) {\n if (addTags.indexOf('$:/isImported') === -1) {\n addTags.push('$:/isImported')\n }\n } else {\n if (removeTags.indexOf('$:/isImported') === -1) {\n removeTags.push('$:/isImported')\n }\n }\n }\n if (exportUri !== null) {\n if (addTags.indexOf('$:/isExported') === -1) {\n addTags.push('$:/isExported')\n }\n } else {\n if (removeTags.indexOf('$:/isExported') === -1) {\n removeTags.push('$:/isExported')\n }\n }\n if (addTags.length > 0 || removeTags.length > 0) {\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n addTags: addTags,\n removeTags: removeTags\n })\n }\n $tw.wiki.addTiddler(updatedTiddler)\n return updatedTiddler\n }\n\n exports.IpfsTiddler = IpfsTiddler\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ipfs-utils.js": {
"title": "$:/plugins/ipfs/ipfs-utils.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-utils.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: utils\n\nIPFS utils\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /**\n * $:/core/modules/utils/logger.js\n *\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n /*\n * from $:/core/modules/utils/logger.js\n **/\n exports.alert = function (callee, text) {\n if (\n typeof window === 'undefined' ||\n typeof window.navigator === 'undefined'\n ) {\n return\n }\n const ALERT_TAG = '$:/tags/Alert'\n // Prepare the text of the alert\n // var text = Array.prototype.join.call(arguments,\" \");\n // Check if there is an existing alert with the same text and the same component\n var existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG)\n var alertFields\n var existingCount\n var self = this\n $tw.utils.each(existingAlerts, function (title) {\n var tiddler = $tw.wiki.getTiddler(title)\n if (\n tiddler.fields.text === text &&\n tiddler.fields.component === self.componentName &&\n tiddler.fields.modified &&\n (!alertFields || tiddler.fields.modified < alertFields.modified)\n ) {\n alertFields = $tw.utils.extend({}, tiddler.fields)\n }\n })\n if (alertFields) {\n existingCount = alertFields.count || 1\n } else {\n alertFields = {\n title: $tw.wiki.generateNewTitle('$:/temp/alerts/alert', {\n prefix: ''\n }),\n text: text,\n tags: [ALERT_TAG],\n component: callee\n }\n existingCount = 0\n }\n alertFields.modified = new Date()\n if (++existingCount > 1) {\n alertFields.count = existingCount\n } else {\n alertFields.count = undefined\n }\n $tw.wiki.addTiddler(new $tw.Tiddler(alertFields))\n }\n\n exports.getChangedTiddler = function (object) {\n // Holder\n const changedTiddler = Object.create(null)\n // Check\n if (object === undefined || object == null) {\n return changedTiddler\n }\n if (object instanceof $tw.Tiddler === false && typeof object !== 'string') {\n return changedTiddler\n }\n // Retrieve title\n var title = null\n if (typeof object === 'string') {\n title = object\n }\n if (object instanceof $tw.Tiddler) {\n title = object.getFieldString('title')\n }\n // Check\n if (title === undefined || title == null) {\n return changedTiddler\n }\n // Process title\n changedTiddler[title] = Object.create(null)\n // Done\n return changedTiddler\n }\n\n exports.updateTiddler = function (updates) {\n // Is there anything to do\n if (\n updates === undefined ||\n updates == null ||\n updates.tiddler === undefined ||\n updates.tiddler == null\n ) {\n return null\n }\n // Prepare updates\n const fields = $tw.wiki.getModificationFields()\n // Tags\n fields.tags = (updates.tiddler.fields.tags || []).slice(0)\n // Process add tags\n if (\n updates.addTags !== undefined &&\n updates.addTags !== null &&\n Array.isArray(updates.addTags)\n ) {\n for (var i = 0; i < updates.addTags.length; i++) {\n const tag = updates.addTags[i]\n if (fields.tags.indexOf(tag) === -1) {\n $tw.utils.pushTop(fields.tags, tag)\n }\n }\n }\n // Process remove tags\n if (\n updates.removeTags !== undefined &&\n updates.removeTags !== null &&\n Array.isArray(updates.removeTags)\n ) {\n for (var i = 0; i < updates.removeTags.length; i++) {\n const tag = updates.removeTags[i]\n const index = fields.tags.indexOf(tag)\n if (index !== -1) {\n fields.tags.splice(index, 1)\n }\n }\n }\n // Process fields\n if (\n updates.fields !== undefined &&\n updates.fields !== null &&\n Array.isArray(updates.fields)\n ) {\n for (var i = 0; i < updates.fields.length; i++) {\n const field = updates.fields[i]\n if (field.key !== undefined && field.key !== null) {\n fields[field.key] = field.value\n }\n }\n }\n // Update tiddler\n return new $tw.Tiddler(updates.tiddler, fields)\n }\n\n exports.getContentType = function (title, type) {\n type =\n type === undefined || type == null || type.trim() === ''\n ? null\n : type.trim()\n if (type == null) {\n type = 'text/vnd.tiddlywiki'\n }\n var info = $tw.config.contentTypeInfo[type]\n if (info === undefined || info == null) {\n const url = $tw.ipfs.getDocumentUrl()\n url.hash = title\n this.getLogger().info(\n `Unknown Content-Type: \"${type}\", default: \"text/vnd.tiddlywiki\":\\n ${url}`\n )\n type = 'text/vnd.tiddlywiki'\n info = $tw.config.contentTypeInfo[type]\n }\n return {\n type: type,\n info: info\n }\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "utils"
},
"$:/plugins/ipfs/ipfs-wrapper.js": {
"title": "$:/plugins/ipfs/ipfs-wrapper.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-wrapper.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Wrapper\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /**\n * https://github.com/purposeindustries/window-or-global\n * The MIT License (MIT) Copyright (c) Purpose Industries\n * version: 1.0.1\n */\n const root =\n (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this\n\n const ipfsKeyword = 'ipfs'\n const ipnsKeyword = 'ipns'\n\n const name = 'ipfs-wrapper'\n\n var IpfsWrapper = function (ipfsBundle) {\n this.ipfsBundle = ipfsBundle\n this.ipfsLibrary = ipfsBundle.ipfsLibrary\n this.ipfsUrl = ipfsBundle.ipfsUrl\n }\n\n IpfsWrapper.prototype.getLogger = function () {\n return root.log.getLogger(name)\n }\n\n IpfsWrapper.prototype.getWindowIpfsClient = async function () {\n // IPFS Companion\n try {\n const policy = await this.ipfsLibrary.getWindowIpfs()\n if (policy !== null && policy.ipfs !== null && policy.provider !== null) {\n return policy\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to retrieve IPFS Companion...')\n }\n\n IpfsWrapper.prototype.getHttpIpfsClient = async function (url) {\n // HTTP Client\n try {\n const policy = await this.ipfsLibrary.getHttpIpfs(url)\n if (policy !== null && policy.ipfs !== null && policy.provider !== null) {\n return policy\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to retrieve an IPFS HTTP provider...')\n }\n\n IpfsWrapper.prototype.getIpfsClient = async function (url) {\n // IPFS client\n try {\n var policy = null\n const ipfsProvider = $tw.utils.getIpfsProvider()\n if (ipfsProvider === 'window') {\n policy = await this.ipfsLibrary.getWindowIpfs()\n } else if (ipfsProvider === 'http') {\n policy = await this.ipfsLibrary.getHttpIpfs(url)\n } else {\n policy = await this.ipfsLibrary.getDefaultIpfs(url)\n }\n if (policy !== null && policy.ipfs !== null && policy.provider !== null) {\n return policy\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to retrieve an IPFS provider...')\n }\n\n IpfsWrapper.prototype.getIpnsIdentifiers = async function (\n ipfs,\n identifier,\n ipnsName\n ) {\n identifier =\n identifier === undefined || identifier == null || identifier.trim() === ''\n ? null\n : identifier.trim()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (identifier == null && ipnsName == null) {\n throw new Error('Undefined IPNS identifiers...')\n }\n var found = false\n var ipnsKey = null\n var keys = null\n var normalizedUrl = null\n try {\n // Only the server who generates the key has the knowledge\n keys = await this.getIpnsKeys(ipfs)\n } catch (error) {\n this.getLogger().error(error)\n }\n // Do our best\n if (ipnsName !== null && identifier !== null) {\n if (keys !== null && keys !== undefined && Array.isArray(keys)) {\n for (var index = 0; index < keys.length; index++) {\n if (keys[index].id === identifier && keys[index].name === ipnsName) {\n ipnsKey = identifier\n found = true\n break\n }\n }\n }\n } else if (ipnsName !== null) {\n if (keys !== null && keys !== undefined && Array.isArray(keys)) {\n for (var index = 0; index < keys.length; index++) {\n if (keys[index].name === ipnsName) {\n ipnsKey = keys[index].id\n found = true\n break\n }\n }\n }\n } else {\n if (keys !== null && keys !== undefined && Array.isArray(keys)) {\n for (var index = 0; index < keys.length; index++) {\n if (\n keys[index].id === identifier ||\n keys[index].name === identifier\n ) {\n ipnsKey = keys[index].id\n ipnsName = keys[index].name\n found = true\n break\n }\n }\n }\n }\n if (found === false) {\n // Unable to resolve the keys, check if identifier is a an IPFS cid\n if (this.ipfsBundle.isCid(identifier) === false) {\n throw new Error('Unknown IPNS identifier...')\n }\n ipnsKey = identifier\n }\n // Lets build an url, the resolver will do the final check, we cannot do more here\n normalizedUrl = this.ipfsUrl.normalizeUrl(`/${ipnsKeyword}/${ipnsKey}`)\n if (found) {\n this.getLogger().info(\n `Successfully Fetched IPNS identifiers: ${ipnsName}\\n ${normalizedUrl}`\n )\n } else {\n this.getLogger().info(\n `Unable to Fetch IPNS identifiers, default to\\n ${normalizedUrl}`\n )\n }\n return {\n ipnsKey: ipnsKey,\n ipnsName: ipnsName,\n normalizedUrl: normalizedUrl\n }\n }\n\n IpfsWrapper.prototype.generateIpnsKey = async function (ipfs, ipnsName) {\n try {\n const key = await this.ipfsLibrary.genKey(ipfs, ipnsName)\n const url = this.ipfsUrl.normalizeUrl(`/${ipnsKeyword}/${key}`)\n this.getLogger().info(\n `Successfully generated IPNS key with IPNS name: ${ipnsName}\\n ${url}`\n )\n return key\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to generate and IPNS key...')\n }\n\n IpfsWrapper.prototype.removeIpnsKey = async function (ipfs, ipnsName) {\n try {\n const hash = await this.ipfsLibrary.rmKey(ipfs, ipnsName)\n this.getLogger().info(`Successfully removed IPNS name: ${ipnsName}`)\n return hash\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to remove an IPNS Key...')\n }\n\n IpfsWrapper.prototype.renameIpnsName = async function (\n ipfs,\n oldIpnsName,\n newIpnsName\n ) {\n try {\n const { id: key, was, now } = await this.ipfsLibrary.renameKey(\n ipfs,\n oldIpnsName,\n newIpnsName\n )\n this.getLogger().info(\n `Successfully renamed IPNS name: ${was} with ${now}`\n )\n return {\n ipnsKey: key,\n ipnsName: now\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to rename an IPNS name...')\n }\n\n IpfsWrapper.prototype.getIpnsKeys = async function (ipfs) {\n try {\n const keys = await this.ipfsLibrary.getKeys(ipfs)\n this.getLogger().info('Successfully fetched IPNS keys...')\n return keys\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to fetch IPNS keys...')\n }\n\n IpfsWrapper.prototype.fetchFromIpfs = async function (ipfs, cid) {\n cid =\n cid === undefined || cid == null || cid.toString().trim() === ''\n ? null\n : cid.toString().trim()\n if (cid == null) {\n throw new Error('Undefined IPNS identifier...')\n }\n const pathname = `/${ipfsKeyword}/${cid}`\n try {\n const fetched = await this.ipfsLibrary.cat(ipfs, pathname)\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(`Successfully fetched:\\n ${url}`)\n return fetched\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to fetch from IPFS...')\n }\n\n IpfsWrapper.prototype.addToIpfs = async function (ipfs, content) {\n try {\n const { hash, size } = await this.ipfsLibrary.add(ipfs, content)\n const pathname = '/' + ipfsKeyword + '/' + hash\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(`Successfully added ${size} bytes:\\n ${url}`)\n return {\n added: hash,\n size: size\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to add content to IPFS...')\n }\n\n IpfsWrapper.prototype.resolveIpnsKey = async function (ipfs, ipnsKey) {\n ipnsKey =\n ipnsKey === undefined || ipnsKey == null || ipnsKey.trim() === ''\n ? null\n : ipnsKey.trim()\n if (ipnsKey == null) {\n throw new Error('Undefined IPNS key...')\n }\n const pathname = `/${ipnsKeyword}/${ipnsKey}`\n try {\n const url = this.ipfsUrl.normalizeUrl(pathname)\n const resolved = await this.ipfsLibrary.resolve(ipfs, pathname)\n const { cid } = this.ipfsBundle.decodeCid(resolved)\n if (cid !== null) {\n const parsed = this.ipfsUrl.normalizeUrl(resolved)\n this.getLogger().info(\n `Successfully resolved IPNS key:\\n ${url} \\n ${parsed}`\n )\n return cid\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to resolve an IPNS key...')\n }\n\n IpfsWrapper.prototype.publishIpnsName = async function (\n cid,\n ipfs,\n ipnsKey,\n ipnsName\n ) {\n ipnsKey =\n ipnsKey === undefined || ipnsKey == null || ipnsKey.trim() === ''\n ? null\n : ipnsKey.trim()\n if (ipnsKey == null) {\n throw new Error('Undefined IPNS key...')\n }\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n throw new Error('Undefined IPNS name...')\n }\n cid =\n cid === undefined || cid == null || cid.toString().trim() === ''\n ? null\n : cid.toString().trim()\n if (cid == null) {\n throw new Error('Undefined IPNS identifier...')\n }\n // Path\n const key = `/${ipnsKeyword}/${ipnsKey}`\n const pathname = `/${ipfsKeyword}/${cid}`\n try {\n // Publish\n const result = await this.ipfsLibrary.publish(ipfs, ipnsName, pathname)\n const keyParsed = this.ipfsUrl.normalizeUrl(key)\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(\n `Successfully published IPNS name: ${ipnsName}\\n ${keyParsed}\\n ${url}`\n )\n return result\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to publish an IPNS name...')\n }\n\n IpfsWrapper.prototype.pinToIpfs = async function (ipfs, cid) {\n cid =\n cid === undefined || cid == null || cid.toString().trim() === ''\n ? null\n : cid.toString().trim()\n if (cid == null) {\n throw new Error('Undefined IPNS identifier...')\n }\n const pathname = `/${ipfsKeyword}/${cid}`\n try {\n const pinned = await this.ipfsLibrary.pin(ipfs, pathname)\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(`Successfully pinned:\\n ${url}`)\n return pinned\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to pin to IPFS...')\n }\n\n IpfsWrapper.prototype.unpinFromIpfs = async function (ipfs, cid) {\n cid =\n cid === undefined || cid == null || cid.toString().trim() === ''\n ? null\n : cid.toString().trim()\n if (cid == null) {\n throw new Error('Undefined IPNS identifier...')\n }\n const pathname = `/${ipfsKeyword}/${cid}`\n try {\n const unpinned = await this.ipfsLibrary.unpin(ipfs, pathname)\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(`Successfully unpinned:\\n ${url}`)\n return unpinned\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to unpin from IPFS...')\n }\n\n exports.IpfsWrapper = IpfsWrapper\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/language/Buttons/3Box/Profile/Caption": {
"title": "$:/language/Buttons/3Box/Profile/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "3Box profile"
},
"$:/language/Buttons/3Box/Profile/Hint": {
"title": "$:/language/Buttons/3Box/Profile/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Load 3Box profile"
},
"$:/language/Buttons/Ipfs/Export/Caption": {
"title": "$:/language/Buttons/Ipfs/Export/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "export to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Hint": {
"title": "$:/language/Buttons/Ipfs/Export/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Export this tiddler to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Attachment/Caption": {
"title": "$:/language/Buttons/Ipfs/Export/Attachment/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "export attachment to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Attachment/Hint": {
"title": "$:/language/Buttons/Ipfs/Export/Attachment/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Export attachment to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Content/Caption": {
"title": "$:/language/Buttons/Ipfs/Export/Content/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "export content to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Content/Hint": {
"title": "$:/language/Buttons/Ipfs/Export/Content/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Export this tiddler content to IPFS"
},
"$:/language/Buttons/Ipns/Fetch/Caption": {
"title": "$:/language/Buttons/Ipns/Fetch/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "fetch from IPNS"
},
"$:/language/Buttons/Ipns/Fetch/Hint": {
"title": "$:/language/Buttons/Ipns/Fetch/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Fetch IPNS key"
},
"$:/language/Buttons/Ipns/Generate/Caption": {
"title": "$:/language/Buttons/Ipns/Generate/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "generate IPNS"
},
"$:/language/Buttons/Ipns/Generate/Hint": {
"title": "$:/language/Buttons/Ipns/Generate/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Generate IPNS key"
},
"$:/language/Buttons/Ipfs/Refresh/Caption": {
"title": "$:/language/Buttons/Ipfs/Refresh/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "refresh"
},
"$:/language/Buttons/Ipfs/Refresh/Hint": {
"title": "$:/language/Buttons/Ipfs/Refresh/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Perform a full refresh of the tiddler"
},
"$:/language/Buttons/Ipfs/Pin/Caption": {
"title": "$:/language/Buttons/Ipfs/Pin/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "pin to IPFS"
},
"$:/language/Buttons/Ipfs/Pin/Hint": {
"title": "$:/language/Buttons/Ipfs/Pin/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Pin this wiki to IPFS"
},
"$:/language/Buttons/Ipfs/Tiddler/Pin/Caption": {
"title": "$:/language/Buttons/Ipfs/Tiddler/Pin/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "pin to IPFS"
},
"$:/language/Buttons/Ipfs/Tiddler/Pin/Hint": {
"title": "$:/language/Buttons/Ipfs/Tiddler/Pin/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Pin tiddler resources to IPFS"
},
"$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption": {
"title": "$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "unpin from IPFS"
},
"$:/language/Buttons/Ipfs/Tiddler/Unpin/Hint": {
"title": "$:/language/Buttons/Ipfs/Tiddler/Unpin/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Unpin tiddler resources from IPFS"
},
"$:/language/Buttons/Ipfs/Unpin/Caption": {
"title": "$:/language/Buttons/Ipfs/Unpin/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "unpin from IPFS"
},
"$:/language/Buttons/Ipfs/Unpin/Hint": {
"title": "$:/language/Buttons/Ipfs/Unpin/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Unpin this wiki from IPFS"
},
"$:/language/Buttons/Console/Mobile/Caption": {
"title": "$:/language/Buttons/Console/Mobile/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "mobile console"
},
"$:/language/Buttons/Console/Mobile/Hint": {
"title": "$:/language/Buttons/Console/Mobile/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Load/Unload Mobile Console"
},
"$:/language/Buttons/Ens/Manager/Open/Caption": {
"title": "$:/language/Buttons/Ens/Manager/Open/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "open ENS Manager"
},
"$:/language/Buttons/Ens/Manager/Open/Hint": {
"title": "$:/language/Buttons/Ens/Manager/Open/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Open ENS Domain Manager"
},
"$:/language/Buttons/Ens/Publish/Caption": {
"title": "$:/language/Buttons/Ens/Publish/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "publish to ENS"
},
"$:/language/Buttons/Ens/Publish/Hint": {
"title": "$:/language/Buttons/Ens/Publish/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Publish this wiki to ENS"
},
"$:/language/Buttons/Ens/Resolve/And/Open/Caption": {
"title": "$:/language/Buttons/Ens/Resolve/And/Open/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "open ENS Domain content"
},
"$:/language/Buttons/Ens/Resolve/And/Open/Hint": {
"title": "$:/language/Buttons/Ens/Resolve/And/Open/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Open resolved ENS Domain content"
},
"$:/language/Buttons/Ipns/Publish/Caption": {
"title": "$:/language/Buttons/Ipns/Publish/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "publish to IPNS"
},
"$:/language/Buttons/Ipns/Publish/Hint": {
"title": "$:/language/Buttons/Ipns/Publish/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Publish this wiki to IPNS"
},
"$:/language/Buttons/Ipns/Remove/Caption": {
"title": "$:/language/Buttons/Ipns/Remove/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "remove"
},
"$:/language/Buttons/Ipns/Remove/Hint": {
"title": "$:/language/Buttons/Ipns/Remove/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Remove IPNS name and IPNS key"
},
"$:/language/Buttons/Ipns/Rename/Caption": {
"title": "$:/language/Buttons/Ipns/Rename/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "rename"
},
"$:/language/Buttons/Ipns/Rename/Hint": {
"title": "$:/language/Buttons/Ipns/Rename/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Rename IPNS name"
},
"$:/language/Buttons/Ipns/Resolve/And/Open/Caption": {
"title": "$:/language/Buttons/Ipns/Resolve/And/Open/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "resolve and open"
},
"$:/language/Buttons/Ipns/Resolve/And/Open/Hint": {
"title": "$:/language/Buttons/Ipns/Resolve/And/Open/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Open resolved IPNS key"
},
"$:/language/ControlPanel/Saving/IpfsService/Caption": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Caption",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS Saver"
},
"$:/language/ControlPanel/Saving/IpfsService/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "These settings are only used when saving to IPFS."
},
"$:/language/ControlPanel/Saving/IpfsService/Verbose": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Verbose",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Saver Verbose"
},
"$:/language/ControlPanel/Saving/IpfsService/Url": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Url",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS Server URL"
},
"$:/language/ControlPanel/Saving/IpfsService/ApiUrl": {
"title": "$:/language/ControlPanel/Saving/IpfsService/ApiUrl",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "API"
},
"$:/language/ControlPanel/Saving/IpfsService/GatewayUrl": {
"title": "$:/language/ControlPanel/Saving/IpfsService/GatewayUrl",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Gateway"
},
"$:/language/ControlPanel/Saving/IpfsService/Ens": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Ens",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "ENS"
},
"$:/language/ControlPanel/Saving/IpfsService/EnsDomain": {
"title": "$:/language/ControlPanel/Saving/IpfsService/EnsDomain",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "ENS domain"
},
"$:/language/ControlPanel/Saving/IpfsService/Ipns": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Ipns",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPNS"
},
"$:/language/ControlPanel/Saving/IpfsService/IpnsName": {
"title": "$:/language/ControlPanel/Saving/IpfsService/IpnsName",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPNS name"
},
"$:/language/ControlPanel/Saving/IpfsService/IpnsKey": {
"title": "$:/language/ControlPanel/Saving/IpfsService/IpnsKey",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPNS key"
},
"$:/language/ControlPanel/Saving/IpfsService/Resolved": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Resolved",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Resolved"
},
"$:/language/ControlPanel/Saving/IpfsService/Global": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Global",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Global"
},
"$:/language/ControlPanel/Saving/IpfsService/Verbose/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Verbose/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Verbose"
},
"$:/language/ControlPanel/Saving/IpfsService/Unpin/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Unpin/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Unpin previous content"
},
"$:/language/ControlPanel/Saving/IpfsService/Wait/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Wait/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Wait"
},
"$:/language/ControlPanel/Saving/IpfsService/Policy": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Policy",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Relative URL Policy"
},
"$:/language/ControlPanel/Saving/IpfsService/Policy/Origin/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Policy/Origin/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Origin"
},
"$:/language/ControlPanel/Saving/IpfsService/Policy/Gateway/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Policy/Gateway/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Gateway"
},
"$:/language/ControlPanel/Saving/IpfsService/Protocol": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Protocol",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Protocol"
},
"$:/language/ControlPanel/Saving/IpfsService/Protocol/Ens/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Protocol/Ens/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "ENS"
},
"$:/language/ControlPanel/Saving/IpfsService/Protocol/Ipfs/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Protocol/Ipfs/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS"
},
"$:/language/ControlPanel/Saving/IpfsService/Protocol/Ipns/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Protocol/Ipns/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPNS"
},
"$:/language/ControlPanel/Saving/IpfsService/Export": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Export",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Export"
},
"$:/language/ControlPanel/Saving/IpfsService/Export/Static/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Export/Static/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Static"
},
"$:/language/ControlPanel/Saving/IpfsService/Export/Json/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Export/Json/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "JSON"
},
"$:/language/ControlPanel/Saving/IpfsService/Export/Tid/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Export/Tid/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "TID"
},
"$:/language/ControlPanel/Saving/IpfsService/Provider": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Provider",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS Provider"
},
"$:/language/ControlPanel/Saving/IpfsService/Provider/Default/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Provider/Default/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Default"
},
"$:/language/ControlPanel/Saving/IpfsService/Provider/Window/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Provider/Window/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS Companion"
},
"$:/language/ControlPanel/Saving/IpfsService/Provider/HTTP/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Provider/HTTP/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "HTTP Client"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "<b>~TiddlyWiki</b>:"
},
"$:/language/ControlPanel/Ipfs/Version/Prompt": {
"title": "$:/language/ControlPanel/Ipfs/Version/Prompt",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "<b>IPFS</b>:"
},
"$:/language/ControlPanel/Settings/PreferredSaver/Caption": {
"title": "$:/language/ControlPanel/Settings/PreferredSaver/Caption",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Preferred Saver"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Ways to customise the appearance of your <b>~TiddlyWiki</b>."
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Information about this <b>~TiddlyWiki</b>"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Settings used for saving the entire <b>~TiddlyWiki</b> as a single file via a saver module."
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "These settings let you customise the behaviour of <b>~TiddlyWiki</b>."
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"modified": "20200528094915385",
"text": "This tiddler shows content stored outside of the main ~TiddlyWiki file.<br/>You can edit the tags and fields but cannot directly edit the content itself"
},
"$:/language/NetworkError/XMLHttpRequest": {
"title": "$:/language/NetworkError/XMLHttpRequest",
"modified": "20200528094915385",
"text": "Network Error while loading..."
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"modified": "20200528094915385",
"text": "<p>Trying to load external Tiddler content from:<p></p>''<$ipfslink field=\"_canonical_uri\" tiddler=<<currentTiddler>>/>''</p>"
},
"$:/language/EmptyTidddler": {
"title": "$:/language/EmptyTidddler",
"modified": "20200528094915385",
"text": "<p>An external Tiddler content has been loaded:</p><p>''<$ipfslink field=\"_canonical_uri\" tiddler=<<currentTiddler>>/>''</p><p>The imported Tiddler content is empty, possible reasons:</p><ul><li>The Tiddler Content Type doesn't match the type of the external content.</li>"
},
"$:/plugins/ipfs/changelog": {
"title": "$:/plugins/ipfs/changelog",
"modified": "20200525094915385",
"tags": "$:/ipfs/core",
"type": "text/vnd.tiddlywiki",
"text": "!! v0.3.0\n\n[[See GitHub for detailed change history of this release|https://github.com/xmaysonnave/tiddlywiki-ipfs/compare/v0.2.9...v0.3.0]]\n\n!! v0.2.9\n\n[[See GitHub for detailed change history of this release|https://github.com/xmaysonnave/tiddlywiki-ipfs/compare/v0.2.8...v0.2.9]]\n\n!! v0.2.8\n\n[[See GitHub for detailed change history of this release|https://github.com/xmaysonnave/tiddlywiki-ipfs/compare/v0.2.7...v0.2.8]]\n\n...\n\n!! 0.2.2\n\n* First public release"
},
"$:/plugins/ipfs/readme": {
"title": "$:/plugins/ipfs/readme",
"modified": "20200525094915385",
"tags": "$:/ipfs/core",
"type": "text/vnd.tiddlywiki",
"text": "!! IPFS with ~TiddlyWiki\n\nFeatures:\n\n* Store `TiddlyWiki's` and attachments on [ext[IPFS|https://ipfs.io/]]\n* Access `TiddlyWiki's` and attachments from [ext[IPFS|https://ipfs.io/]]\n* Encrypt and Unencrypt `TiddlyWiki` and attachments\n* Publish and Manage IPNS Keys and Names\n* Interact with [ext[Metamask|https://metamask.io]] Ethereum wallets\n* Publish to [ext[ENS|https://ens.domains]]\n* Share over [ext[IPFS|https://ipfs.io/]] `TiddlyWiki's` [ext[Tiddlers|https://tiddlywiki.com/#Tiddlers]] and attachments\n\nSupported Browsers:\n\n* [ext[Firefox|https://www.mozilla.org]]\n* [ext[Chrome|https://www.google.com/chrome/]]\n* [ext[Chromium|https://www.chromium.org]]\n\nSupported Ethereum browser extension:\n\n* [ext[Metamask|https://metamask.io]]\n\nSupported Mobile ĐApp browser:\n\n* [ext[Metamask|https://metamask.io]]\n\nSupported ENS Ethereum Networks\n\n* `Mainnet`: Ethereum Main Network\n* `Ropsten`: Ethereum Test Network (~PoW)\n* `Rinkeby`: Ethereum Test Network (~PoA)\n* `Goerli`: Ethereum Test Network (~PoA)\n\nResources:\n\n* https://github.com/xmaysonnave/tiddlywiki-ipfs/\n* https://github.com/xmaysonnave/tiddlywiki-ipfs/blob/master/README.md\n\n!! With a capable ENS browser:\n\n* [ext[IPFS with TiddlyWiki|https://bluelightav.eth]] on \"Mainnet: Ethereum Main Network\"\n* [ext[IPFS with TiddlyWiki|https://bluelightav.eth]] on [ext[Rinkeby|https://www.rinkeby.io/]] (~PoA): Ethereum Test Network\n* [ext[IPFS with TiddlyWiki plugin|https://bluelightav.eth/#%24%3A%2Fplugins%2Fipfs]]\n* [ext[IPFS with TiddlyWiki Documentation|https://bluelightav.eth/#IPFS%20Documentation]]\n\n!! With a non capable ENS browser:\n\n* [ext[IPFS with TiddlyWiki|https://bluelightav.eth.link]]\n* [ext[IPFS with TiddlyWiki plugin|https://bluelightav.eth.link/#%24%3A%2Fplugins%2Fipfs]]\n* [ext[IPFS with TiddlyWiki Documentation|https://bluelightav.eth.link/#IPFS%20Documentation]]"
},
"$:/ipfs/saver/api/http/localhost/5001": {
"title": "$:/ipfs/saver/api/http/localhost/5001",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/api",
"text": "http://127.0.0.1:5001"
},
"$:/ipfs/saver/api/https/ipfs.infura.io/5001": {
"title": "$:/ipfs/saver/api/https/ipfs.infura.io/5001",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/api",
"text": "https://ipfs.infura.io:5001"
},
"$:/ipfs/saver/api/https/ipfs.bluelightav.org": {
"title": "$:/ipfs/saver/api/https/ipfs.bluelightav.org",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/api",
"text": "https://ipfs.bluelightav.org"
},
"$:/ipfs/saver/gateway/https/ipfs.busy.org": {
"title": "$:/ipfs/saver/gateway/https/ipfs.busy.org",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.busy.org"
},
"$:/ipfs/saver/gateway/https/cloudflare-ipfs.com": {
"title": "$:/ipfs/saver/gateway/https/cloudflare-ipfs.com",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://cloudflare-ipfs.com"
},
"$:/ipfs/saver/gateway/https/ipfs.eternum.io": {
"title": "$:/ipfs/saver/gateway/https/ipfs.eternum.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.eternum.io"
},
"$:/ipfs/saver/gateway/https/gateway.bluelightav.org": {
"title": "$:/ipfs/saver/gateway/https/gateway.bluelightav.org",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://gateway.bluelightav.org"
},
"$:/ipfs/saver/gateway/https/gateway.ipfs.io": {
"title": "$:/ipfs/saver/gateway/https/gateway.ipfs.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://gateway.ipfs.io"
},
"$:/ipfs/saver/gateway/https/ipfs.greyh.at": {
"title": "$:/ipfs/saver/gateway/https/ipfs.greyh.at",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.greyh.at"
},
"$:/ipfs/saver/gateway/https/hardbin.com": {
"title": "$:/ipfs/saver/gateway/https/hardbin.com",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://hardbin.com"
},
"$:/ipfs/saver/gateway/http/localhost": {
"title": "$:/ipfs/saver/gateway/http/localhost",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "http://127.0.0.1:8080"
},
"$:/ipfs/saver/gateway/https/ipfs.infura.io": {
"title": "$:/ipfs/saver/gateway/https/ipfs.infura.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.infura.io"
},
"$:/ipfs/saver/gateway/https/ipfs.bluelightav.org": {
"title": "$:/ipfs/saver/gateway/https/ipfs.bluelightav.org",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.bluelightav.org"
},
"$:/ipfs/saver/gateway/https/ipfs.io": {
"title": "$:/ipfs/saver/gateway/https/ipfs.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.io"
},
"$:/ipfs/saver/gateway/https/ipfs.jes.xxx": {
"title": "$:/ipfs/saver/gateway/https/ipfs.jes.xxx",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs $:/ipfs/saver/gateway",
"text": "https://ipfs.jes.xxx"
},
"$:/ipfs/saver/gateway/https/ninetailed.ninja": {
"title": "$:/ipfs/saver/gateway/https/ninetailed.ninja",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ninetailed.ninja"
},
"$:/ipfs/saver/gateway/https/gateway.pinata.cloud": {
"title": "$:/ipfs/saver/gateway/https/gateway.pinata.cloud",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://gateway.pinata.cloud"
},
"$:/ipfs/saver/gateway/https/siderus.io": {
"title": "$:/ipfs/saver/gateway/https/siderus.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://siderus.io"
},
"$:/ipfs/saver/gateway/https/ipfs.sloppyta.co": {
"title": "$:/ipfs/saver/gateway/https/ipfs.sloppyta.co",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.sloppyta.co"
},
"$:/ipfs/saver/gateway/https/gateway.temporal.cloud": {
"title": "$:/ipfs/saver/gateway/https/gateway.temporal.cloud",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://gateway.temporal.cloud"
},
"$:/ipfs/saver/gateway/https/ipfs.wa.hle.rs": {
"title": "$:/ipfs/saver/gateway/https/ipfs.wa.hle.rs",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.wa.hle.rs"
},
"$:/core/ui/Buttons/3box/profile": {
"title": "$:/core/ui/Buttons/3box/profile",
"modified": "20200606094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/images/fa5/solid/user-cog}} {{$:/language/Buttons/3Box/Profile/Caption}}",
"description": "{{$:/language/Buttons/3Box/Profile/Hint}}",
"text": "<$button message=\"tm-3box-profile\" tooltip={{$:/language/Buttons/3Box/Profile/Hint}} aria-label={{$:/language/Buttons/3Box/Profile/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/images/fa5/solid/user-cog}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/3Box/Profile/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/console/mobile": {
"title": "$:/core/ui/Buttons/ipfs/console/mobile",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/preview-open}} {{$:/language/Buttons/Console/Mobile/Caption}}",
"description": "{{$:/language/Buttons/Console/Mobile/Hint}}",
"text": "<$button message=\"tm-console-mobile\" tooltip={{$:/language/Buttons/Console/Mobile/Hint}} aria-label={{$:/language/Buttons/Console/Mobile/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/preview-open}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Console/Mobile/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/pin": {
"title": "$:/core/ui/Buttons/ipfs/pin",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Ipfs/Pin/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Pin/Hint}}",
"text": "<$button message=\"tm-ipfs-pin\" tooltip={{$:/language/Buttons/Ipfs/Pin/Hint}} aria-label={{$:/language/Buttons/Ipfs/Pin/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/chevron-up}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipfs/Pin/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ens/publish": {
"title": "$:/core/ui/Buttons/ens/publish",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/ens}} {{$:/language/Buttons/Ens/Publish/Caption}}",
"description": "{{$:/language/Buttons/Ens/Publish/Hint}}",
"text": "<$button message=\"tm-ens-publish\" tooltip={{$:/language/Buttons/Ens/Publish/Hint}} aria-label={{$:/language/Buttons/Ens/Publish/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/ens}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ens/Publish/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipns/publish": {
"title": "$:/core/ui/Buttons/ipns/publish",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/excise}} {{$:/language/Buttons/Ipns/Publish/Caption}}",
"description": "{{$:/language/Buttons/Ipns/Publish/Hint}}",
"text": "<$button message=\"tm-ipns-publish\" tooltip={{$:/language/Buttons/Ipns/Publish/Hint}} aria-label={{$:/language/Buttons/Ipns/Publish/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/excise}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Publish/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/unpin": {
"title": "$:/core/ui/Buttons/ipfs/unpin",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/chevron-down}} {{$:/language/Buttons/Ipfs/Unpin/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Unpin/Hint}}",
"text": "<$button message=\"tm-ipfs-unpin\" tooltip={{$:/language/Buttons/Ipfs/Unpin/Hint}} aria-label={{$:/language/Buttons/Ipfs/Unpin/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/chevron-down}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipfs/Unpin/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/ControlPanel/Saving/Ipfs": {
"title": "$:/core/ui/ControlPanel/Saving/Ipfs",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/IpfsService/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/IpfsService/\n\\define service-name() Ipfs\n\n<<lingo Description>>\n\n''<<lingo Global>>''\n\n<table>\n<tbody>\n<tr>\n<td width=\"90%\">''<$link to=\"$:/ipfs/saver/verbose\"><<lingo Verbose/Description>></$link>''</td>\n<td width=\"10%\"><$checkbox tiddler=\"$:/ipfs/saver/verbose\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"/></td>\n</tr>\n<tr>\n<td width=\"90%\">''<$link to=\"$:/ipfs/saver/unpin\"><<lingo Unpin/Description>></$link>''</td>\n<td width=\"10%\"><$checkbox tiddler=\"$:/ipfs/saver/unpin\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"/></td>\n</tr>\n</tbody>\n</table>\n\n''<$link to=\"$:/ipfs/saver/provider\"><<lingo Provider>></$link>''\n\n<$radio tiddler=\"$:/ipfs/saver/provider\" value=\"default\"><<lingo Provider/Default/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/provider\" value=\"window\"><<lingo Provider/Window/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/provider\" value=\"http\"><<lingo Provider/HTTP/Description>></$radio>\n\n''<$link to=\"$:/ipfs/saver/export\"><<lingo Export>></$link>''\n\n<$radio tiddler=\"$:/ipfs/saver/export\" value=\"json\"><<lingo Export/Json/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/export\" value=\"static\"><<lingo Export/Static/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/export\" value=\"tid\"><<lingo Export/Tid/Description>></$radio>\n\n''<$link to=\"$:/ipfs/saver/protocol\"><<lingo Protocol>></$link>''\n\n<$radio tiddler=\"$:/ipfs/saver/protocol\" value=\"ens\"><<lingo Protocol/Ens/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/protocol\" value=\"ipfs\"><<lingo Protocol/Ipfs/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/protocol\" value=\"ipns\"><<lingo Protocol/Ipns/Description>></$radio>\n\n''<$link to=\"$:/ipfs/saver/policy\"><<lingo Policy>></$link>''\n\n<$radio tiddler=\"$:/ipfs/saver/policy\" value=\"origin\"><<lingo Policy/Origin/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/policy\" value=\"gateway\"><<lingo Policy/Gateway/Description>></$radio>\n\n''<<lingo Url>>''\n\n<table>\n<tbody>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/api\"><<lingo ApiUrl>></$link>''</td>\n<td width=\"80%\">\n<$select tiddler=\"$:/ipfs/saver/api\" default=\"$:/ipfs/saver/api/https/ipfs.infura.io/5001\" class=\"tc-edit-texteditor\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/ipfs/saver/api]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"text\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n</td>\n</tr>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/gateway\"><<lingo GatewayUrl>></$link>''</td>\n<td width=\"80%\">\n<$select tiddler=\"$:/ipfs/saver/gateway\" default=\"$:/ipfs/saver/gateway/https/ipfs.infura.io\" class=\"tc-edit-texteditor\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/ipfs/saver/gateway]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"text\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n</td>\n</tr>\n</tbody>\n</table>\n\n''<<lingo Ens>>''\n\n<table>\n<tbody>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/ens/domain\"><<lingo EnsDomain>></$link>''</td>\n<td width=\"80%\"><$edit-text tiddler=\"$:/ipfs/saver/ens/domain\" class=\"tc-edit-texteditor\" default=\"\" tag=\"input\"/></td>\n</tr>\n</tbody>\n</table>\n\n<table style=\"width:20%;margin-left:40%;margin-right:40%;text-align:center;\">\n<tbody>\n<tr>\n<td style=\"width:10%\">\n<$button message=\"tm-ens-manager-open\" tooltip={{$:/language/Buttons/Ens/Manager/Open/Hint}} aria-label={{$:/language/Buttons/Ens/Manager/Open/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/ens}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ens/Manager/Open/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ens-resolve-and-open\" tooltip={{$:/language/Buttons/Ens/Resolve/And/Open/Hint}} aria-label={{$:/language/Buttons/Ens/Resolve/And/Open/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/globe}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ens/Resolve/And/Open/Caption}}/></span>\n</$list>\n</$button>\n</td>\n</tr>\n</tbody>\n</table>\n\n''<<lingo Ipns>>''\n\n<table>\n<tbody>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/ipns/name\"><<lingo IpnsName>></$link>''</td>\n<td width=\"80%\"><$edit-text tiddler=\"$:/ipfs/saver/ipns/name\" class=\"tc-edit-texteditor\" default=\"\" tag=\"input\"/></td>\n</tr>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/ipns/key\"><<lingo IpnsKey>></$link>''</td>\n<td width=\"80%\"><$text text={{$:/ipfs/saver/ipns/key}} class=\"tc-edit-texteditor\"/></td>\n</tr>\n</tbody>\n</table>\n\n<table style=\"width:50%;margin-left:25%;margin-right:25%;text-align:center;\">\n<tbody>\n<tr>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-rename\" tooltip={{$:/language/Buttons/Ipns/Rename/Hint}} aria-label={{$:/language/Buttons/Ipns/Rename/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/mono-line}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Rename/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-generate\" tooltip={{$:/language/Buttons/Ipns/Generate/Hint}} aria-label={{$:/language/Buttons/Ipns/Generate/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Generate/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-remove\" tooltip={{$:/language/Buttons/Ipns/Remove/Hint}} aria-label={{$:/language/Buttons/Ipns/Remove/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Remove/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-fetch\" tooltip={{$:/language/Buttons/Ipns/Fetch/Hint}} aria-label={{$:/language/Buttons/Ipns/Fetch/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Fetch/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-resolve-and-open\" tooltip={{$:/language/Buttons/Ipns/Resolve/And/Open/Hint}} aria-label={{$:/language/Buttons/Ipns/Resolve/And/Open/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/globe}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Resolve/And/Open/Caption}}/></span>\n</$list>\n</$button>\n</td>\n</tr>\n</tbody>\n</table>"
},
"$:/core/ui/Buttons/ipfs/export/attachment": {
"title": "$:/core/ui/Buttons/ipfs/export/attachment",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/ipfs}} {{$:/language/Buttons/Ipfs/Export/Attachment/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Export/Attachment/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-export-attachment\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Export/Attachment/Hint}} aria-label={{$:/language/Buttons/Ipfs/Export/Attachment/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/ipfs}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Export/Attachment/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/export/content": {
"title": "$:/core/ui/Buttons/ipfs/export/content",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/excise}} {{$:/language/Buttons/Ipfs/Export/Content/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Export/Content/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-export-content\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Export/Content/Hint}} aria-label={{$:/language/Buttons/Ipfs/Export/Content/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/excise}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Export/Content/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/export": {
"title": "$:/core/ui/Buttons/ipfs/export",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/excise}} {{$:/language/Buttons/Ipfs/Export/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Export/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-export\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Export/Hint}} aria-label={{$:/language/Buttons/Ipfs/Export/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/excise}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Export/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/refresh": {
"title": "$:/core/ui/Buttons/ipfs/refresh",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Ipfs/Refresh/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Refresh/Hint}}",
"text": "<$button message=\"tm-refresh-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Refresh/Hint}} aria-label={{$:/language/Buttons/Ipfs/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipfs/Refresh/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/tiddler/pin": {
"title": "$:/core/ui/Buttons/ipfs/tiddler/pin",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Ipfs/Tiddler/Pin/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Tiddler/Pin/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-pin\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Tiddler/Pin/Hint}} aria-label={{$:/language/Buttons/Ipfs/Tiddler/Pin/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/chevron-up}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Tiddler/Pin/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/tiddler/unpin": {
"title": "$:/core/ui/Buttons/ipfs/tiddler/unpin",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-down}} {{$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Tiddler/Unpin/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-unpin\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Tiddler/Unpin/Hint}} aria-label={{$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/chevron-down}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/plugins/ipfs/styles": {
"title": "$:/plugins/ipfs/styles",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/Stylesheet",
"type": "text/css",
"text": ".tc-ipfs-action {\n display: block;\n margin: auto;\n width: 18px;\n height: 18px;\n}\n\n.tc-icon-ipfs-wrapper {\n display: inline-block;\n width: 1em;\n height: 1em;\n}\n\na.tc-ipfs-link-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-ipfs-link-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-ipfs-link-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n cursor: pointer;\n}"
}
}
}